本文基于官方提供的RocketMQ Exporter来监控RocketMQ集群。可以实现以下功能:

  1. Broker TPS/QPS的监控
  2. 消息积压监控
  3. 消费组消费演示监控

最终的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 关于作者

如有收货,可以通过关注公众号

https://segmentfault.com/img/bVbAYdT/view

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