RabbitMQ簡介
RabbitMQ是消息隊列軟件,也稱為消息代理或隊列管理器。 簡單地說; 它是定義隊列的軟件,應用程序連接到該隊列以傳輸一條或多條消息。
一條消息可以包含任何種類的信息。 例如,它可能具有有關應在另一個應用程序(甚至可能在另一個服務器上)上啟動的過程或任務的信息,或者可能只是一條簡單的文本消息。 隊列管理器軟件存儲消息,直到接收應用程序連接並從隊列中取出消息為止。 接收應用程序然後處理該消息。
消息隊列的基本體系結構很簡單-有一些稱之為生產者(producers)的客戶端應用程序,它們可以創建消息並將其傳遞到代理(即消息隊列)。 其他應用程序(稱為消費者,也即consumers)連接到隊列並訂閱要處理的消息。 軟件可以充當消息的生產者或消費者,或者既充當消息的消費者又充當生產者。 存儲在隊列中的消息將被存儲,直到消費者檢索到它們為止。
RabbitMQ的那些log
重要的是要知道,從2017年11月29日發佈的3.7.0版開始,RabbitMQ 會記錄到一個日誌文件中。 在此之前,有兩個日誌文件。 在本文中,我使用的是RabbitMQ版本3.8.2,因此一個日誌文件的內容將發送到Elasticsearch。 如果您使用的是RabbitMQ的早期版本,尤其是3.7.0之前的版本,請參考文檔以獲取有關兩個不同日誌文件的更多信息。
此外,對於當前版本的 RabbitMQ,您可以指定 RabbitMQ 將其日誌文件保存在 Rabbitmq.conf中的位置,我將在安裝過程中顯示該文件。
準備工作
在本文中,我們將詳述在如何使用阿里雲 Beats 把我們想要的 RabbitMQ 日誌導入到阿里雲 Elastic Stack 中,並對日誌進行可視化分析。
1、準備阿里雲 Elasticsearch 6.7 版本環境,並使用創建的賬號密碼登錄Kibana;
2、準備阿里雲 Logstash 6.7 版本環境;
3、準備 RabbitMQ 服務
4、安裝 Filebeat
安裝 RabbitMQ
安裝需要在阿里雲 ECS 環境中進行,這裡就不累述了。安裝後,RabbitMQ 服務將啟動並啟用,以在需要啟動時啟動。 要檢查狀態,請運行:
# cd /usr/lib/rabbitmq/bin
# rabbitmq-server start
配置RabbitMQ
安裝完成後,配置日誌記錄級別,進入/etc/rabbitmq/rabbitmq.config,配置日誌級別和文件名,默認是 “info”,也可將其設置為“error”,即出錯記錄日誌。
# vim /etc/rabbitmq/rabbitmq.config
{lager, [
%%
%% Log directory, taken from the RABBITMQ_LOG_BASE env variable by default.
%% {log_root, "/var/log/rabbitmq"},
%%
%% 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]}]}]}
]}
經過這樣的修改,我們的 log 的文件名將會變成為“rabbit.log”,同時我們的日誌級別也被設置為 “info”。因為我們已經修改了我們的配置文件,我們需要重新啟動 rabbitmq-server 才能使得這個配置起作用。我們執行如下的命令:
#####由於rabbitmq是通過rpm包安裝,進入bin下啟動###
# cd /usr/lib/rabbitmq/bin
# rabbitmq-server start
進入/var/log/rabbitmq可看到有輸出rabbit.log
安裝RabbitMQ demo應用
為了利用上述 RabbitMQ 設置,我將在 Spring Boot App 使用 RabbitMQ 的 JMS 客戶端演示。 可以使用 README中的說明以及 Spring CLI 或 Java JAR 文件來進行設置。為了能夠使得你能夠編譯應用,你必須安裝 Java 8 的環境。我們按照如下的步驟來進行:
# git clone https://github.com/rabbitmq/rabbitmq-jms-client-spring-boot-trader-demo
####進入該應用所在根目錄######
# mvn clean package
# 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 StockQuoter v1.2.0-SNAPSHOT on zl-test001 with PID 28119 (/root/rabbitmq-jms-client-spring-boot-trader-demo/target/rabbit-jms-boot-demo-1.2.0-SNAPSHOT.jar started by root in /root/rabbitmq-jms-client-spring-boot-trader-demo)
2020-05-11 10:16:46.092 INFO 28119 --- [ main] com.rabbitmq.jms.sample.StockQuoter : No active profile set, falling back to default profiles: default
2020-05-11 10:16:46.216 INFO 28119 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@1de0aca6: startup date [Mon May 11 10:16:46 CST 2020]; root of context hierarchy
2020-05-11 10:16:47.224 INFO 28119 --- [ main] com.rabbitmq.jms.sample.StockConsumer : connectionFactory => RMQConnectionFactory{user='guest', password=xxxxxxxx, host='localhost', port=5672, virtualHost='/', queueBrowserReadMax=0}
2020-05-11 10:16:48.054 INFO 28119 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2020-05-11 10:16:48.062 INFO 28119 --- [ main] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 0
......
###經過上面配置,進入log下查看rabbitmq日誌:
# pwd
/var/log/rabbitmq
erl_crash.dump rabbit.log [email protected] rabbit@zl-test001_upgrade.log
log
其中 rabbit.log 就是我們之前剛剛配置好的文件名。
接下來我們講述如何使用阿里雲 Filebeat 和 Logstash 把這些日誌導入到阿里雲 Elasticsearch 中。
配置阿里雲 Filebeat
1、在阿里雲 beats 數據採集中心,創建 Filebeat採集器
2、指定採集器名稱、安裝版本、採集器output及配置Yml配置。
Filebeat.input配置如下:
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
3、進入下一步,選擇與 Logstash 同一 VPC 下的 ECS 實例,進行啟動。
待採集器生效,我們就可以啟動 Filebeat 服務。
配置阿里雲 Logstash
通過配置 Beat 採集器,將 RabbitMQ 的 Log 發送到 Logstash 的 8100 端口,接下來我們配置 Logstash,使用了基本的 Grok 模式從原始消息中分離出時間戳,日誌級別和消息,然後將輸出發送到阿里雲 Elasticsearch,並指定索引。
1、進入 Logstash 實例下的管道管理頁面。
2、點擊創建管道,並對管道進行配置。
配置文件如下:
input {
beats {
port => 8100
}
}
filter {
grok {
match => { "message" => ["%{TIMESTAMP_ISO8601:timestamp} \[%{LOGLEVEL:log_level}\] \<%{DATA:field_misc}\> %{GREEDYDATA:message}"] }
}
}
output {
elasticsearch {
hosts => "es-cn-42333umei000u1zp5.elasticsearch.aliyuncs.com:9200"
user => "elastic"
password => "E222ic@123"
index => "rabbitmqlog-%{+YYYY.MM.dd}"
}
}
3、下一步,定義管道參數並保持部署。
4、部署成功後,查看 ES 上保存的索引數據,說明 ES 已存儲了經 Logstash 處理後的數據。
通過 kibana 查看日誌文檔
在阿里雲 Elasticsearch 控制檯進入 Kbana 中的 Management ,配置“index patterns”,設置為 Rabbitmlog-*
指定時間過濾字段後創建該索引模塊。
進入 Discover 頁面下,選擇上面創建的 patterns,通過 Filter 過濾出 RabbitMQ 相關的日誌。
從上面我們可以看出來我們已經有 RabbitMQ 的日誌了。
配置Metricbeat採集rabbitMQ各項指標
我們同樣也可以通過 metricbeat index pattern 對 RabbitMQ 進行數據採集,並通過Kibana實現可視化指標監控。
進入“Add metric data”
點擊“RabbitMQ Metrics”
安裝步驟下載並安裝
按照上述指令對 Metricbeat 進行配置。
通過修改 /etc/metricbeat/metricbeat.yml 文件,設置 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-451233mei000u1zp5.kibana.elasticsearch.aliyuncs.com:5601"
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["es-cn-4591jumei000u1zp5.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: "12233"
啟動 RabbitMQ 模塊及 Metricbeat 服務
# sudo metricbeat modules enable rabbitmq
#####設置儀表盤#######
# sudo metricbeat setup
# sudo service metricbeat start
重啟 Metricbeat 服務後點擊該頁的 check data,返回"Data successfully received from this module"表示已從該模塊成功接收數據。
點擊“RabbitMQ metrics dashboard”查看 Dashboard 監控大盤
聲明:本文由“Beats:使用Elastic Stack對Redis監控”基於阿里雲服務環境授權改編
原文作者:Elastic 中國社區佈道師——劉曉國
合作編輯:Lettie/大禹
出處鏈接:https://elasticstack.blog.csdn.net/.
【阿里雲Elastic Stack】100%兼容開源ES,獨有9大能力
相關活動
更多折扣活動,請訪問阿里雲 Elasticsearch 官網
阿里雲 Elasticsearch 商業通用版,1核2G ,SSD 20G首月免費
阿里雲 Logstash 2核4G首月免費