Prometheus 监控 RabbitMQ 集群

Posted by     Aeric on Tuesday, December 10, 2019

TOC

对于 RabbitMQ 集群,虽然官方提供了 RabbitMQ 管理 UI 来监控集群状态,但是从设计上来说这种方式并不是特别方便,这里我是借助 Prometheus 并配合 Grafana 来整体监控 RabbitMQ 集群。

对于 RabbitMQ,从 3.8.0 版本开始,RabbitMQ 就内置了对 Prometheus 和 Grafana 的支持。但实质上是通过 rabbitmq_prometheus 这个插件来获取对 Prometheus 度量标准的支持,该插件是通过专用的 TCP 端口来暴露相关 RabbitMQ 指标的,默认端口是 15692。这些度量标准提供了对 RabbitMQ 节点状态和运行时的状态的支持。

这里我用的是之前已经安装并配置完成的 Prometheus 和 RabbitMQ 集群,具体信息如下:

# Prometheus 监控
host_ip: 10.10.2.192

# RabbitMQ 集群
rabbit@rabbitmq-node-1: 10.10.2.193    3.8.0
rabbit@rabbitmq-node-2: 10.10.2.194    3.8.0
rabbit@rabbitmq-node-3: 10.10.2.195    3.8.0

具有三个节点的 RabbitMQ 集群的安装配置可以参考: 3-node RabbitMQ 3.8 cluster

RabbitMQ 集群配置

修改集群名称

RabbitMQ 集群都有一个描述性的名称,这个名称一般具有某些意义,这里有一些针对集群名称的一些操作,具体如下:

查看集群名称:

➜ rabbitmq-diagnostics -q cluster_status | grep "Cluster name"
Cluster name: rabbit@rabbitmq-node-1

这里的 rabbit@rabbitmq-node-1 就是我这个集群的名称,比较草率哈

修改集群名称:

➜ rabbitmqctl -q set_cluster_name <cluster_new_name>

这里为了简单就不修改了,不影响具体的功能,只是一个名称而已。

启用 rabbitmq_prometheus 插件

接下来我们需要在集群所有节点上均启用 rabbitmq_prometheus插件,具体操作如下:

➜ rabbitmq-plugins enable rabbitmq_prometheus

具体输出内容如下,也表示该插件启用成功:

rabbitmq-plugins enable rabbitmq_prometheus

Enabling plugins on node rabbit@rabbitmq-node-1:
rabbitmq_prometheus
The following plugins have been configured:
  rabbitmq_management_agent
  rabbitmq_prometheus
  rabbitmq_web_dispatch
Applying plugin configuration to rabbit@rabbitmq-node-1...
The following plugins have been enabled:
  rabbitmq_management_agent
  rabbitmq_prometheus
  rabbitmq_web_dispatch

started 3 plugins.

指标校验

rabbitmq_prometheus 插件启用成功后,可以通过 curl 工具测试是否输出 Prometheus 需要的指标,如下所示:

➜ curl -s localhost:15692/metrics | head -n 6
# TYPE erlang_mnesia_held_locks gauge
# HELP erlang_mnesia_held_locks Number of held locks.
erlang_mnesia_held_locks 0

如上所示表示该插件可以正常暴露 RabbitMQ 集群相关指标

Prometheus 监控配置

上述过程成功输出了 Prometheus 指标数据后,接下来需要配置 Prometheus 让其监控上 RabbitMQ 集群,修改 Prometheus 配置文件,增加如下内容:

scrape_configs:
  ...
  - job_name: 'rabbitmq_nodes'
    static_configs:
    - targets: ['10.10.2.193:15692','10.10.2.194:15692','10.10.2.195:15692']
  ...

修改完成后重启 Prometheus 服务即可。

可以看到此时 Prometheus 已经将 MQ 集群节点纳入监控:

Prometheus-RabbitMQ

默认情况下 Prometheus 每 60s 拉取一次指标,RabbitMQ 也会定期更新相关指标,默认为 5000ms,相关参数是 collect_statistics_interval 可以根据需要对其进行更改。

对于生产环境建议 Prometheus 拉取时间设置为 15s, RabbitMQ 更新指标的时间间隔最小值设置为 10000(10s)即 collect_statistics_interval 参数设置为 10000

Grafana 仪表盘设置

Prometheus 监控配置完成后,我们就可以导入 Grafana 的仪表盘了,RabbitMQ 官方有提供相关仪表盘文件,我们直接导入即可,具体项目地址rabbitmq-prometheus这里为了方便我只是导入了 RabbitMQ-Overview.json,其他正常导入即可。

导入成功后就可以通过 Grafana 查看该 RabbitMQ 集群的相关信息了,具体信息可以参考下图:

Granafa

需要注意的是某些仪表盘可能导入后没有数据展示,这个时候我们可以根据具体报错信息对相关仪表盘做相应修改。

上述内容都是基于 3.8 版本及其以后的版本,对于 3.8 版本之前的版本可以使用单独的插件 prometheus_rabbitmq_exporter来暴露指标数据。该插件借助的是 RabbitMQ HTTP API来实现的。

参考链接


comments powered by Disqus