RabbitMQ是一个开放源消息代理,创建于2007年以实现AMQP,并且在过去的十二年中,通过不断增加的插件列表,它已包括HTTP,STOMP,SMTP和其他协议。它也是Kafka的一个强劲的竞争者。在今天的文章中,我们将详述如何使用Elastic Stack来监控RabbitMQ。
RabbitMQ简介
RabbitMQ是消息队列软件,也称为消息代理或队列管理器。 简单地说; 它是定义队列的软件,应用程序连接到该队列以传输一条或多条消息。
一条消息可以包含任何种类的信息。 例如,它可能具有有关应在另一个应用程序(甚至可能在另一个服务器上)上启动的过程或任务的信息,或者可能只是一条简单的文本消息。 队列管理器软件存储消息,直到接收应用程序连接并从队列中取出消息为止。 接收应用程序然后处理该消息。
消息队列的基本体系结构很简单-有一些称之为生产者(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 rabbit@liuxg.log 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
来源:CSDN
作者:Elastic 中国社区官方博客
链接:https://blog.csdn.net/UbuntuTouch/article/details/104539214