RabbitMQ 集群虽然官方提供了管理 UI 来监控集群状态,但是从设计上来说这种方式并不是特别方便。

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

查看本地环境

查看本地操作系统及内核版本:

1
2
3
4
5
6
# 
$ cat /etc/redhat-release
Rocky Linux release 8.8 (Green Obsidian)

$ uname -a
Linux rabbit1 4.18.0-425.3.1.el8.x86_64 #1 SMP Wed Nov 9 20:13:27 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

查看三节点 rabbitmq 集群及 erlang 版本:

1
2
3
4
5
6
7
8
9
10
$ rpm -qa|egrep "erlang|rabbit"
rabbitmq-server-3.11.23-1.el8.noarch
erlang-25.3.2.7-1.el8.x86_64

$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.50.41 rabbit1
192.168.50.42 rabbit2
192.168.50.43 rabbit3

修改集群名称(可选)

RabbitMQ 集群都有一个描述性的名称,改与不该都不影响具体的功能。

1
2
3
4
5
6
# 查看集群名称
$ rabbitmq-diagnostics -q cluster_status | grep "Cluster name"
Cluster name: rabbit@rabbit1

# 修改集群名称
rabbitmqctl -q set_cluster_name <cluster_new_name>

启用插件 rabbitmq_prometheus

1
rabbitmq-plugins enable rabbitmq_prometheus

web 后台看到 15692 端口已监听:

验证监控指标:

1
curl 127.0.0.1:15692/metrics

Prometheus 监控配置

配置 Prometheus 让其监控上 RabbitMQ 集群,修改 Prometheus 配置文件,增加如下内容:

1
2
3
- job_name: 'rabbitmq_nodes'
static_configs:
- targets: ['192.168.50.41:15692','192.168.50.42:15692','192.168.50.43:15692']

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

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

Grafana 仪表盘设置

Prometheus 监控配置完成后,我们就可以导入 Grafana 的仪表盘了,RabbitMQ 官方有提供相关仪表盘文件,我们直接导入即可,具体项目地址 rabbitmq-prometheus

官方提供的 Dashboard 配置文件都可以使用,我这里仅仅导入了 RabbitMQ-Overview.json

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

上述内容都是基于 rabbit 3.8 版本及其以后的版本,对于 3.8 版本之前的版本可以使用单独的插件 rabbitmq_exporter 来暴露 /metrics 指标数据。

参考文档: