有两种:
rabbitmq_prometheus
rabbitmq_exporter
官方插件
非 Rabbitmq 官方插件
可能最好的解决方案是同时使用两个:
官方的普罗米修斯插件不能跳过收集一些指标的能力。在官方插件中,您可以选择聚合度量或每个对象,但是不能跳过不需要的监控指标。
另一方面,官方插件提供erlang 虚拟机的监控指标,这也很重要。
所以建议两者这样用。在官方插件中,禁用每个对象的度量,并且只使用它来收集与erlang相关的度量,使用非官方插件收集其他所有监控指标。
对于以上建议,仅仅是个人建议。如果想简单实现,使用官方的插件即可。
检查每个节点的机群名称是否一致
rabbitmq-diagnostics -q cluster_status
如果不一致,修改为一致,并且这样也可以和其他被监控的集群区别开来.
只需下集群中的任意节点执行一次即可。
rabbitmqctl -q set_cluster_name your-cluster-name
重启 RabbitMQ 服务生效
/etc/rabbitmq/enabled_plugins
文件中添加如下内容
[rabbitmq_prometheus]
立即生效
rabbitmq-plugins enable rabbitmq_prometheus
如果非首次部署后开启监控插件,可以同时使用两者结合,这样无需重启服务,并且在下次服务重启后,插件也是永久生效可用的。
此插件开启成功后,默认监听 TCP 端口 15692
,监听地址是服务器上的所有地址。
此端口可以使用如下配置方式覆盖修改:
prometheus.tcp.port = 15692
可以使用如下方式覆盖修改监听的地址:
prometheus.tcp.ip = 0.0.0.0
可以使用如下命令检查每个节点监听的端口
rabbitmq-diagnostics -s listeners
确认是否成功开启
curl -s localhost:15692/metrics | head -n 3
默认情况下,rabbitmq_prometheus 插件每隔 5000
毫秒(5 秒)抓取一次监控指标数据。
生产环境,建议修改为 10000
(10秒),并且将 Prometheus 的抓取间隔设置为 15秒。
查询获取指标的频率(是一个环境变量)
rabbitmq-diagnostics environment | grep collect_statistics_interval
当使用RabbitMQ的管理UI默认5秒自动刷新时,保持默认的 collect_statistics_interval
设置是最佳的。由于这个原因,两个时间间隔默认都是 5000
毫秒(5秒)。
添加如下内容到 prometheus.yml
文件中
scrape_configs:
- job_name: 'rabbitmq-exporter'
static_configs:
- targets:
- rabbitmq1-host:15692
- rabbitmq2-host:15692
- rabbitmq3-host:15692
RabbitMQ 可以通过两种模式返回 Prometheus 指标:
聚合:指标按名称聚合。在输出大小不变的情况下,即使对象数量(例如连接和队列)增加,这种模式的性能开销也较低。
每个对象:每个对象度量对的单个度量。由于有大量的统计数据发射实体,例如大量的连接和队列,这可能会导致非常大的有效载荷和大量的CPU资源用于串行数据输出。
对于大型部署,指标聚合是一种更可预测且更实用的选项。 它相对于系统中发出度量的对象的数量进行了很好的扩展 (连接、通道、队列、使用者等),保持较小的响应大小和时间。 可以预见的是,它也很容易可视化。
度量聚合的缺点是它会丢失数据保真度。聚合不可能实现每个对象的度量和警报。个别对象度量虽然在某些情况下非常有用,但也很难可视化。考虑一下一张有20万个连接的图表会是什么样子,以及运营商是否能够理解它,以及运维是否能够理解它。
/metrics
默认情况下,RabbitMQ返回此端点上的聚合度量。
如果您希望在/metrics端点上返回每个对象(未聚合)的度量,请将prometheus.return_per_object_metrics设置为true:
# 可能导致产生非常过量的输出,
# 仅适用于具有相对较少的度量发射对象(如连接和队列)的环境
prometheus.return_per_object_metrics = true
/metrics/per-object
GET /metrics/per-object
它总是返回所有每个对象的度量,而不管 prometheus.return_per_object_metrics
的值是多少。
因此,您可以保留 prometheus_return_pr_object_metris
的默认值,该值为 false
,并在必要时仍然抓取每个对象的指标,通过在Prometheus目标配置中设置metrics_path=/metrics/per-object
(有关其他信息,请查看PrometheusDocumentation)。
/metrics/detailed
如前所述,在具有大量实体的环境中使用每对象度量在计算上非常昂贵。例如,/metrics/per-object返回系统中所有实体的所有度量,即使大多数客户端(如监控工具)没有使用其中的许多度量。
这就是为什么每个对象指标都有一个单独的端点,允许调用者只查询他们需要的指标:
GET /metrics/detailed?vhost=/&vhost=vhost-2&family=queue_coarse_metrics&family=queue_consumer_count
将只返回请求的度量,并忽略(例如)该客户端不感兴趣的所有渠道度量。
支持以下参数:
family
的值: 将