開發與維運

【最佳實踐】Beats導入RabbitMQ日誌至阿里雲Elatic Stack實現可視化分析

RabbitMQ簡介

RabbitMQ是消息隊列軟件,也稱為消息代理或隊列管理器。 簡單地說; 它是定義隊列的軟件,應用程序連接到該隊列以傳輸一條或多條消息。

image.png

一條消息可以包含任何種類的信息。 例如,它可能具有有關應在另一個應用程序(甚至可能在另一個服務器上)上啟動的過程或任務的信息,或者可能只是一條簡單的文本消息。 隊列管理器軟件存儲消息,直到接收應用程序連接並從隊列中取出消息為止。 接收應用程序然後處理該消息。

image.png

消息隊列的基本體系結構很簡單-有一些稱之為生產者(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配置。

image.png

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 實例,進行啟動。

image.png

待採集器生效,我們就可以啟動 Filebeat 服務。

image.png

配置阿里雲 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、下一步,定義管道參數並保持部署。

image.png

4、部署成功後,查看 ES 上保存的索引數據,說明 ES 已存儲了經 Logstash 處理後的數據。

image.png

通過 kibana 查看日誌文檔

在阿里雲 Elasticsearch 控制檯進入 Kbana 中的 Management ,配置“index patterns”,設置為 Rabbitmlog-*

image.png

指定時間過濾字段後創建該索引模塊。

image.png

進入 Discover 頁面下,選擇上面創建的 patterns,通過 Filter 過濾出 RabbitMQ 相關的日誌。

image.png

從上面我們可以看出來我們已經有 RabbitMQ 的日誌了。

配置Metricbeat採集rabbitMQ各項指標

我們同樣也可以通過 metricbeat index pattern 對 RabbitMQ 進行數據採集,並通過Kibana實現可視化指標監控。

進入“Add metric data”

image.png

點擊“RabbitMQ Metrics”

image.png

安裝步驟下載並安裝

image.png

按照上述指令對 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"表示已從該模塊成功接收數據。

image.png

點擊“RabbitMQ metrics dashboard”查看 Dashboard 監控大盤

image.png

聲明:本文由“Beats:使用Elastic Stack對Redis監控”基於阿里雲服務環境授權改編
原文作者:Elastic 中國社區佈道師——劉曉國

合作編輯:Lettie/大禹
出處鏈接:https://elasticstack.blog.csdn.net/.


image.png

阿里雲Elastic Stack】100%兼容開源ES,獨有9大能力

相關活動


更多折扣活動,請訪問阿里雲 Elasticsearch 官網

阿里雲 Elasticsearch 商業通用版,1核2G ,SSD 20G首月免費
阿里雲 Logstash 2核4G首月免費


image.png

image.png

Leave a Reply

Your email address will not be published. Required fields are marked *