Beats:使用Elastic Stack监控RabbitMQ

RabbitMQ是一个开放源消息代理,创建于2007年以实现AMQP,并且在过去的十二年中,通过不断增加的插件列表,它已包括HTTP,STOMP,SMTP和其他协议。它也是Kafka的一个强劲的竞争者。在今天的文章中,我们将详述如何使用Elastic Stack来监控RabbitMQ。

RabbitMQ简介

RabbitMQ是消息队列软件,也称为消息代理或队列管理器。 简单地说; 它是定义队列的软件,应用程序连接到该队列以传输一条或多条消息。

message queue

一条消息可以包含任何种类的信息。 例如,它可能具有有关应在另一个应用程序(甚至可能在另一个服务器上)上启动的过程或任务的信息,或者可能只是一条简单的文本消息。 队列管理器软件存储消息,直到接收应用程序连接并从队列中取出消息为止。 接收应用程序然后处理该消息。

RabbitMQ workflow tutorial

消息队列的基本体系结构很简单-有一些称之为生产者(producers)的客户端应用程序,它们可以创建消息并将其传递到代理(消息队列)。 其他应用程序(称为消费者,也即consumers)连接到队列并订阅要处理的消息。 软件可以充当消息的生产者或消费者,或者既充当消息的消费者又充当生产者。 存储在队列中的消息将被存储,直到消费者检索到它们为止。

在下面我们来具体介绍如何使用Elastic Stack来把我们想要的RabbitMQ日志导入到Elastic Stack中,并对日志进行分析。

 

RabbitMQ的哪些log

重要的是要知道,从2017年11月29日发布的3.7.0版开始,RabbitMQ会记录到一个日志文件中。 在此之前,有两个日志文件。 在本文中,我使用的是RabbitMQ版本3.8.2,因此一个日志文件的内容将发送到Elasticsearch。 如果您使用的是RabbitMQ的早期版本,尤其是3.7.0之前的版本,请参考文档以获取有关两个不同日志文件的更多信息。

此外,对于当前版本的RabbitMQ,您可以指定RabbitMQ将其日志文件保存在rabbitmq.conf中的位置,我将在安装过程中显示该文件。

配置

我们将RabbitMQ日志传送到Elastic Stack的方法是使用Filebeat和logstash。如下是我的配置:

在上面我们把Elastic Stack的Elasticsearch和Kibana放到MacOS上,我们把其它的部分放到一个Ubuntu OS上。

安装

为了能够完成我们的设置,我们做如下的安装:

安装Elasticseach

如果大家还没安装好自己的Elastic Stack的话,那么请按照我之前的教程“如何在Linux,MacOS及Windows上进行安装Elasticsearch” 安装好自己的Elasticsearch。由于我们的Elastic Stack需要被另外一个Ubuntu VM来访问,我们需要对我们的Elasticsearch进行配置。首先使用一个编辑器打开在config目录下的elasticsearch.yml配置文件。我们需要修改network.host的IP地址。在你的Mac及Linux机器上,我们可以使用:

$ ifconfig

来查看到我们的机器的IP地址。针对我的情况,我的MacOS机器的IP地址是:192.168.43.220。

在上面我们把network.host设置为"_site",表明它绑定到我们的本地电脑的IP地址。详细说明请参阅Elasticsearch的network.host说明

我们也必须在elasticsearch.yml的最后加上discovery.type: single-node,表明我们是单个node。

等修改完我们的IP地址后,我们保存elasticsearch.yml文件。然后重新运行我们的elasticsearch。我们可以在一个浏览器中输入刚才输入的IP地址并加上端口号9200。这样可以查看一下我们的elasticsearch是否已经正常运行了。

安装Kibana

我们可以按照“如何在Linux,MacOS及Windows上安装Elastic栈中的Kibana”中介绍的那样来安装我们的Kibana。由于我们的Elasticsearch的IP地址已经改变,所以我们必须修改我们的Kibana的配置文件。我们使用自己喜欢的编辑器打开在config目录下的kibana.yml文件,并找到server.host。把它的值修改为自己的电脑的IP地址。针对我的情况是:

同时找到elasticsearch.hosts,并把自己的IP地址输入进去:

保存我们的kibana.yml文件,并运行我们的Kibana。同时在浏览器的地址中输入自己的IP地址及5601端口:

如果配置成功的话,我们就可以看到上面的画面。

安装RabbitMQ

我们可以参照文章“How to install Latest RabbitMQ Server on Ubuntu 18.04 LTS”来在Ubuntu OS上安装RabbitMQ。这里就不累述了。安装后,RabbitMQ服务将启动并启用以在启动时启动。 要检查状态,请运行:

