本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
RabbitMQ是一個開源的消息代理服務器,能夠為您的應用提供一個通用的消息發送和接收平臺,并且保證消息在傳輸過程中的安全性。本文介紹如何通過Filebeat,將RabbitMQ的日志采集到阿里云Elasticsearch(簡稱ES)中,并對日志進行可視化分析與監控。
操作流程
完成環境準備,包括創建實例、安裝RabbitMQ等。
配置RabbitMQ的日志級別和文件名。
基于Spring Boot,使用RabbitMQ的JMS客戶端生產日志數據到RabbitMQ中。
配置Filebeat采集器,將RabbitMQ的日志數據發送到Logstash的8100端口。
配置Logstash管道,使用基本的Grok模式從原始消息中分離出時間戳、日志級別和消息,然后發送到阿里云ES中。
通過Kibana查看經Logstash處理后的數據。
在Kibana控制臺的Discover頁面,通過Filter過濾出RabbitMQ相關的日志。
通過Metricbeat采集RabbitMQ日志,并通過Kibana實現可視化指標監控。
準備工作
創建阿里云ES和Logstash實例,兩者版本相同,并且在同一專有網絡VPC(Virtual Private Cloud)下。
具體操作步驟請參見創建阿里云Elasticsearch實例、創建阿里云Logstash實例,本文以6.7版本為例。
開啟阿里云ES實例的自動創建索引功能。
具體操作步驟請參見快速訪問與配置。
創建阿里云ECS實例,要求與阿里云ES實例和Logstash實例處于同一VPC下。
具體操作步驟請參見自定義購買實例。
重要該ECS實例用來安裝Beats和RabbitMQ,由于Beats目前僅支持Alibaba Cloud Linux (Alinux)、RedHat和CentOS這三種操作系統,因此在創建時請選擇其中一種操作系統。本文以CentOS為例。
在目標ECS實例上安裝云助手和Docker服務。
具體操作步驟請參見安裝云助手Agent和部署并使用Docker(CentOS 8)。
在目標ECS實例上安裝RabbitMQ。
具體操作步驟請參見Downloading and Installing RabbitMQ。
步驟一:配置RabbitMQ
配置RabbitMQ的日志記錄級別和文件名,步驟如下:
連接安裝了RabbitMQ的ECS服務器。
具體操作步驟請參見連接實例。
說明本文檔以普通用戶權限為例。
執行以下命令,打開RabbitMQ的配置文件。
sudo vim /etc/rabbitmq/rabbitmq.config
修改RabbitMQ的配置文件。
{ lager, [ %% All log messages go to the default "sink" configured with %% the `handlers` parameter. By default, it has a single %% lager_file_backend handler writing messages to "$nodename.log" %% (ie. the value of $RABBIT_LOGS). {handlers, [ {lager_file_backend, [{file, "rabbit.log"}, {level, info}, {date, ""}, {size, 0}]} ]}, {extra_sinks, [ {rabbit_channel_lager_event, [{handlers, [ {lager_forwarder_backend, [lager_event, info]}]}]}, {rabbit_conection_lager_event, [{handlers, [ {lager_forwarder_backend, [lager_event, error]}]}]} ]}
修改后,RabbitMQ的日志文件名變為rabbit.log。
說明日志級別(level)默認為info,您也可以將其設置為error,即記錄出錯日志。本文以info日志為例。
修改配置文件后,需要啟動RabbitMQ才能生效。
啟動RabbitMQ服務。
進入RabbitMQ安裝目錄的bin文件夾下,啟動服務。
sudo cd /usr/lib/rabbitmq/bin sudo rabbitmq-server start
啟動成功后,可在/var/log/rabbitmq下看到rabbit.log文件。
步驟二:安裝RabbitMQ示例應用
本節基于Spring Boot,使用RabbitMQ的JMS客戶端進行演示。具體操作步驟如下:
由于示例需要編譯應用,因此您必須先安裝Java 8。
在ECS中,執行以下命令克隆示例。
sudo git clone https://github.com/rabbitmq/rabbitmq-jms-client-spring-boot-trader-demo
進入該應用所在根目錄。
cd rabbitmq-jms-client-spring-boot-trader-demo
執行以下命令打包并運行應用。
sudo mvn clean package sudo java -jar target/rabbit-jms-boot-demo-1.2.0-SNAPSHOT.jar
運行成功后,返回結果如下。
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.5.8.RELEASE) 2020-05-11 10:16:46.089 INFO 28119 --- [main] com.rabbitmq.jms.sample.StockQuoter : Starting StockQuoterxxxxxx 2020-05-11 10:16:46.092 INFO 28119 --- [main] com.rabbitmq.jms.sample.StockQuoter : No active profile set,xxxxxx 2020-05-11 10:16:46.216 INFO 28119 --- [main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.xxxxxx 2020-05-11 10:16:47.224 INFO 28119 --- [main] com.rabbitmq.jms.sample.StockConsumer : connectionFactory => RMQConnectionFactoryxxxxxx 2020-05-11 10:16:48.054 INFO 28119 --- [main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposurexxxxxx 2020-05-11 10:16:48.062 INFO 28119 --- [main] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 0xxxxxx ......
進入log目錄下查看RabbitMQ日志。
sudo cd /var/log/rabbitmq sudo ls
返回結果中的rabbit.log即為步驟一:配置RabbitMQ中配置的文件名。
步驟三:創建并配置阿里云Filebeat
配置Filebeat采集器,將RabbitMQ的日志信息發送到阿里云Logstash的8100端口。
- 登錄阿里云Elasticsearch控制臺。
在左側導航欄,單擊Beats數據采集中心。
在創建采集器區域,選擇。
配置采集器。
更多信息,請參見采集ECS服務日志和采集器YML配置。本文使用的配置如下。
說明采集器Output需要指定目標阿里云Logstash的實例ID,在YML配置中不需要重新指定Output。
Filebeat文件目錄需要填寫RabbitMQ日志所在的目錄,同時需要在YML配置中開啟log數據采集,并配置log路徑。
本文使用的filebeat.yml中的
filebeat.inputs
配置如下。filebeat.inputs: # Each - is an input. Most options can be set at the input level, so # you can use different inputs for various configurations. # Below are the input specific configurations. - type: log # Change to true to enable this input configuration. enabled: true fields: log_type: rabbitmq-server # Paths that should be crawled and fetched. Glob based paths. paths: - /var/log/rabbitmq/*log fields_under_root: true encoding: utf-8 ignore_older: 3h
安裝并啟動采集器。
具體操作,請參見采集ECS服務日志。安裝時所選的ECS實例要與阿里云Logstash在同一VPC下。
查看采集器安裝情況。
采集器狀態變為已生效1/1,且查看采集器安裝情況后顯示為心跳正常,說明采集器安裝成功。
步驟四:配置阿里云Logstash管道
配置阿里云Logstash管道,使用基本的Grok模式從原始消息中分離出時間戳、日志級別和消息,然后發送到阿里云ES實例的指定索引中。
- 進入阿里云Elasticsearch控制臺的Logstash頁面。
- 進入目標實例。
- 在頂部菜單欄處,選擇地域。
- 在Logstash實例中單擊目標實例ID。
在左側導航欄,單擊管道管理。
單擊創建管道。
在創建管道任務頁面,輸入管道ID并配置管道。
本文使用的管道配置如下。
input { beats { port => 8100 } } filter { grok { match => { "message" => ["%{TIMESTAMP_ISO8601:timestamp} \[%{LOGLEVEL:log_level}\] \<%{DATA:field_misc}\> %{GREEDYDATA:message}"] } } } output { elasticsearch { hosts => "es-cn-4591jumei000u****.elasticsearch.aliyuncs.com:9200" user => "elastic" password => "your_password" index => "rabbitmqlog-%{+YYYY.MM.dd}" } }
管道配置詳情請參見Logstash配置文件說明。
單擊下一步,配置管道參數。
參數
說明
管道工作線程
并行執行管道的Filter和Output的工作線程數量。當事件出現積壓或CPU未飽和時,請考慮增大線程數,更好地使用CPU處理能力。默認值:實例的CPU核數。
管道批大小
單個工作線程在嘗試執行Filter和Output前,可以從Input收集的最大事件數目。較大的管道批大小可能會帶來較大的內存開銷。您可以設置LS_HEAP_SIZE變量,來增大JVM堆大小,從而有效使用該值。默認值:125。
管道批延遲
創建管道事件批時,將過小的批分派給管道工作線程之前,要等候每個事件的時長,單位為毫秒。默認值:50ms。
隊列類型
用于事件緩沖的內部排隊模型。可選值:
MEMORY:默認值。基于內存的傳統隊列。
PERSISTED:基于磁盤的ACKed隊列(持久隊列)。
隊列最大字節數
請確保該值小于您的磁盤總容量。默認值:1024 MB。
隊列檢查點寫入數
啟用持久性隊列時,在強制執行檢查點之前已寫入事件的最大數目。設置為0,表示無限制。默認值:1024。
警告配置完成后,需要保存并部署才能生效。保存并部署操作會觸發實例重啟,請在不影響業務的前提下,繼續執行以下步驟。
單擊保存或者保存并部署。
保存:將管道信息保存在Logstash里并觸發實例變更,配置不會生效。保存后,系統會返回管道管理頁面。可在管道列表區域,單擊操作列下的立即部署,觸發實例重啟,使配置生效。
保存并部署:保存并且部署后,會觸發實例重啟,使配置生效。
步驟五:通過Kibana查看日志數據
登錄目標阿里云ES的Kibana控制臺。
具體步驟請參見登錄Kibana控制臺。
在左側導航欄,單擊Dev Tools。
在Console中執行以下命令,查看Logstash處理后的RabbitMQ日志數據。
GET rabbitmqlog-*/_search { "query": { "match_all": { }} }
執行成功后,返回如下結果。
步驟六:通過Kibana過濾日志數據
登錄目標阿里云ES實例的Kibana控制臺。
具體步驟請參見登錄Kibana控制臺。
創建一個索引模式。
在左側導航欄,單擊Management。
在Kibana區域,單擊Index Patterns。
單擊Create index pattern。
輸入Index pattern(本文使用rabbitmqlog-*),單擊Next step。
選擇Time Filter field name(本文選擇@timestamp),單擊Create index pattern。
在左側導航欄,單擊Discover。
從頁面左側的下拉列表中,選擇您已創建的索引模式(rabbitmqlog-*)。
在頁面右上角,選擇一段時間,查看對應時間段內的RabbitMQ日志數據。
單擊Add a filter,設置過濾條件,查看符合條件的日志數據。
步驟七:配置Metricbeat采集RabbitMQ指標
您也可以通過Metricbeat采集RabbitMQ日志數據,并通過Kibana可視化監控RabbitMQ的各項指標。
登錄目標阿里云ES的Kibana控制臺。
具體步驟請參見登錄Kibana控制臺。
在頁面左上角,單擊Kibana。
在Add Data to Kibana區域,單擊Add metric data。
在Metrics頁簽,單擊RabbitMQ metrics。
單擊RPM,按照頁面提示在ECS中安裝并配置Metricbeat。
配置Metricbeat時,需要修改/etc/metricbeat/metricbeat.yml文件,設置Kibana和ES集群的連接信息,本文使用的配置如下。
setup.kibana: # Kibana Host # Scheme and port can be left out and will be set to the default (http and 5601) # In case you specify and additional path, the scheme is required: http://localhost:5601/path # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601 host: "https://es-cn-4591jumei000u****.kibana.elasticsearch.aliyuncs.com:5601" output.elasticsearch: # Array of hosts to connect to. hosts: ["es-cn-4591jumei000u****.elasticsearch.aliyuncs.com:9200"] # Enabled ilm (beta) to use index lifecycle management instead daily indices. #ilm.enabled: false # Optional protocol and basic auth credentials. #protocol: "https" username: "elastic" password: "your_password"
啟動RabbitMQ模塊及Metricbeat服務。
啟動RabbitMQ模塊
sudo metricbeat modules enable rabbitmq
啟動Metricbeat服務并設置儀表盤
sudo metricbeat setup sudo service metricbeat start
在RPM頁簽中,單擊Check data。
單擊RabbitMQ metrics dashboard,查看Dashboard監控大盤。