QMQ消息队列监控系统详解
监控系统的重要性
在现代分布式系统中,消息队列作为核心组件承担着异步通信、流量削峰、系统解耦等重要职责。QMQ作为一款高性能分布式消息队列,其稳定性和可靠性直接影响整个系统的运行质量。因此,建立完善的监控体系对于QMQ的运维至关重要。
QMQ监控体系概述
QMQ在设计之初就充分考虑了监控需求,在系统各个关键节点都进行了埋点。其监控系统具有以下特点:
- 插件式架构:支持灵活接入各种监控系统
- 全面覆盖:从客户端到服务端,从普通消息到延迟消息都有监控
- 多维指标:提供QPS、耗时、堆积量等多种监控维度
Prometheus监控接入
服务端配置
QMQ默认支持Prometheus监控,服务端(包括metaserver、broker、delay broker)需要添加以下依赖:
- qmq-metrics-prometheus
- prometheus-client
- prometheus-common
- prometheus-httpserver
- prometheus-graphite
配置说明:
- 默认监控端口为3333,可通过修改qmq.prometheus.properties调整
- 支持Graphite协议输出,配置方式如下:
monitor.type=graphite graphite.host=<host> graphite.port=<port>
客户端配置
客户端只需引入qmq-metrics-prometheus依赖即可。如果已经使用Prometheus,可通过配置关闭QMQ自带的HTTP Server:
monitor.action=none
自定义监控插件开发
QMQ采用SPI机制支持第三方监控系统接入,开发流程如下:
- 创建Maven工程,引入qmq依赖(注意设置为optional)
- 实现核心接口:
- QmqCounter:计数监控实现
- QmqMeter:QPS/TPS监控实现
- QmqTimer:耗时监控实现
- QmqMetricRegistry:SPI入口类
- 创建SPI配置文件META-INF/services/qunar.tc.qmq.metrics.QmqMetricRegistry
关键监控指标详解
Broker核心指标
| 指标名称 | 说明 | 标签 |
|---|---|---|
| receivedMessagesEx | 接收消息QPS | subject |
| produceTime | 消息发送耗时 | subject |
| pulledMessagesEx | 拉取消息QPS | subject, group |
| messageSequenceLag | 消息堆积数量 | subject, group |
延迟消息指标
| 指标名称 | 说明 | 标签 |
|---|---|---|
| delayTime | 实际投递与期望投递时间差 | subject, group |
| scheduleDispatch | 投递的消息量 | - |
MetaServer指标
| 指标名称 | 说明 | 标签 |
|---|---|---|
| brokerRegisterCount | broker注册次数 | groupName, requestType |
| clientRegisterCount | 客户端注册次数 | clientTypeCode, subject |
监控最佳实践
- 告警设置:建议对messageSequenceLag(消息堆积)设置告警阈值
- 性能分析:通过produceTime和putMessageTime分析消息处理瓶颈
- 容量规划:基于receivedMessagesEx和pulledMessagesEx进行容量评估
- 主从监控:关注slaveMessageLogLag确保主从同步健康
总结
QMQ提供了完善的监控体系,既支持开箱即用的Prometheus集成,也提供了灵活的扩展机制。通过合理配置和利用这些监控指标,运维人员可以全面掌握消息队列的运行状态,及时发现并解决潜在问题,保障系统稳定运行。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



