资讯动态

第27章:Prometheus 与 Grafana构建RabbitMQ的可观测性

发布时间:2026/9/12 9:09:33 来源:尧图企业网站定制
1. 项目背景值班仍靠「感觉慢了」和 Management Overview 刷页面。大促时谁也说不清是 Confirm 慢、unacked 堆、消费者掉光还是内存红灯。可观测要把消息系统特有的数补上不只 REDRate/Error/Duration还要ready、unacked、消费者数、告警布尔、Raft/Leader、磁盘。rabbitmq_prometheus在 15692默认暴露/metrics。聚合计数用 global counters避免连接销毁后指标消失metrics.md 写明旧计数器的缺陷。队列深度是rabbitmq_queue_messagesreadyunacked不要只看发布速率健康。告警采集器把本地 Alarm 变成rabbitmq_alarms_*。仲裁队列还要看副本与提交延迟不要用经典队列的磁盘直觉套 Raft。五条告警是本章最小集对应已经见过的病内存/磁盘 Alarm文件描述符支付队列 unacked 过高关键队列 consumers0quorum Leader 过度集中不均衡压测触发第 4 条最容易停消费者。值班流程告警 → SOP → 工单字段含队列名与指标截图。没有流程的告警只是噪声。痛点只盯发布 TPS ↓ 消费者掉线无人知 ↓ 或 scrape 打到管理端口把 UI 拖死 ↓ 或每个队列一张图Prometheus 基数爆炸实验室用 Docker 起 PrometheusGrafana 即可不必上完整公司监控栈。生产把 scrape 配进现有平台规则同名。2. 项目设计小胖把汽车仪表盘照片摊开「有转速有油量MQ 为啥还要那么多英文指标」小胖这不就是再买一块仪表吗Overview 页面不够吗告警五条会不会半夜把人叫起来Grafana 官方 Dashboard 一导入不就下课压测触发告警会不会把实验室打挂大师Overview 是人眼Prometheus 是机器值班。转速发布速率油量磁盘都要还要「安全带灯」Alarm和「乘客是否在座位」consumers。五条是最小集阈值用预发压测标定不是抄网上 1000。官方 Dashboard 是起点还要按 VHost/队列名过滤否则基数与噪音一起炸。压测打堆积用专用实验室队列不要打支付盘。技术映射scrape/metrics告警规则在 PrometheusDashboard 是人看的投影。小白15692 要不要 TLS聚合指标和 per-queue 怎么选global 死信计数为准吗Confirm 延迟有现成直方图吗Leader 不均衡怎么算scrape 间隔 15s 会不会漏短抖动Grafana 与第 24 章 prefetch 表如何对照大师生产 15692 走内网或 TLS sidecar不要裸公网。默认聚合排障再对问题队列开 detailed endpoint若版本提供长期 per-queue 高基数要克制。quorum 死信 global 计数在失败场景可能略低metrics.md 注明异步。Confirm 延迟优先客户端直方图第 8 章分桶Broker 侧用发布速率阻塞告警近似。Leader 不均衡各节点queue_leader计数差超过阈值或官方图。15s scrape 够告警不够火焰图短抖动靠客户端。prefetch 表是实验Grafana 看 unacked 是否长期顶在 prefetch×消费者。小胖实验开插件 → Prom scrape → 导入 Dashboard → 五条规则 → 停短信消费者打 consumers0 → 按 SOP 拉起 → 关告警。阈值先松后紧。大师告警要有for: 2m避免重启节点闪报。consumers0 对 SAC 备机要小心备机不算 active 消费规则应看处理中的消费者或结合 unackedready。支付 SAC 用「ready 增长且投递速率 0」。技术映射rabbitmq_queue_consumers/ 投递速率Alarm collector 读rabbit_alarm:get_local_alarms。小白多集群怎么办联邦链路有指标吗日志和指标如何用 message_id 对上大师每集群一套 scrape 标签clusterpromo-ha。联邦/Shovel 有独立 collector若启用对应 prometheus 插件。message_id 在第 28 章 Tracing本章指标不带业务 ID靠时间和队列名关联。不要把订单号当 Prometheus 标签。小胖检查单五条规则进 Git值班能指出哪张图压测告警有工单样例。没有样例不算接入完成。3. 项目实战3.1 环境准备dockerexecrabbit1 rabbitmq-pluginsenablerabbitmq_prometheuscurl-sfhttp://127.0.0.1:15692/metrics|head若端口未映射compose 加15692:15692。镜像默认插件可能已开。运行结果文本里有rabbitmq_queue_messages、rabbitmq_build_info。坑扫 15672 管理 API 当 Prometheus格式不对且更重。坑宿主机防火墙。3.2 步骤一Prometheus scrape# promo-mq/ch27/prometheus.ymlscrape_configs:-job_name:rabbitmqscrape_interval:15sstatic_configs:-targets:[host.docker.internal:15692]labels:{cluster:promo-lab}dockerrun-d--nameprom-p9090:9090-v${PWD}/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus运行结果Prom UI 能查rabbitmq_queue_messages_ready。坑Docker Desktop 用host.docker.internalLinux 用宿主机 IP。3.3 步骤二Grafana 官方 Dashboard导入 RabbitMQ 官方 Grafana 仓库中的 overview / queues 仪表盘版本选 4.x 兼容。数据源指向 Prom。过滤clusterpromo-lab、VHostorder。运行结果能看到连接数、发布/投递、内存。坑导入 3.x 盘字段对不上。坑不过滤导致上百队列图卡死浏览器。3.4 步骤三五条告警# promo-mq/ch27/alerts.ymlgroups:-name:rabbitmq-promorules:-alert:RabbitMemoryOrDiskAlarmexpr:rabbitmq_alarms_memory_used_watermark or rabbitmq_alarms_free_disk_space_watermarkfor:1mlabels:{severity:page}annotations:{summary:Broker alarm, stop publishers (ch14)}-alert:RabbitFDHighexpr:rabbitmq_process_open_fds / rabbitmq_process_max_fds0.8for:2mlabels:{severity:ticket}-alert:PayUnackedHighexpr:rabbitmq_queue_messages_unacked{queueq.order.pay.q}500for:3mlabels:{severity:ticket}-alert:CriticalConsumersZeroexpr:rabbitmq_queue_consumers{queueq.mkt.sms} 0for:2mlabels:{severity:page}-alert:QuorumLeaderSkewexpr:(max(rabbitmq_queue_consumer_capacity) )# 占位生产用各节点 leader 计数差for:10mlabels:{severity:ticket}指标精确名字以/metrics实测为准版本前缀可能带rabbitmq_。Leader 倾斜用rabbitmq_raft_*或按 node 聚合queue的 leader 标签实验室可用「单节点 leader 数 / 总 quorum 队列 0.7」在三节点上表达。运行结果规则加载无 syntax error。坑复制网上旧名字erlang_vm_*当磁盘告警。坑consumers0 对空闲实验室一直响要挂业务队列名。3.5 步骤四压测触发堆积/消费者 0停q.mkt.sms消费者跑第 16 章发布器 1 分钟。告警CriticalConsumersZerofiring。值班按第 15 章 D拉起消费者确认 ready 下降告警 resolved。截图进工单模板。工单PROMO-MQ-ALERT-0001 指标rabbitmq_queue_consumers{queueq.mkt.sms}0 SOP第15章病例D 处理拉起 consume_touch.py 验证consumers1 且告警恢复运行结果完整闭环。坑只发告警不拉人。坑压测打到生产支付队列。3.6 步骤五源码对照指标族模块队列/通道深度prometheus_rabbitmq_core_metrics_collectorAlarmprometheus_rabbitmq_alarm_metrics_collector读rabbit_alarm管理代理采集rabbitmq_management_agent死信 globalmetrics.md 所列rabbitmq_global_messages_dead_lettered_*现场 curl 一段/metrics给开发看证明不是黑盒。3.7 完整代码清单promo-mq/ch27/ prometheus.yml alerts.yml grafana-filter.md ticket-template.md column/samples/ch27/3.8 测试验证编号名称期望TC-CH27-01/metrics200 且含 queue_messagesTC-CH27-02Prom 查询有数据TC-CH27-03五规则加载成功TC-CH27-04停消费者告警 firingTC-CH27-05拉起resolvedTC-CH27-06工单样例字段齐全值班检查单告警路由到值班表page 与 ticket 分级别禁止订单号当标签。scrape 失败本身要有 up 告警否则 MQ 指标全无还以为很健康。Dashboard 权限只读给开发改阈值走 Git。第 14 章水位实验会触发 Alarm 告警夹具 finally 恢复并在实验公告里静默对应规则避免狼来了。联邦集群分别 scrape不要混在一个没标签的 job。Confirm 延迟仍以客户端为准Grafana 补 Broker 视角。大促前用压测把阈值跑准不要用实验室空载当基线。把五条规则的 expr 在目标环境 curl 验证过再合并。名字以实测为准上文 YAML 是结构示例。Leader 倾斜规则需结合rabbitmqctl list_queues leader校准 PromQL写进注释谁维护。未校准的 PromQL 禁止 page 级别。消费者 0 对 Fanout 三队列要三条或queue~q.mkt.(sms|mail|push)。SAC 支付队列改用 ready 增长告警避免备机误报。与第 26 章升级窗口滚动时预期闪断可抑制 consumers0 或提高 for。窗口结束恢复。指标基线第 15 章升级前后各采一份对比内存与队列数。没有对比就无法证明升级「没更慢」。可观测不是插件开了就结束。每周看一次误报率高于三成就改阈值或拆规则。值班培训用本章压测录像而不是只发 Dashboard 链接。开发看图要会说「这是 unacked 不是丢失」。测试把 TC-CH27-04 放进夜间实验室与第 16 章检查单互链。告警接入不是「规则 YAML 合并了」。还要通知渠道演练短信/IM 真能响、值班表轮转、抑制升级窗口的开关谁有权限、误报复盘周会。五条里 page 级只能 Alarm 与关键消费者 0或支付 ready 死涨FD 与 Leader 倾斜先 ticket避免夜班被倾斜警告炸醒却不致支付停。PromQL 必须在目标集群curl /metrics对过名字再进 Git注释写维护人与校准日期。Leader 倾斜用节点标签聚合 quorum 队列 leader实验室三节点可先人工list_queues leader对照。未校准禁止 page。Fanout 三触达用正则一条规则避免三条复制漂移。SAC 支付不用 consumers0。滚动窗口抑制清单与第 26 章 RUNBOOK 互链窗口结束有人恢复抑制忘了就变成「升级后告警全哑」。基线对比升级前后内存、队列数、发布 p99客户端差过大开战争房而不是宣布成功。每周误报率进运维 KPI高于三成改规则。培训用录像指出哪张图是 unacked、哪张是 ready开发能口述再给 Dashboard 权限。禁止订单号、用户 ID 当标签基数与隐私双爆。scrape 的 up 告警与 MQ 告警同等重要监控管道挂了等于裸奔。15692 只内网。多集群cluster标签必填。联邦链路另 job。Confirm 延迟看板放在应用 Grafana 文件夹不要假装 Broker 有同一直方图。大促前一周用压测标定阈值空载基线只证明管道通。Alarm 实验提前在公告静默结束取消静默并确认规则仍 firing 测试用实验室队列。没有「取消静默」步骤的实验等于关掉值班。指标与第 15 章 SOP 字段对齐告警注解里写「先 ping/alarms」。这样半夜点开 IM 就能走而不用先翻专栏目录。把五条规则的 oncall 演练纪要进仓库与 YAML 同 PR。没有纪要的告警视为未验收。开发改队列名必须同步 PromQL否则规则盯着旧名字一直绿。测试改拓扑时 grep alerts.yml。这是可观测与第 13 章 Policy 一样的「名字即接口」。第 31 章综合实战会把本 Dashboard 当验收屏现在就要能投。值班 IM 机器人要能把告警注解里的 SOP 章节号打出来减少翻书。新队列上线 checklist 含「是否要加告警」默认支付与三触达必须有。去掉队列时同步删 PromQL避免永远 firing 的旧名字。Grafana 文件夹按环境分 promo-lab / promo-prod禁止一张盘切数据源看错集群。大促指挥室只投 overview 与支付队列详细图给专家席。指标保留周期满足事后复盘一周不必无限。与日志平台对时 NTP否则截图对不上 trace。这些是可观测运营不是再装一个插件。插件只是起点。再补内存 Alarm 与第 14 章夹具冲突时实验工单必须写静默窗口窗口外 firing 才算真告警。消费者 0 在发布窗口无流量可能误报应用and rate(published)0或结合 ready0。把校准后的最终 expr 覆盖示例 YAML避免后人复制占位符queue_consumer_capacity上生产。这是本章最容易抄错的地方单独加粗写进 alerts.yml 注释以下 PromQL 已经过目标环境校准。未写校准日期的文件不得合并。4. 项目总结优点与缺点形态优点缺点Prometheus 插件标准、可告警要防基数只靠 UI上手快不能值班全量 per-queue细节多卡 Prom优点1病种对指标。2告警可演。3与 SOP 闭环。缺点1PromQL 要校准。2Confirm 延迟不在 Broker 直方图里。3误报毁信任。对比日志指标看趋势日志看一条消息第 28 章。适用场景生产值班。大促大盘。升级前后对比。不适用把订单号当标签用 scrape 管理 API 当监控。注意事项15692 网络安全。版本字段名以/metrics为准。安全指标含队列名注意租户。Alarm 实验要静默。常见踩坑生产发布速率正常消费者掉光。根因只告 TPS。处理consumers0。每个队列一张图Prom OOM。根因高基数。处理聚合按需 detailed。告警无 for滚动升级夜炸锅。根因闪断。处理for 与窗口抑制。思考题为什么 Confirm 延迟要以客户端直方图为准而不是只看 Broker 发布计数三节点 Leader 倾斜 70% 落在同一 Pod 时你是 rebalance 还是先查客户端-local 声明附录 C第 26 章思考题参考答案题 1新 flag 已 enable回归失败。不能退回旧二进制因为旧节点不理解已启用能力集群会拒或分裂。应急向前修补丁版本、关有问题的插件、扩容而不是降级。这就是「稳定后再 enable」的原因。数据盘回滚属于灾难方案要停业务与备份不在常规 Runbook。题 2蓝绿支付双写。默认不要双写窗口不一致会造成重复或丢失错觉。停写 → Shovel 追平条数抽样 message_id→ 切读到绿 → 短观察 → 再开写只打绿。停写窗口长度 ≥ 追平 SLO 缓冲。营销 Fanout 可用联邦宽松一致性支付不行。延伸阅读与资源LangChain从入门到进阶实战之旅SQLAlchemy 2.0从入门到进阶的实战之旅Dify 从入门到进阶LLM 应用平台实战修炼Java 工程师进阶从 JVM 生产排障到OpenJDK原理NumPy 从入门到生产落地全链路实战指南科学计算/向量化Redis 8 实战精讲从 CRUD 到源码构建高可用缓存系统Redis 实战修炼与原理进阶Python 3实战精进从脚本到高并发订单引擎python入门Rquests从菜鸟脚本到企业级SDK的网络实战圣经Milvus向量数据库实战修炼从 0 到 1精通向量检索与生产落地MongoDB 实战进阶与内核修炼后端工程师的 AI 转型第一课Ollama 与私有化大模型实战10倍开发者的 Dify 魔法书从零构建全栈 AI 应用后端工程师转型AI第一课-Ollama 与私有化大模型实战大型语言模型(LLM) vLLM 高性能推理落地实战Agent开发之LlamaIndex 实战修炼与源码进阶大语言模型Transformers 实战修炼与源码剖析

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价