prometheus 监控 RocketMQ

一、原理说明

1.1、RocketMQ 监控基础

RocketMQ 本身提供了内置的监控指标暴露能力(基于 JMX/HTTP),核心依赖其org.apache.rocketmq.tools模块的监控工具,以及 Prometheus 的Exporter机制实现指标采集:

  • 指标来源:RocketMQ 的 Broker、NameServer、Producer/Consumer 均会暴露运行时指标(如消息生产 / 消费 TPS、消息堆积、磁盘使用率、连接数等);
  • 采集方式:通过 RocketMQ Exporter(官方 / 社区版)将 RocketMQ 的原生指标转换为 Prometheus 可识别的/metrics格式;
  • 核心流程:RocketMQ 节点产生指标 → Exporter 拉取并转换指标 → Prometheus 定时抓取 Exporter 指标 → Grafana 可视化 / AlertManager 告警。

1.2、核心监控指标分类

组件核心监控指标指标类型监控意义
Broker消息生产 TPS、消费 TPS、消息堆积数Counter/Gauge核心业务吞吐、堆积风险
Broker磁盘使用率、文件句柄数、JVM 内存 / GCGauge服务器资源与 JVM 健康状态
NameServer心跳数、Broker 注册数、请求响应时间Counter/Gauge注册中心可用性
Consumer消费堆积、消费失败数、重试次数Gauge/Counter消费端健康度
Producer生产失败数、发送延迟Counter/Gauge生产端稳定性

二、环境准备

  • 基础依赖, 附上安装部署

    服务名说明
    RocketMQ4.9.7
    Prometheus3.5.0
    Grafana12.2.1
    RocketMQ Exporter社区维护版
    jdk1.8+
  • 配置修改

    • conf/broker.conf

      # broker.conf 关键配置, 添加下面四个, 安装看上面rocketmq链接
      
      # ========== 基础网络配置(监控必须) ==========
      # 1. Broker 对外暴露的IP(核心!Exporter通过这个IP拉取监控指标)
      # 单机:填本机内网IP(如 192.168.1.10),不要用 127.0.0.1(集群下其他节点访问不到)
      # 集群:填Broker节点的真实内网IP
      brokerIP1=192.168.1.10  
      
      # 2. Broker 监听端口(默认10911,无需修改,确保端口未被占用)
      listenPort=10911  
      
      # ========== 监控相关配置 ==========
      # 3. 开启属性过滤(非必须,但部分监控指标依赖)
      enablePropertyFilter=true  
      
      # 4. 监控数据采集间隔(单位:秒,默认60,建议改小提升实时性)
      monitorInterval=30
      
    • 下面两个是可选参数

      采集方式依赖端口采集内容是否必须
      HTTP / 默认方式9876(NameServer)、10911(Broker)RocketMQ 业务指标(TPS、消息堆积、Broker 状态等)✅ 必须
      JMX 方式10999(Broker)、10998(NameServer)JVM 底层指标(内存、GC、线程)❌ 可选
      • bin/runbroker.sh

        # ========== JMX监控配置(可选,但建议开) ==========
        # JMX是Java自带的监控协议,Exporter可通过JMX拉取更细粒度的JVM指标(内存/GC/线程)
        # 以下参数是添加到 Broker 的启动脚本中(不是直接写在broker.conf里!)
        # 步骤:编辑 RocketMQ 启动脚本 `$ROCKETMQ_HOME/bin/runbroker.sh`
        # 在脚本开头的 JAVA_OPT 部分添加如下内容:
        
        # 在一堆JAVA_OPT下面加,如果配置没动的话,就在94行下面
        
        # 开启JMX
        JAVA_OPT="${JAVA_OPT} -Dcom.sun.management.jmxremote"
        # JMX端口(自定义,如10999)
        JAVA_OPT="${JAVA_OPT} -Dcom.sun.management.jmxremote.port=10999"
        # 关闭SSL(测试/内网环境)
        JAVA_OPT="${JAVA_OPT} -Dcom.sun.management.jmxremote.ssl=false"
        # 关闭认证(内网环境)
        JAVA_OPT="${JAVA_OPT} -Dcom.sun.management.jmxremote.authenticate=false"
        # JMX绑定的IP(和brokerIP1一致)
        JAVA_OPT="${JAVA_OPT} -Djava.rmi.server.hostname=10.4.50.165"  
        
      • bin/runserver.sh

        # 如果默认没动的话,加到最后的脚本倒数第一行上
        JAVA_OPT="${JAVA_OPT} -Dcom.sun.management.jmxremote"
        JAVA_OPT="${JAVA_OPT} -Dcom.sun.management.jmxremote.port=10998"
        JAVA_OPT="${JAVA_OPT} -Dcom.sun.management.jmxremote.ssl=false"
        JAVA_OPT="${JAVA_OPT} -Dcom.sun.management.jmxremote.authenticate=false"
        JAVA_OPT="${JAVA_OPT} -Djava.rmi.server.hostname=10.4.50.165"
        $JAVA ${JAVA_OPT} $@    #  <--这行上面
        
      • 10999/10998 只用于补充采集 JVM 指标,如果不配置,Exporter 依然能采集到 RocketMQ 核心业务指标,但会缺失部分 JVM 细粒度指标;

      • 10999/10998 的使用场景

        场景是否需要 10999/10998Exporter 启动方式
        仅监控 RocketMQ 业务指标(TPS、堆积等)❌ 不需要用默认命令(仅指定 namesrvAddr 和 port)
        监控业务指标 + JVM 底层指标✅ 需要启动时添加 --rocketmq.config.jmxPort/jmxIp
        集群环境监控多节点 JVM✅ 需要每个 Broker 节点部署一个 Exporter,分别指定对应 JMX 端口

