ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

用 Grafana 监控 RabbitMQ Stream:RabbitMQ-Stream 仪表盘部署与指标解读实战

用 Grafana 监控 RabbitMQ Stream:RabbitMQ-Stream 仪表盘部署与指标解读实战 用 Grafana 监控 RabbitMQ StreamRabbitMQ-Stream 仪表盘部署与指标解读实战【免费下载链接】rabbitmq-serverOpen source RabbitMQ: core server and tier 1 (built-in) plugins项目地址: https://gitcode.com/gh_mirrors/ra/rabbitmq-serverStream 协议自 RabbitMQ 3.9.0 引入配合 Stream流这种持久化、可复制的 append-only 日志数据结构使用成为事件溯源、日志收集等场景的核心能力。本文基于 rabbitmq-server 仓库中 RabbitMQ-Stream 仪表盘说明文档 及其配套的 RabbitMQ-Stream.json 仪表盘定义讲解该官方 Grafana 仪表盘展示的每一项指标、其底层 PromQL 查询与对应源码实现并给出从插件启用到仪表盘导入的完整部署步骤读完即可独立搭建一套 RabbitMQ Stream 的可观测性面板。Stream 协议与 Streams 是什么在进入监控面板之前先明确被监控的对象。Stream 协议是 RabbitMQ 在 3.9.0 版本中引入的一种基于二进制帧的协议专用于与 Streams流配合使用。Streams 是一种新的持久化、可复制的数据结构它建模了一个只追加append-only的日志消息只能追加到末尾消费过程不会破坏数据即所谓非破坏性消费non-destructive consumer semantics——消费者可以反复、从任意偏移量重新读取同一段历史消息这与经典队列消费即删除的语义有本质区别。在该仓库中Stream 协议的实现在 deps/rabbitmq_stream 插件内核心进程包括负责协议帧解析与连接处理的 rabbit_stream_reader.erl以及专门负责生产者/消费者指标采集的 rabbit_stream_metrics.erl。仪表盘文档中给出了三篇官方博客Streams Overview、First Application with Streams、Connecting to Streams作为扩展阅读帮助你理解协议如何连接、发布与订阅。仪表盘能看什么六类核心指标总览RabbitMQ-Stream 仪表盘Grafana 面板 ID 14798聚焦于 Stream 协议的消息速率与错误统计文档明确列出的指标共六项指标面板类型含义Stream publishersStat Pie Time series当前 Stream 生产者数量Stream messages received / sStat Pie Time series每秒接收写入的消息数Stream messages confirmed to publishers / sStat Pie Time series每秒确认给生产者的消息数Stream consumersStat Pie Time series当前 Stream 消费者数量Stream messages delivered / sStat Pie Time series每秒投递给消费者的消息数Errors since bootStat Time series节点启动以来累计的 Stream 协议错误数仪表盘 JSON 的description字段写的是 Stream protocol message rates and errors即Stream 协议消息速率与错误与文档描述完全一致。六项指标在面板布局上采用三层结构第一行Stat 数字面板六个指标各占一格以背景色块 大数字形式展示当前值第二行Pie 饼图 Learn more 文本面板前五个指标各配一个饼图按节点rabbitmq_node展示分布占比最后一个格子是 Learn more 链接面板第三、四行Time series 时序面板前五个指标与 Errors since boot 各自呈现为随时间变化的曲线图例表格给出 mean/max/min/last 统计值。指标背后的 PromQL读懂每一个查询表达式仪表盘的全部数据来源于rabbitmq-prometheus插件暴露的 Prometheus 指标。下面的表达式全部来自 RabbitMQ-Stream.json理解它们有助于你按需改造面板。连接标识指标rabbitmq_identity_info几乎所有查询都通过on(instance, job) group_left(rabbitmq_cluster, rabbitmq_node) rabbitmq_identity_info{...}这段模式把instance/job标签映射到集群名与节点名实现按集群聚合。筛选条件里出现的$namespace、$rabbitmq_cluster、$endpoint都是仪表盘顶部定义的模板变量详见下文过滤器一节。生产与消费速率Stat 面板和 Time series 面板中的速率指标使用irate()计算每秒瞬时速率如接收速率sum by(rabbitmq_cluster) ( irate(rabbitmq_global_messages_received_total{protocolstream}[$__rate_interval]) * on(instance, job) group_left(rabbitmq_cluster, rabbitmq_node) rabbitmq_identity_info{rabbitmq_cluster$rabbitmq_cluster, namespace$namespace, rabbitmq_endpoint$endpoint} )对应的确认速率使用rabbitmq_global_messages_confirmed_total{protocolstream}投递速率使用rabbitmq_global_messages_delivered_total{protocolstream}三者均以protocolstream标签精确筛选 Stream 协议流量与 AMQP 等其他协议的流量互不干扰。生产与消费连接数生产者数量与消费者数量是瞬时量gauge不需要irate直接查询sum by(rabbitmq_cluster) ( rabbitmq_global_publishers{protocolstream} * on(instance, job) group_left(rabbitmq_cluster, rabbitmq_node) rabbitmq_identity_info{rabbitmq_cluster$rabbitmq_cluster, namespace$namespace, rabbitmq_endpoint$endpoint} )消费者数量同理使用rabbitmq_global_consumers{protocolstream}。这些全局计数指标的写入源头在 rabbit_stream_metrics.erl每当一个 Stream 消费者建立时调用rabbit_global_counters:consumer_created(stream)取消时调用consumer_deleted(stream)见该文件的consumer_created/10与consumer_cancelled/4生产者建立与删除则分别调用publisher_created(stream)与publisher_deleted(stream)。同时该模块还会把消费者的 credits、offset、offset_lag、active 状态等写入 ETS 表并同步到rabbit_core_metrics为管理 UI 和 per-object 指标提供数据。可以推断rabbitmq_global_*系列指标正是由rabbit_global_counters模块按协议维度累加后再由rabbitmq-prometheus插件以protocol标签导出的。Errors since boot14 类 Stream 错误码的累计值这是仪表盘中最复杂的一组查询。Stat 面板把 14 个_total计数器相加得到总错误数而 Time series 面板面板 id 23则逐条列出每一种错误类型图例格式分别为access_refusedrabbitmq_global_stream_error_access_refused_totalerror_authentication_failurerabbitmq_global_stream_error_authentication_failure_totalframe_too_largerabbitmq_global_stream_error_frame_too_large_totalinternal_errorrabbitmq_global_stream_error_internal_error_totalprecondition_failedrabbitmq_global_stream_error_precondition_failed_totalpublisher_does_not_existrabbitmq_global_stream_error_publisher_does_not_exist_totalsasl_authentication_failure_loopbackrabbitmq_global_stream_error_sasl_authentication_failure_loopback_totalsasl_challengerabbitmq_global_stream_error_sasl_challenge_totalsasl_errorrabbitmq_global_stream_error_sasl_error_totalsasl_mechanism_not_supportedrabbitmq_global_stream_error_sasl_mechanism_not_supported_totalstream_already_existsrabbitmq_global_stream_error_stream_already_exists_totalstream_does_not_existrabbitmq_global_stream_error_stream_does_not_exist_totalstream_not_availablerabbitmq_global_stream_error_stream_not_available_totalsubscription_id_already_existsrabbitmq_global_stream_error_subscription_id_already_exists_totalsubscription_id_does_not_existrabbitmq_global_stream_error_subscription_id_does_not_exist_totalerror_unknown_framerabbitmq_global_stream_error_unknown_frame_totalvhost_access_failurerabbitmq_global_stream_error_vhost_access_failure_total这些错误码覆盖了 Stream 协议帧层面的常见故障帧过大frame_too_large、未知帧unknown_frame、订阅 ID 冲突或不存在、Stream 不存在/不可用/已存在、SASL 认证相关的多种失败以及 vhost 或资源访问被拒。生产实践中当Errors since boot持续上升时可以直接在该面板上按图例定位到具体错误类型再结合rabbitmq_stream插件日志排查例如 SASL 认证类错误往往指向客户端凭证配置问题stream_not_available通常与目标节点故障或迁移有关。过滤器与模板变量Namespace 与 RabbitMQ Cluster仪表盘提供两个用户可见的下拉过滤器文档 Filter by 一节外加一个隐藏的 Endpoint 变量它们由 RabbitMQ-Stream.json 末尾的templating段定义Namespace变量名namespace查询label_values(rabbitmq_identity_info, namespace)从数据中动态列出所有命名空间。命名空间是 RabbitMQ Prometheus 指标在 Kubernetes 等多集群部署场景下的分组维度。RabbitMQ Cluster变量名rabbitmq_cluster查询label_values(rabbitmq_identity_info{namespace$namespace}, rabbitmq_cluster)随 Namespace 的选择联动列出该命名空间下的集群。Endpoint变量名endpoint默认隐藏label_values(rabbitmq_identity_info{namespace$namespace, rabbitmq_cluster$rabbitmq_cluster, rabbitmq_endpoint!memory-breakdown},rabbitmq_endpoint)用于排除memory-breakdown等细分端点保证查询落到默认的聚合指标端点。所有面板查询都会引用这三个变量做联合筛选因此切换 Namespace 或 Cluster 时整块仪表盘会立即联动刷新——这正是该仪表盘适合多集群统一监控的原因。部署前提两个必须启用的插件文档 Requires 一节明确了使用该仪表盘的前置条件rabbitmq-stream插件必须启用提供 Stream 协议端点与流存储能力实现于 deps/rabbitmq_stream。在 RabbitMQ 3.9.0 及以后版本中该插件随发行版内置。rabbitmq-prometheus插件必须启用提供 Prometheus 指标抓取端点。启用方式在 deps/rabbitmq_prometheus/README.md 中有明确说明rabbitmq-plugins enable rabbitmq_prometheus rabbitmq-plugins enable rabbitmq_streamrabbitmq-prometheus插件默认监听15692端口指标路径为/metrics可用 curl 验证curl -v -H Accept:text/plain http://localhost:15692/metrics若在聚合指标中按协议区分流量可以看到形如rabbitmq_global_messages_received_total{protocolstream}的序列rabbitmq-stream插件的流监听端口默认5552可通过stream.tcp.port配置则用于客户端接入。动手部署三步导入官方仪表盘仓库在 deps/rabbitmq_prometheus/docker/grafana/dashboards 下存放了全部官方仪表盘 JSON其中 RabbitMQ-Stream 对应 RabbitMQ-Stream.json。导入方式有两种方式一docker-compose 一键拉起完整监控栈推荐用于试用仓库提供了 docker-compose-metrics.yml包含 Grafana 8.3.4、Prometheus v2.53.3、node-exporter 与 cadvisor。在deps/rabbitmq_prometheus目录下执行make metrics该目标会启动完整 Prometheus Grafana 栈并加载示例负载文档见 deps/rabbitmq_prometheus/docker/grafana/README.md随后浏览器访问http://localhost:3000默认账号密码均为admin数据源与仪表盘已通过 provisioning 自动配置./grafana/datasources.yml挂载为 Prometheus 数据源配置./grafana/dashboards.yml挂载为仪表盘自动加载配置./grafana/dashboards目录被挂载到容器/dashboards在 Grafana 左侧 Dashboard 列表中找到RabbitMQ-Stream打开即可。用完可执行make down拆除环境。如需更换 Grafana 版本编辑 docker-compose-metrics.yml 中services.grafana.image后重新make metrics。方式二手动导入适用于已有 Grafana打开 Grafana → Dashboards → Import上传 RabbitMQ-Stream.json 或粘贴其内容数据源选择你的 Prometheus该面板定义__inputs中的DS_PROMETHEUS导入时会提示绑定数据源导入后在顶部通过 Namespace / RabbitMQ Cluster 下拉框筛选目标环境。无论哪种方式前提都是 Prometheus 已能抓取到rabbitmq-prometheus插件的/metrics端点且目标 RabbitMQ 节点上rabbitmq-stream插件已启用否则面板中的 Stream 指标会恒为零值。进阶自行改版仪表盘时应注意什么如果你希望基于该面板扩展例如增加超时告警、按 vhost 拆分速率仓库 deps/rabbitmq_prometheus/docker/grafana/README.md 给出了官方改版流程先在deps/rabbitmq_prometheus下make overview metrics启动本地开发环境在 Grafana UI 中编辑随后通过 Share → Export 勾选 Export for sharing externally 导出 JSON 回填到仓库。实践中需要重点注意两点保持查询模板一致新增面板也应沿用on(instance, job) group_left(...) rabbitmq_identity_info{...}的标签映射模式与$namespace/$rabbitmq_cluster模板变量否则在多集群场景下无法联动筛选速率面板使用irate$__rate_interval这是 Grafana 推荐写法能根据面板时间范围自动选择合理的速率计算窗口避免固定窗口导致的锯齿或失真。小结RabbitMQ-Stream 官方 Grafana 仪表盘把 Stream 协议的生产/消费速率、连接数与启动以来错误计数浓缩为三层可视化结构Stat 数字面板一眼掌握全局饼图按节点定位热点Time series 曲线还原历史趋势。配合rabbitmq_identity_info的标签映射它天然支持 Namespace Cluster 级别的多集群筛选。若想深入底层可继续阅读 rabbit_stream_metrics.erl 了解指标采集源头或查看 metrics.md 获取rabbitmq-prometheus插件暴露的完整指标清单。【免费下载链接】rabbitmq-serverOpen source RabbitMQ: core server and tier 1 (built-in) plugins项目地址: https://gitcode.com/gh_mirrors/ra/rabbitmq-server创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表