监控 RabbitMQ 用管理 API 还是 Prometheus?它们的数据多新?哪些指标最该报警?管理插件会不会拖慢 broker?这篇用同一个 broker 把几种读数摆在一起比。
/api/overview 顶层键: cluster_name, erlang_version, listeners, message_stats, node, object_totals, queue_totals, rabbitmq_version 刚建好队列时 /api/queues/%2F/mq 一共 15 个键: ['arguments', 'auto_delete', 'consumer_details', 'deliveries', 'durable', 'exclusive', 'garbage_collection', 'incoming', 'internal', 'internal_owner', 'name', 'node', 'state', 'type', 'vhost'](没有 messages、consumers 这些——统计还没来) 过了 12 秒再读:/api/nodes[0] 里和资源有关的键: disk_free, disk_free_alarm, disk_free_details, disk_free_limit, fd_used, fd_used_details, mem_limit, mem_used, mem_used_details, proc_used, proc_used_details, run_queue, sockets_used, sockets_used_details, uptime /api/queues/%2F/mq 的键(节选): consumers, memory, messages, messages_details, messages_persistent, messages_ram, messages_ready, messages_ready_details, messages_ready_ram, messages_unacknowledged, messages_unacknowledged_details, messages_unacknowledged_ram, node, state, type
管理 API(/api/overview、/api/nodes、/api/queues/…)提供 JSON;Prometheus 插件在另一个端口提供 /metrics。
采样 (秒, rabbitmqctl, 管理 API): [(0.4, 1000, 0), (1.4, 1000, 0), (2.3, 1000, 0), (3.1, 1000, 0)] … [(7.7, 1000, 1000), (8.6, 1000, 1000)]
rabbitmqctl 一开始就是 1000;管理 API 在 7.7 秒后才显示 1000
$ rabbitmqctl eval "application:get_env(rabbit, collect_statistics_interval)." → {ok,5000}管理 API 的统计按 collect_statistics_interval(5000 ms)周期收集,刚发完的消息要等数秒才反映在队列的 messages 里;rabbitmqctl list_queues 是实时的。
(第几秒, publish_details.rate, messages): [(1, 0, None), (4, 0.0, 0), (7, 0.0, 0), (10, 200.0, 1000), (13, 200.0, 1000), (16, 200.0, 2001), (19, 200.0, 3002)] 最后 5 次读数的 rate: [200.0, 200.0, 200.0, 200.0, 200.0](真实速率 200 条/秒;rate 是按统计周期平滑出来的)
publish_details.rate 在统计到来后稳定显示 200.0,和真实速率一致,但绝对数量仍然滞后。
/metrics 返回 181956 字节,1689 行指标(不含注释)
rabbitmq_queue_messages_ready → rabbitmq_queue_messages_ready 5003
rabbitmq_queue_messages_unacked → rabbitmq_queue_messages_unacked 0
rabbitmq_connections → rabbitmq_connections 2
rabbitmq_channels → rabbitmq_channels 2
rabbitmq_process_resident_memory_bytes → rabbitmq_process_resident_memory_bytes 92848128
rabbitmq_global_messages_received_total → rabbitmq_global_messages_received_total{protocol="amqp091"} 5027.0
抓取一次 /metrics 用了 16 ms
请求一次 /api/overview 用了 9 ms
/metrics/per-object 返回 186111 字节,默认 /metrics 返回 181956 字节(这里只有 3 个队列、2 条连接,差别很小;对象多了 per-object 会按对象数线性变大)默认 1689 行指标、约 180 KB,抓取 16 ms;per-object 模式会随队列、连接数增大。
这个节点: mem_used 85 MiB / mem_limit 614 MiB;proc_used 442 / proc_total 1048576 macOS 上的 fd_used=0、sockets_used=0、disk_free=0:这三个读数在这台机器上拿不到真实值(显示 0),监控它们要在 Linux 上做 队列 rq: messages_ready 3002, messages_unacknowledged 0, consumers 0
messages_ready(堆积)、messages_unacknowledged、consumers、内存、文件描述符;macOS 上 fd / sockets / disk_free 读数为 0,不能用来验证。
带管理插件: 339 ms;不带管理插件: 333 ms
带管理插件和不带管理插件,发布吞吐没有可测的差别。