文章目录
- 一、介绍
- 监控插件
- 两个插件的区别
- 一、 官方插件 rabbitmq_prometheus
- 1 配置 RabbitMQ 集群名称
- 2 授权使用插件
- 2.1 配置文件方式
- 2.2 命令行方式
- 3 监听地址和端口
- 4 RabbitMQ 插件获取指标的频率
- 5 配置到 Prometheus
- 6 关于聚合指标和每个对象指标
- 6.1 获取聚合指标 `/metrics`
- 6.2 每次请求获取到每个监控指标的监控数据 `/metrics/per-object`
- 6.3 请求获取指定某个监控指标的监控数据 `/metrics/detailed`
- 7 部分通用指标
- 二、rabbitmq_exporter
- 1 部署
- 1.1 二进制方式:
- 1.2 docker-compose 方式
- 2 配置
- 2.1 使用变量
- 可用的环境变量
- 2.2 使用 JSON 配置文件
- 3 Metrics
- 3.1 Global
- Overview
- Queues
- Queues - Gauge
- Queues - Counter
- Exchanges - Counter
- Node - Counter
- Connections - Gauge
- Shovel
- Memory
- 三、dashboard
- 1 健康指标
- 2 指标和图表
- 3 许多指标没有“正确”的阈值
- 关于官方测试用例
- 四、kubernetes 的 rabbitmq-server operrator
- 五、使用 TLS 保护 exporter
一、介绍
监控插件
有两种:
- rabbitmq-server(3.8版本以上) rabbitmq 官方自带的插件
rabbitmq_prometheus
- Prometheus 官方推荐的非 rabbitmq官方插件
rabbitmq_exporter
两个插件的区别
官方插件
- 具有 runtime/erlang 的监控指标
- 有聚合的或每个对象的度量
- 缺少过滤器(filter),就是可以禁用某些不需要的监控指标
非 Rabbitmq 官方插件
- 适用于 Rabbitmq 的新旧版本
- 具有更多配置选项/筛选对象
可能最好的解决方案是同时使用两个:
-
官方的普罗米修斯插件不能跳过收集一些指标的能力。在官方插件中,您可以选择聚合度量或每个对象,但是不能跳过不需要的监控指标。
-
另一方面,官方插件提供erlang 虚拟机的监控指标,这也很重要。
所以建议两者这样用。在官方插件中,禁用每个对象的度量,并且只使用它来收集与erlang相关的度量,使用非官方插件收集其他所有监控指标。
对于以上建议,仅仅是个人建议。如果想简单实现,使用官方的插件即可。
一、 官方插件 rabbitmq_prometheus
1 配置 RabbitMQ 集群名称
检查每个节点的机群名称是否一致
rabbitmq-diagnostics -q cluster_status
如果不一致,修改为一致,并且这样也可以和其他被监控的集群区别开来.
rabbitmqctl -q set_cluster_name your-cluster-name
2 授权使用插件
2.1 配置文件方式
重启 RabbitMQ 服务生效
/etc/rabbitmq/enabled_plugins
文件中添加如下内容
[rabbitmq_prometheus]
2.2 命令行方式
立即生效
rabbitmq-plugins enable rabbitmq_prometheus
如果非首次部署后开启监控插件,可以同时使用两者结合,这样无需重启服务,并且在下次服务重启后,插件也是永久生效可用的。
3 监听地址和端口
此插件开启成功后,默认监听 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
4 RabbitMQ 插件获取指标的频率
默认情况下,rabbitmq_prometheus 插件每隔 5000
毫秒(5 秒)抓取一次监控指标数据。
生产环境,建议修改为 10000
(10秒),并且将 Prometheus 的抓取间隔设置为 15秒。
查询获取指标的频率(是一个环境变量)
rabbitmq-diagnostics environment | grep collect_statistics_interval
当使用RabbitMQ的管理UI默认5秒自动刷新时,保持默认的 collect_statistics_interval
设置是最佳的。由于这个原因,两个时间间隔默认都是 5000
毫秒(5秒)。
5 配置到 Prometheus
添加如下内容到 prometheus.yml
文件中
scrape_configs:- job_name: 'rabbitmq-exporter'static_configs:- targets:- rabbitmq1-host:15692- rabbitmq2-host:15692- rabbitmq3-host:15692
6 关于聚合指标和每个对象指标
RabbitMQ 可以通过两种模式返回 Prometheus 指标:
-
聚合:指标按名称聚合。在输出大小不变的情况下,即使对象数量(例如连接和队列)增加,这种模式的性能开销也较低。
-
每个对象:每个对象度量对的单个度量。由于有大量的统计数据发射实体,例如大量的连接和队列,这可能会导致非常大的有效载荷和大量的CPU资源用于串行数据输出。
对于大型部署,指标聚合是一种更可预测且更实用的选项。 它相对于系统中发出度量的对象的数量进行了很好的扩展 (连接、通道、队列、使用者等),保持较小的响应大小和时间。 可以预见的是,它也很容易可视化。
度量聚合的缺点是它会丢失数据保真度。聚合不可能实现每个对象的度量和警报。个别对象度量虽然在某些情况下非常有用,但也很难可视化。考虑一下一张有20万个连接的图表会是什么样子,以及运营商是否能够理解它,以及运维是否能够理解它。
6.1 获取聚合指标 /metrics
默认情况下,RabbitMQ返回此端点上的聚合度量。
如果您希望在/metrics端点上返回每个对象(未聚合)的度量,请将prometheus.return_per_object_metrics设置为true:
# 可能导致产生非常过量的输出,
# 仅适用于具有相对较少的度量发射对象(如连接和队列)的环境
prometheus.return_per_object_metrics = true
6.2 每次请求获取到每个监控指标的监控数据 /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)。
6.3 请求获取指定某个监控指标的监控数据 /metrics/detailed
如前所述,在具有大量实体的环境中使用每对象度量在计算上非常昂贵。例如,/metrics/per-object返回系统中所有实体的所有度量,即使大多数客户端(如监控工具)没有使用其中的许多度量。
这就是为什么每个对象指标都有一个单独的端点,允许调用者只查询他们需要的指标:
GET /metrics/detailed?vhost=/&vhost=