udo systemctl status  rabbitmq-server.service 
$ sudo systemctl status  rabbitmq-server.service 
● rabbitmq-server.service - RabbitMQ broker
   Loaded: loaded (/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-02-27 16:02:00 CST; 1h 30min ago
 Main PID: 844 (beam.smp)
   Status: "Initialized"
    Tasks: 127 (limit: 4915)
   CGroup: /system.slice/rabbitmq-server.service
           ├─ 844 /usr/lib/erlang/erts-10.6.4/bin/beam.smp -W w -A 96 -MBas ageffcbf -MHas ageffcbf 
           ├─1011 /usr/lib/erlang/erts-10.6.4/bin/epmd -daemon
           ├─1393 erl_child_setup 32768
           ├─1636 inet_gethost 4
           └─1637 inet_gethost 4

2月 27 16:01:59 liuxg rabbitmq-server[844]:   Doc guides: https://rabbitmq.com/documentation.html
2月 27 16:01:59 liuxg rabbitmq-server[844]:   Support:    https://rabbitmq.com/contact.html
2月 27 16:01:59 liuxg rabbitmq-server[844]:   Tutorials:  https://rabbitmq.com/getstarted.html
2月 27 16:01:59 liuxg rabbitmq-server[844]:   Monitoring: 
...

如果我们看到上面的输出就表明我们的rabbitmq-server已经成功安装。在默认的情况下,它会在目录/var/log/rabbitmq生成相应的log文件。为了能够配置日志级别和日志文件名,请确保在/etc/rabbitmq/rabbitmq.conf中设置以下值:

/etc/rabbitmq/rabbitmq.conf
log.dir = /var/log/rabbitmq
log.file = rabbit.log
log.file.level = info 

经过这样的修改,我们的log的文件名将会变成为rabbit.log,同时我们的日志级别也被设置为info。因为我们已经修改了我们的配置文件,我们需要重新启动rabbitmq-server才能使得这个配置起作用。我们执行如下的命令:

sudo service rabbitmq-server restart 

安装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

等下载好上面的测试应用后,我们进入到该应用所在的根目录,并打入如下的命令:

sudo rabbitmq-plugins enable rabbitmq_jms_topic_exchange
mvn clean package
java -jar target/rabbit-jms-boot-demo-${VERSION}-SNAPSHOT.jar

请注意在上面的VERSION部分是根据你自己编译的结果来自己填写进去。如果我们的应用被成功编译,并成功运行,那么我可以看到类似如下的画面:

经过上面的配置后,我们在如下的地址可以看到我们想要的rabbitmq的日志:

$ pwd
/var/log/rabbitmq
liuxg@liuxg:/var/log/rabbitmq$ ls
log  [email protected]  rabbit@liuxg_upgrade.log  rabbit.log

其中rabbit.log就是我们之前刚刚配置好的文件名。

接下来我们讲述如何使用Filebeat和Logstash把这些日志导入到Elasticsearch中。

安装Logstash

我们按照“如何安装Elastic栈中的Logstash”来安装好自己的Logstash。针对我们的Linux安装,我们可以做如下的安装:

curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-7.5.0.tar.gz
tar -xzvf logstash-7.5.0.tar.gz
cd cd logstash-7.5.0

我使用了基本的grok模式从原始消息中分离出时间戳,日志级别和消息,然后将输出发送到Elasticsearch,并指定索引。 我可以创建一个属于longstash的配置文件:

logstash_rabbitmq.conf

input {
  beats {
    port => 5044
  }
}

filter {
  grok {
    match => { "message" => ["%{TIMESTAMP_ISO8601:timestamp} \[%{LOGLEVEL:log_level}\] \<%{DATA:field_misc}\> %{GREEDYDATA:message}"] }
  }
}

output {
  stdout {
        codec => rubydebug
  }

  elasticsearch {
      hosts => "192.168.43.220:9200"
      index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
  }
}

在上面,我们的input来自于beats的5044口。你需要根据自己的Elasticsearch的地址把相应的IP地址修改。在上面为了调试的方便,我们也加入了stdout输出。每当有信息被处理时,它也会输出到terminal的屏幕上。

我们可以使用如下的方式来运行我们的logstash:

$ pwd
/home/liuxg/logstash/logstash-7.5.0
liuxg@liuxg:~/logstash/logstash-7.5.0$ ./bin/logstash -f ~/rabbitmq/logstash_rabbitmq.conf

如果运行正常的话,我们可以在terminal中看到logstash已经被正常启动:

接下来,我们需要安装Filebeat来把我们的rabbitmq的log发送到logstash的5044口。

Filebeat安装

在我们的Ubuntu的terminal中,我们打入如下的命令来安装Filebeat:

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.5.0-amd64.deb
sudo dpkg -i filebeat-7.5.0-amd64.deb

我们修改filebeat位于/etc/filebeat/filebeat.yml的配置文件:

filebeat.yml

filebeat.inputs:

- type: log
  fields:
    log_type: rabbitmq-server
  paths:
    - /var/log/rabbitmq/*log
  fields_under_root: true
  encoding: utf-8
  ignore_older: 3h

registry_file: /var/lib/filebeat/registry

output:
  logstash:
    hosts: ["localhost:5044"]

接下来我们来启动我们的filebeat服务:

sudo service filebeat start

这样我们的filebeat服务被启动起来了。我们可以通过如下的命令来检查一下filebeat服务是否被成功启动:

 sudo systemctl filebeat status
 sudo systemctl status filebeat
● filebeat.service - Filebeat sends log files to Logstash or directly to Elasticsearch.
   Loaded: loaded (/lib/systemd/system/filebeat.service; disabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-02-27 19:59:03 CST; 34s ago
     Docs: https://www.elastic.co/products/beats/filebeat
 Main PID: 21028 (filebeat)
    Tasks: 15 (limit: 4915)
   CGroup: /system.slice/filebeat.service
           └─21028 /usr/share/filebeat/bin/filebeat -e -c /etc/filebeat/filebeat.yml -path.home /usr

2月 27 19:59:04 liuxg filebeat[21028]: 2020-02-27T19:59:04.132+0800        INFO        registrar/reg
2月 27 19:59:04 liuxg filebeat[21028]: 2020-02-27T19:59:04.132+0800        WARN        beater/filebe
2月 27 19:59:04 liuxg filebeat[21028]: 2020-02-27T19:59:04.132+0800        INFO        crawler/crawl
2月 27 19:59:04 liuxg filebeat[21028]: 2020-02-27T19:59:04.133+0800        INFO        log/input.go:
2月 27 19:59:04 liuxg filebeat[21028]: 2020-02-27T19:59:04.133+0800        INFO        input/input.g
2月 27 19:59:04 liuxg filebeat[21028]: 2020-02-27T19:59:04.133+0800        INFO        crawler/crawl
2月 27 19:59:04 liuxg filebeat[21028]: 2020-02-27T19:59:04.134+0800        INFO        log/harvester
2月 27 19:59:04 liuxg filebeat[21028]: 2020-02-27T19:59:04.153+0800        INFO        pipeline/outp
2月 27 19:59:04 liuxg filebeat[21028]: 2020-02-27T19:59:04.158+0800        INFO        pipeline/outp
2月 27 19:59:34 liuxg filebeat[21028]: 2020-02-27T19:59:34.133+0800        INFO        [monitoring]

上面显示我们的filebeat已经被成功启动了。这个时候在我们的logstash的窗口中可以看到如下的一些输出:

它表明,我们我们的longstash已经在处理从filebeat发送来的信息。

安装Metricbeat

在这节里,我们来介绍如何对rabbitmq进行指标监控。

首先打开我们的Kibana:

选择“Add metric data”:

接下来,我们选择“RabbitMQ  metrics”:

按照上面的指令我们来安装metricbeat,并对metricbeat进行配置。在配置/etc/metricbeat/metricbeat.yml文件时,我们必须注意的是:

output.elasticsearch:
  hosts: ["<es_url>"]
  username: "elastic"
  password: "<password>"
setup.kibana:
  host: "<kibana_url>"

把我们的elasticsearch的IP地址填入。针对我的情况,这个地址是192.168.43.220:

等我们安装好metricbeat后,我们点击“Check data”:

一旦我们看到有数据进来,表明我们的metricbeat已经起作用了。

在Kibana中查看日志文档

在我们的Kibana中选择Discover:

从上面我们可以看出来我们已经有rabbitmq的日志了。

我们也可以选择metricbeat index pattern,那么我们可以看到:

从上面我们可以看到有rabbitmq的指标信息。

参考

【1】https://computingforgeeks.com/how-to-install-latest-rabbitmq-server-on-ubuntu-18-04-lts/

【2】https://www.cloudamqp.com/blog/2015-05-18-part1-rabbitmq-for-beginners-what-is-rabbitmq.html

发布了496 篇原创文章 · 获赞 119 · 访问量 85万+

猜你喜欢

转载自blog.csdn.net/UbuntuTouch/article/details/104539214