使用Prometheus监控RocketMQ
文章目录配置步骤1 安装RocketMQ Exporter2 配置Prometheus3 配置告警规则4 配置grafana5 参考链接6 关于作者本文基于官方提供的RocketMQ Exporter来监控RocketMQ集群。可以实现以下功能:Broker TPS/QPS的监控消息积压监控消费组消费演示监控最终的Grafana面板效果图如下:配置步骤1 安装RocketMQ ExporterRo
本文基于官方提供的RocketMQ Exporter来监控RocketMQ集群。可以实现以下功能:
- Broker TPS/QPS的监控
- 消息积压监控
- 消费组消费演示监控
最终的Grafana面板效果图如下:
配置步骤
1 安装RocketMQ Exporter
RocketMQ官方已经提供了exporter,官方链接 https://github.com/apache/rocketmq-exporter
但官方未直接提供镜像,需要我们下载源码然后mvn package -Dmaven.test.skip=true docker:build 生成镜像,笔者已经制作好并上传至docker hub,嫌构建麻烦的同学可直接使用。
docker pull sawyerlan/rocketmq-exporter:latest # https://hub.docker.com/repository/docker/sawyerlan/rocketmq-exporter
docker run --name rocketmq-exporter --restart=always -p 5557:5557 -d sawyerlan/rocketmq-exporter --rocketmq.config.namesrvAddr="172.30.0.150:9876;172.30.0.151:9876"
将上面的地址修改为你RocketMQ nameserver 的地址,笔者的nameserver有2个。
接下来可以验证下是否已经有数据了。访问 http://{{你的ip}}:5557/metrics,如下图表示正常运行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F0JThDaZ-1624430500843)(rocketmq.assets/image-20210623131300478.png)]
2 配置Prometheus
添加一个RocketMQ监控的job,我这里采用文件发现的方式(为了保证主配置文件prometheus.yml的简洁已经便于管理,笔者都将job按文件进行分类了)。
# prometheus.yml
- job_name: rocketmq
file_sd_configs:
- files:
- '/etc/prometheus/etc.d/job_rocketmq.yaml'
# job_rocketmq.yaml
---
- targets: ['172.33.0.33:5557']
labels:
project: baidu
instance: 172.33.1.150:9876 # 这里加了一个标签方便检索
app: rocketmq
env: pro
reload 你的Prometheus使配置生效
curl -X POST http:/localhost:9090/-/reload
后续如果还有新的mq需要加入,只需要在job_rocketmq.yaml 添加即可,Prometheus会自动发现,不需要重启。
3 配置告警规则
笔者将RocketMQ的告警规则独立成了一个文件,如下
# rules_rocketmq.yml
groups:
- name: rocketmq
rules:
- alert: RocketMQ Exporter is Down
expr: up{job="rocketmq"} == 0
for: 20s
labels:
severity: '灾难'
annotations:
summary: RocketMQ {{ $labels.instance }} is down
- alert: RocketMQ 存在消息积压
expr: (sum(irate(rocketmq_producer_offset[1m])) by (topic) - on(topic) group_right sum(irate(rocketmq_consumer_offset[1m])) by (group,topic)) > 5
for: 5m
labels:
severity: '警告'
annotations:
summary: RocketMQ (group={{ $labels.group }} topic={{ $labels.topic }})积压数 = {{ .Value }}
- alert: GroupGetLatencyByStoretime 消费组的消费延时时间过高
expr: rocketmq_group_get_latency_by_storetime/1000 > 5 and rate(rocketmq_group_get_latency_by_storetime[5m]) >0
for: 3m
labels:
severity: 警告
annotations:
description: 'consumer {{$labels.group}} on {{$labels.broker}}, {{$labels.topic}} consume time lag behind message store time
and (behind value is {{$value}}).'
summary: 消费组的消费延时时间过高
- alert: RocketMQClusterProduceHigh 集群TPS > 20
expr: sum(rocketmq_producer_tps) by (cluster) >= 20
for: 3m
labels:
severity: 警告
annotations:
description: '{{$labels.cluster}} Sending tps too high. now TPS = {{ .Value }}'
summary: cluster send tps too high
添加为后需要在你的prometheus.yml 加入此规则文件。
# 笔者的prometheus.yml会通配规则文件,只需要将规则文件放在该目录即可
rule_files:
- 'rules/*.yml'
- 'rules/*.yaml'
reload 使配置生效
curl -X POST http::/localhost:9090/-/reload
4 配置grafana
grafana的配置较为繁琐,文中的面板已经开源,可以在grafana官网下载该面板 。https://grafana.com/grafana/dashboards/14612
4.1 导入模板
5 参考链接
笔者在实际部署过程中也是参考以下文章,感谢!如果想深入学习的同学可以前往。
基于RocketMQ Prometheus Exporter 打造定制化DevOps平台-InfoQ
6 关于作者
如有收货,可以通过关注公众号
更多推荐
所有评论(0)