2.1、单机部署

  • 准备阶段

    • 编译rocketmq-exporter

      git clone https://github.com/apache/rocketmq-exporter.git
      cd rocketmq-exporter
      mvn clean package -DskipTests
      
      # 如果出现了
      [ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:2.17:check (verify) on project rocketmq-exporter: Failed during checkstyle execution: There is 1 error reported by Checkstyle 6.11.2 with style/rmq_checkstyle.xml ruleset. -> [Help 1]
      
      # 修复checkstyle报错
      mvn clean package -DskipTests -e   <--之后在重新编译
      
      # 编译完成之后
      rocketmq-exporter-master\target 下会生成
      rocketmq-exporter-0.0.3-SNAPSHOT.jar
      
      # 我这本地编译的放到服务器上
      mkdir /data/rocketmq-export/log -p
      将 rocketmq-exporter-0.0.3-SNAPSHOT-exec.jar 放到 /data/rocketmq-export 目录
      
  • 原理说明: NameServer 用 10998、Broker 用 10999,Exporter 是否需要为 Broker 单独起进程?

    • 核心逻辑:Exporter 的自动发现机制

      RocketMQ Exporter 的核心设计是:通过连接 NameServer(9876 端口)自动发现集群中所有 Broker 节点,无需为每个 Broker/NameServer 单独部署 Exporter。

      • 采集业务指标:Exporter 通过 NameServer 获取所有 Broker 列表,直接从 Broker 的 10911 端口拉取 TPS、堆积等业务指标;
      • 采集 JVM 指标:只需告诉 Exporter「Broker 的 JMX 端口规则」(比如所有 Broker 的 JMX 端口都是 10999,NameServer 是 10998),Exporter 会自动匹配节点 IP+JMX 端口采集 JVM 指标。
    • 单 Exporter 采集 NameServer+Broker(含 JVM)的配置步骤

      • 环境说明

        • NameServer:127.0.0.1:9876(JMX 端口 10998);
        • Broker:127.0.0.1:10911(JMX 端口 10999);
        • 目标:一个 Exporter 进程采集两者的业务 + JVM 指标。
      • 启动 Exporter(单进程,同时采集 NameServer+Broker)

        nohup java -jar target/rocketmq-exporter-0.0.1-SNAPSHOT.jar \
          --rocketmq.config.namesrvAddr=127.0.0.1:9876 \  # 连接NameServer自动发现Broker
          --rocketmq.config.brokerJmxPort=10999 \          # 指定所有Broker的JMX端口
          --rocketmq.config.namesrvJmxPort=10998 \         # 指定所有NameServer的JMX端口
          --server.port=5557 &                             # Exporter端口
        
        参数作用
        brokerJmxPort统一指定集群中所有 Broker 的 JMX 端口(无需为每个 Broker 单独配置)
        namesrvJmxPort统一指定集群中所有 NameServer 的 JMX 端口
        namesrvAddrExporter 通过这个地址获取 Broker 列表,是自动发现的核心
  • 添加自启 <-- 集群跟单机用的是同一个脚本

    cat > /usr/lib/systemd/system/rocketmq-exporter.service << EOF
    [Unit]
    Description=RocketMQ Exporter for Prometheus
    After=network.target rocketmq-broker.service rocketmq-namesrv.service
    Documentation=https://github.com/apache/rocketmq-exporter
    
    [Service]
    User=root
    Group=root
    # 工作目录(确保已创建)
    WorkingDirectory=/data/rocketmq-export
    # 启动命令(替换为真实Java路径!)
    ExecStart=/data/jdk1.8/bin/java -jar /data/rocketmq-export/rocketmq-exporter-0.0.3-SNAPSHOT-exec.jar \
      --rocketmq.config.namesrvAddr=10.4.50.165:9876 \
      --rocketmq.config.brokerJmxPort=10999 \
      --rocketmq.config.namesrvJmxPort=10998 \
      --server.port=5557
    # 重启策略
    Restart=on-failure
    RestartSec=5
    # 日志输出(systemd正确格式:file:路径,自动追加)
    StandardOutput=file:/data/rocketmq-export/log/rocketmq-exporter.log
    StandardError=file:/data/rocketmq-export/log/rocketmq-exporter.err
    # 允许日志文件自动创建
    PermissionsStartOnly=true
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
    • 参数说明与路径替换

      配置项需替换的内容
      WorkingDirectoryExporter 的根目录
      ExecStart 中的 JAR 路径java绝对路径
      namesrvAddr若为集群,替换为192.168.1.10:9876;192.168.1.11:9876(多个 NameServer 用分号分隔)
    • 创建日志

      # 创建日志文件
      touch /data/rocketmq-export/log/rocketmq-exporter.log
      touch /data/rocketmq-export/log/rocketmq-exporter.err
      
    • 单机用集群配置会有性能损耗吗?

      完全不会。Exporter 的「自动发现」逻辑在单机场景下仅扫描 1 个 NameServer 和 1 个 Broker,资源消耗和纯单机配置几乎一致。

    • Prometheus 的集群配置需要改吗?

      不需要。Prometheus 中配置的targets依然是 Exporter 的本地地址(localhost:5557),和单机配置完全相同。

  • 服务启动

    systemctl daemon-reload
    systemctl status rocketmq-exporter
    systemctl restart rocketmq-exporter
    systemctl stop rocketmq-exporter
    
    # 启动完后之后检查
    [root@localhost rocketmq-export]# ss -tnlp|grep 555
    LISTEN       *:5557      users:(("java",pid=6721,fd=62)) 
    LISTEN       *:5559      users:(("java",pid=6721,fd=52)) 
    
    [root@localhost rocketmq-export]# tail -f /data/rocketmq-export/log/rocketmq-exporter.log
    [2025-12-09 11:04:26.193]  INFO init RMQMetricsService add opentelemetry collector...
    [2025-12-09 11:04:26.703]  INFO grpc server start successfully at 5559
    [2025-12-09 11:04:26.969]  INFO MetricsCollectTask init starting....
    [2025-12-09 11:04:27.230]  INFO cluster name= DefaultCluster, broker name = [broker-a]
    broker name = broker-a, master broker address= 10.4.50.165:10911
    [2025-12-09 11:04:27.230]  INFO MetricsCollectTask init finished....cost:260
    [2025-12-09 11:04:27.662]  INFO Starting ProtocolHandler ["http-nio-5557"]
    [2025-12-09 11:04:27.683]  INFO Tomcat started on port(s): 5557 (http) with context path ''
    [2025-12-09 11:04:27.708]  INFO Started RocketMQExporterApplication in 3.7 seconds (JVM running for 4.453)
    
  • 访问:http://ip:5557/metrics

2.1.1、配置prometheus
  • 编辑 Prometheus 配置文件prometheus.yml

    global:
      scrape_interval: 15s  # 抓取间隔
      evaluation_interval: 15s
    
    scrape_configs:
      # RocketMQ监控(单机)
      - job_name: "rocketmq-single"
        static_configs:
          - targets: ["刚刚的ip:5557"]  # Exporter地址
        metrics_path: /metrics
        scrape_interval: 5s  # 缩短抓取间隔,提升实时性
    
    # 实际用的时候需要把后面的注释删掉,不然可能会有莫名其妙的问题
    
    
  • 检查配置

    prometheus]# ./promtool  check config prometheus.yml 
    Checking prometheus.yml
      SUCCESS: 3 rule files found
     SUCCESS: prometheus.yml is valid prometheus config file syntax
     
    prometheus]# systemctl restart prometheus
    
    • 在 Prometheus UI(http://localhost:9090)→ Targets 中,确认rocketmq-single job 状态为UP
2.1.2、Grafana 可视化
  • Grafana 官网搜索 RocketMQ 模板(推荐 ID:10477) -->官方推荐的社区模板
  • 配置数据源:Grafana → 配置 → 数据源 → 添加 Prometheus,填写 Prometheus 地址(如http://localhost:9090);
  • 导入json: 仪表板–> 新建 --> 导入 --> 10477_rev3.json --> 导名为 rocket_single_dashbo
  • 查看面板:可看到 Broker TPS、消息堆积、JVM 内存、磁盘使用率等核心指标。

2.2、集群部署

  • 集群部署

  • 配置修改,三台都需要改一下,三台都要监听10998、10999

  • 集群模式启动 Exporter

    • 集群中任意一台部署exporter

    • rocketmq-exporter.service <-- 再次提示,集群内只需要部署一台,超过50台在部署多个

      cat > /usr/lib/systemd/system/rocketmq-exporter.service << EOF
      [Unit]
      Description=RocketMQ Exporter for Prometheus
      After=network.target rocketmq-broker.service rocketmq-namesrv.service
      Documentation=https://github.com/apache/rocketmq-exporter
      
      [Service]
      User=root
      Group=root
      # 工作目录(确保已创建)
      WorkingDirectory=/data/rocketmq-export
      # 启动命令(替换为真实Java路径!)
      ExecStart=/data/jdk1.8/bin/java -jar /data/rocketmq-export/rocketmq-exporter-0.0.3-SNAPSHOT-exec.jar \
        --rocketmq.config.namesrvAddr=10.4.50.130:9876;10.4.50.139:9876;10.4.50.167:9876 \
        --rocketmq.config.brokerJmxPort=10999 \
        --rocketmq.config.namesrvJmxPort=10998 \
        --server.port=5557
      # 重启策略
      Restart=on-failure
      RestartSec=5
      # 日志输出(systemd正确格式:file:路径,自动追加)
      StandardOutput=file:/data/rocketmq-export/log/rocketmq-exporter.log
      StandardError=file:/data/rocketmq-export/log/rocketmq-exporter.err
      # 允许日志文件自动创建
      PermissionsStartOnly=true
      
      [Install]
      WantedBy=multi-user.target
      EOF
      
    • 启动

      systemctl daemon-reload
      systemctl status rocketmq-exporter
      systemctl restart rocketmq-exporter
      systemctl stop rocketmq-exporter
      
      # 启动完后之后检查
      [root@localhost rocketmq-export]# ss -tnlp|grep 555
      LISTEN       *:5557      users:(("java",pid=6721,fd=62)) 
      LISTEN       *:5559      users:(("java",pid=6721,fd=52)) 
      
2.1.1、配置Prometheus
  • 配置文件说明

    [root@node1 prometheus]#  vim prometheus.yml
    scrape_configs:
      - job_name: "rocketmq-cluster"
        static_configs:
          - targets: ["10.4.50.130:5557"]
            labels:
              cluster: "rocketmq-prod"
        scrape_interval: 5s
    
    # 如果有多台, ai提示是50台以上集群用多个, 示例
      - job_name: "rocketmq-cluster"
        static_configs:
          - targets: 
            - "192.168.1.20:5557"  # Broker1主节点Exporter
            - "192.168.1.22:5557"  # Broker2主节点Exporter
        scrape_interval: 5s
        
    # 加完之后检查一下配置
    [root@node1 prometheus]# ./promtool check config prometheus.yml 
    Checking prometheus.yml
      SUCCESS: 3 rule files found
     SUCCESS: prometheus.yml is valid prometheus config file syntax
     
    [root@node1 prometheus]# systemctl restart prometheus
    
    • 在 Prometheus UI(http://localhost:9090)→ Targets 中,确认rocketmq-cluster job 状态为UP

    • 当我们查看指标时,会发现只有 master这一台机器的监控信息.

      # 当我们当167 stop之后,会切到139或者130, 但监控信息只会一台
      rocketmq_brokeruntime_pmdt_500to1s{cluster="MyRocketMQCluster",brokerIP="10.4.50.167:10911",brokerHost="",des="V4_9_7",boottime="1765261725150",broker_version="407",} 0.0
      rocketmq_brokeruntime_pmdt_1to2s{cluster="MyRocketMQCluster",brokerIP="10.4.50.167:10911",brokerHost="",des="V4_9_7",boottime="1765261725150",broker_version="407",} 0.0
      
      • RocketMQ 集群的主从机制决定了「Slave 无法承接生产 / 消费业务」,最终体现为指标层面只有 Master 相关(停服后指标归零)。下面拆解背后的逻辑,并验证集群监听状态是否正常, 先说结论:停止 Master 后仅显示 Master 指标是正常的
        • RocketMQ 主从集群中,Slave 不具备 “主备切换” 的自动承接能力(除非手动配置 Dledger/RAFT 模式),停止 Master 后:
          • 业务层面:所有生产 / 消费请求直接失败,集群无业务流量→所有业务类指标(TPS、生产延迟、偏移量)归零;
          • 指标采集层面:
            • Exporter 仍在监听 Slave(如10.4.50.167:10911),但 Slave 本身不处理业务,且 Master 停服后 Slave 的存储同步也会中断;
            • 你看到的 “仅监听 Master”,实际是 Master 停服前的指标残留,或 Slave 无业务指标导致 “看似只有 Master”;
          • 存储层面:Slave 的磁盘使用率(commitlog_disk_ratio=0.06)等指标仍有值,说明 Exporter 确实采集到了 Slave,只是业务指标无数据。
2.1.2、预警配置
  • alert_rules.yml

    groups:
    - name: rocketmq-alerts
      rules:
      # Broker宕机告警
      - alert: RocketMQBrokerDown
        expr: up{job="rocketmq-cluster"} == 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "RocketMQ Broker {{ $labels.brokerName }} 宕机"
          description: "Broker {{ $labels.brokerName }} 已下线超过1分钟,请检查"
      
      # 消息堆积告警
      - alert: RocketMQMessageBacklog
        expr: rocketmq_topic_consume_offset_diff > 10000
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Topic {{ $labels.topic }} 消息堆积"
          description: "Topic {{ $labels.topic }} 堆积数:{{ $value }},超过阈值10000"
      
      # 磁盘使用率告警
      - alert: RocketMQBrokerDiskHighUsage
        expr: rocketmq_broker_disk_usage > 85
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Broker {{ $labels.brokerName }} 磁盘使用率过高"
          description: "磁盘使用率:{{ $value }}%,超过阈值85%"
    
  • prometheus.yml

    rule_files:
      - "alert_rules.yml"
    alerting:
      alertmanagers:
        - static_configs:
            - targets: ["localhost:9093"]  # AlertManager地址
    
    

三、prometheus指标

3.1、核心业务指标

  • TPS生产指标

    指标名含义监控意义阈值 / 关注点
    rocketmq_producer_tps{topic="TopicTest"}指定 Topic 的生产 TPS(每秒生产消息数)核心业务生产吞吐,反映生产端流量波动异常(突增 / 突降)需告警
    rocketmq_broker_tps{broker="broker-a"}Broker 的总 TPS(生产 + 消费)Broker 整体处理能力,集群负载核心指标单 Broker TPS 接近硬件上限需扩容
    rocketmq_producer_message_size{topic="TopicTest"}指定 Topic 生产消息的平均大小(字节)评估消息体积,影响网络 / 磁盘 IO突然增大可能导致 IO 瓶颈
    rocketmq_brokeruntime_msg_put_total_today_nowBroker 今日累计生产消息数业务消息总量统计,核对业务量与历史同期对比,异常波动需排查
    rocketmq_brokeruntime_put_tps60Broker 近 60 秒平均生产 TPS短期生产吞吐趋势,比实时 TPS 更稳定持续低于基线需排查生产端问题
    rocketmq_brokeruntime_gettotal_tps60Broker 近 60 秒平均消费 TPS消费端吞吐,反映消费能力生产 TPS > 消费 TPS 时会堆积
    rocketmq_brokeruntime_put_latency_99生产消息 99 分位延迟(ms)生产延迟,反映 Broker 写入性能99 分位 > 50ms 需关注,>100ms 需告警
    rocketmq_brokeruntime_put_latency_999生产消息 99.9 分位延迟(ms)极端场景生产延迟,核心稳定性指标99.9 分位 > 200ms 需紧急排查
  • 线程池 / 队列指标(中优先级)

    指标名含义监控意义阈值 / 关注点
    rocketmq_brokeruntime_send_threadpool_queue_size发送线程池队列长度生产请求排队数,反映 Broker 处理压力>0 持续增长需扩容线程池 / 硬件
    rocketmq_brokeruntime_pull_threadpoolqueue_size拉取线程池队列长度消费请求排队数,反映消费处理压力>0 持续增长需排查消费端
    rocketmq_brokeruntime_query_threadpoolqueue_size查询线程池队列长度管理类请求排队数,辅助监控>0 需关注 Broker 负载
    rocketmq_brokeruntime_send_threadpoolqueue_capacity发送线程池队列容量队列最大可容纳请求数无阈值,辅助计算队列使用率
  • 偏移量 / 积压相关(中优先级)

    指标名含义监控意义阈值 / 关注点
    rocketmq_producer_offset{topic="TopicTest"}指定 Topic 的生产偏移量生产进度,辅助计算消息堆积与消费偏移量差值 > 10000 需告警
    rocketmq_topic_retry_offset重试 Topic 的偏移量消费重试消息数,反映消费失败率持续增长需排查消费端异常
    rocketmq_brokeruntime_earliest_message_timestampBroker 中最早消息的时间戳消息留存时间,评估消息清理策略<0 表示无消息,正常;非 0 需确认是否有旧消息堆积
  • 生产延迟消息数

    指标名含义监控意义阈值 / 关注点
    rocketmq_brokeruntime_pmdt_0ms生产延迟 0ms 的消息数无延迟消息占比,反映 Broker 写入效率占比越低,写入性能越差
    rocketmq_brokeruntime_pmdt_0to10ms生产延迟 0-10ms 的消息数低延迟消息占比,核心性能指标占比 < 90% 需关注
    rocketmq_brokeruntime_pmdt_10to50ms生产延迟 10-50ms 的消息数中延迟消息数数量突增需排查 Broker 负载
    rocketmq_brokeruntime_pmdt_50to100ms+生产延迟 > 50ms 的消息数高延迟消息数,异常指标非 0 即需关注,>10 需告警
  • 辅助 / 统计类指标(低优先级)

    指标名含义监控意义备注
    rocketmq_producer_count生产者数量生产端连接数,辅助排查连接泄露无阈值,关注异常增长
    rocketmq_brokeruntime_putmessage_entire_time_max生产消息最大耗时(ms)极端生产耗时,偶发高值可忽略持续 > 500ms 需告警
    rocketmq_brokeruntime_getmessage_entire_time_max消费消息最大耗时(ms)极端消费耗时,偶发高值可忽略持续 > 500ms 需告警
    rocketmq_brokeruntime_putmessage_times_total生产消息总次数累计生产次数,业务量统计无阈值,用于报表统计
    rocketmq_brokeruntime_remain_transientstore_buffer_numbs瞬时存储缓冲区剩余数量RocketMQ 存储层缓冲区,辅助监控接近 0 需关注磁盘写入性能
    rocketmq_brokeruntime_pagecache_lock_time_mills页缓存锁等待时间(ms)磁盘 IO 锁竞争时间,反映存储性能>0 需关注磁盘 IO
  • 其它

    指标名含义监控意义备注
    broker_version="407"/des="V4_9_7"Broker 版本确认集群版本,排查版本兼容问题无阈值,运维备查
    boottime="1765183441818"Broker 启动时间戳确认 Broker 是否重启过异常重启需排查原因
    cluster="MyRocketMQCluster"集群名称区分多集群环境无阈值,Grafana 筛选用

3.2、存储 / 磁盘指标

指标名含义监控意义阈值 / 关注点
rocketmq_brokeruntime_commitlog_disk_ratioCommitLog 磁盘使用率Broker 核心存储分区使用率,最关键磁盘指标>80% 预警,>85% 告警,>90% 紧急处理
rocketmq_brokeruntime_consumequeue_disk_ratioConsumeQueue 磁盘使用率消费队列磁盘使用率,辅助存储指标>80% 预警
rocketmq_brokeruntime_commitlogdir_capacity_freeCommitLog 目录剩余磁盘空间(字节)剩余磁盘绝对量,避免磁盘耗尽剩余 < 100GB 告警
rocketmq_brokeruntime_commitlogdir_capacity_totalCommitLog 目录总磁盘空间(字节)磁盘总容量,用于计算使用率无阈值,辅助分析
rocketmq_brokeruntime_commitlog_maxoffsetCommitLog 最大偏移量存储数据量增长趋势,评估磁盘消耗速度无阈值,关注增长速率
rocketmq_broker_commitlog_diff主从 Broker CommitLog 偏移量差值主从数据同步延迟,反映集群同步状态差值 > 10000 需告警(同步异常)
  • rocketmq_broker_commitlog_diff : 仅 Slave 会统计该指标,Master 本身不会统计(因为 Master 是同步基准,无 “差值” 可言)

    自己生成的,将就用吧

请添加图片描述

四、其它补充

  1. 常见问题排查

    • Exporter 抓取不到指标:检查 NameServer 地址是否正确、RocketMQ 端口是否开放、Exporter 与 RocketMQ 版本兼容(推荐 Exporter 与 RocketMQ 同版本);
    • 指标缺失:部分指标需开启 RocketMQ 扩展监控(如broker.confmonitorInterval=5);
    • Grafana 面板无数据:检查 Prometheus 数据源是否正确、指标名称是否匹配(不同 Exporter 版本指标名可能差异)。
  2. 性能优化

    • 抓取间隔:生产环境建议抓取间隔 5-10s,避免过短导致 Prometheus 压力过大;

    • Exporter 资源限制:为 Exporter 配置 JVM 参数(如-Xms256m -Xmx512m),避免内存溢出;

    • 指标过滤:通过 Prometheus

      metric_relabel_configs:
        - source_labels: [__name__]
          regex: "rocketmq_.*"  # 只保留rocketmq前缀的指标
          action: keep
      

否开放、Exporter 与 RocketMQ 版本兼容(推荐 Exporter 与 RocketMQ 同版本);

  • 指标缺失:部分指标需开启 RocketMQ 扩展监控(如broker.confmonitorInterval=5);
  • Grafana 面板无数据:检查 Prometheus 数据源是否正确、指标名称是否匹配(不同 Exporter 版本指标名可能差异)。
  1. 性能优化

    • 抓取间隔:生产环境建议抓取间隔 5-10s,避免过短导致 Prometheus 压力过大;

    • Exporter 资源限制:为 Exporter 配置 JVM 参数(如-Xms256m -Xmx512m),避免内存溢出;

    • 指标过滤:通过 Prometheus

      metric_relabel_configs:
        - source_labels: [__name__]
          regex: "rocketmq_.*"  # 只保留rocketmq前缀的指标
          action: keep
      
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