从零配置RocketMQ_Exporter:让消息队列可观测性落地

前言

在微服务架构日益普及的今天,消息队列已成为系统解耦、异步处理和流量削峰的核心组件。而Apache RocketMQ凭借其高吞吐、低延迟和强一致性,被广泛应用于金融、电商、物流等关键业务场景。然而,“能跑”不等于“可控”——当消息积压、消费延迟或Broker异常发生时,若缺乏有效的监控手段,运维人员往往只能被动响应,甚至陷入“盲人摸象”的困境。RocketMQ Exporter正是打通可观测性“最后一公里”的关键工具。它将RocketMQ内部指标(如Topic堆积量、Broker磁盘使用率、消息生产/消费TPS等)以标准Prometheus格式暴露出来。但对许多开发者而言,从零开始配置Exporter仍面临依赖环境、权限配置、指标采集范围等实际问题。本文将手把手带你完成RocketMQ_Exporter的部署、配置与集成,避开常见坑点,真正让消息队列的运行状态“看得见、查得清、管得住”,为生产环境的稳定运行提供坚实保障。

生成 RocketMQ_Exporter 配图

1.RocketMQ Exporter

RocketMQ Exporter是一个用于将Apache RocketMQ的内部运行指标暴露给Prometheus的监控中间件,属于Prometheus生态中的Exporter组件。

1.1 核心作用

将RocketMQ集群的各类关键指标(如消息生产/消费TPS、堆积量、Broker状态等)以标准的Prometheus的Metrics格式(文本格式)通过HTTP接口暴露出来,便于:

  • 被Prometheus抓取(scrape)
  • 在Grafana中可视化展示
  • 实现告警(如消费延迟、堆积告警)

1.2 主要功能(采集的指标示例)

RocketMQ_Exporter主要是配合Prometheus来做监控,下面来看看当前在Expoter中定义了哪些监控指标和告警指标。

指标类别 示例指标 说明
Broker rocketmq_broker_tps
rocketmq_broker_qps
Broker的消息生产与消费吞吐量
Topic rocketmq_producer_tps
rocketmq_topic_offset
各Topic的生产速率、最新位点
Consumer Group rocketmq_consumer_lag
rocketmq_group_get_latency
消费组堆积量、拉取消息延迟
集群状态 rocketmq_commitlog_dir_capacity CommitLog磁盘使用情况

1.3 架构与工作原理

  • Exporter启动后,定期调用RocketMQ的Admin接口(如examineBrokerClusterInfo, queryConsumeStats)获取数据。
  • 将原始数据转换为Prometheus支持的格式(如counter, gauge)。
  • 通过内嵌Web服务(默认端口5557)提供 /metrics接口。

访问: http://:5557/metrics 查看原始指标

2.安装RocketMQ Exporter

2.1 下载maven构建

Maven 官方下载地址:http://maven.apache.org/download.cgi

下载图中版本:

image-20260206152210473

上传到/user/local目录下并解压:

tar -zxvf apache-maven-3.9.12-bin.tar.gz

image-20260206152539844

查看一下java版本:

java -version

修改/etc/profile文件:

vim /etc/profile
export MAVEN_HOME=/usr/local/apache-maven-3.9.12
export PATH=$MAVEN_HOME/bin:$PATH
source /etc/profile

image-20260206153037276

看到Maven版本,下面信息表示安装成功:

 mvn -v

image-20260206153232714

2.2 部署RocketMQ Exporter

从Git下载RocketMQ Exporter的源代码:

git clone https://github.com/apache/rocketmq-exporter.git

6fec3e9eefff84470adeee305fe2b901

进入项目根目录:

cd rocketmq-exporter

编译并打包成可执行JAR文件:

mvn clean install -DskipTests=true -Dcheckstyle.skip=true

4a8e2b1822fb7583ed24952c492e507e

构建Docker镜像:

mvn package -Dmaven.test.skip=true docker:build

ad9238ba4390f51f3d756b121629f04b

构建成功后,检查 target/ 目录,返回下面信息代表成功:

ls -l target/rocketmq-exporter-*.jar

a481dce4e5d8075502624ac9b7749fff

开启rocketmq的nameserver:

 nohup sh bin/mqnamesrv -n "0.0.0.0:9876" &

fd53bdaa76039e237d43062ab7d06b00

开启rocketmq的borker:

nohup sh bin/mqbroker -n 192.168.42.140:9876 -c conf/broker.conf &

image-20260206153958874

验证是否开启:

jps

image-20260206154022956

进入rocketmq_exporter目录下,开启rocketmq_exporter服务:

java -jar target/rocketmq-exporter-0.0.3-SNAPSHOT-exec.jar   --rocketmq.config.namesrvAddr=192.168.42.140:9876   --server.port=5557

7c3cfb6039657f1c6458f3062e6c2564

访问: http://:5557/metrics查看原始指标

3d4ef562e45f536f7012b8de1c499286

3.prometheus配置RocketMQ Exporter监控

进入prometheus安装目录下,编辑prometheus配置文件:

vi prometheus.yml
      - targets: ['localhost:5557']
        labels:
          app: "rocketmq_exporter"

image-20260206160756086

重启Prometheus:

systemctl restart prometheus

f69eab54844fe0c568b150191e847712

prometheus 成功抓取了rocketmq_exporter指标数据:

image-20260206161054675

4.配置alertmanager监控rocketmq的数据

配置alertmanager告警:

进入prometheus的安装目录,编辑prometheus.yml:

vi prometheus.yml

如图填写:

image-20260206161345706

编辑6.yml添加下面信息:

# 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:

systemctl restart prometheus

f69eab54844fe0c568b150191e847712

登到prometheus网页后,可以看到我们的告警添加成功啦:

image-20260206161458004

倘若rocketmq_exporter和prometheus不在一个局域网怎么办呢?别急cpolar来帮你!

5.安装cpolar随时随地开发(被监控主机安装)

5.1 为什么需要cpolar?

跨网络监控RocketMQ?别担心,cpolar来帮你!

在实际运维场景中,你可能会遇到这样的问题:RocketMQ Exporter部署在内网(如公司 IDC 或私有云),而Prometheus Server位于公网或另一个隔离的网络环境(如云上监控平台)——两者不在同一个局域网,无法直接通信!

此时,传统的Prometheus -> Exporter拉取模型就失效了。难道要开放防火墙、配置复杂VPN或反向代理? 太重了!

解决方案:使用cpolar内网穿透工具

cpolar是一款简单高效的内网穿透工具,它能将内网服务安全地暴露到公网,无需公网IP、无需复杂配置。

cpolar可以将你本地电脑中的服务(如SSH、Web、数据库)映射到公网。即使你在家里或外出时,也可以通过公网地址连接回本地运行的开发环境。

5.1 部署cpolar

❤️以下是安装cpolar步骤:

官网在此:https://www.cpolar.com

使用一键脚本安装命令:

sudo curl https://get.cpolar.sh | sh

6fcd3d90953ab77775b2e3ab5c2a9111

安装完成后,执行下方命令查看cpolar服务状态:(如图所示即为正常启动)

sudo systemctl status cpolar

22e5adfaf290a17fc3384bb296055259

Cpolar安装和成功启动服务后,在浏览器上输入虚拟机主机IP加9200端口即:【http://ip:9200】访问Cpolar管理界面,使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可:

打开浏览器访问本地9200端口,使用cpolar账户密码登录即可,登录后即可对隧道进行管理。

8a6698b1bf26d64ba3645827fbfb1c29

6.配置公网地址

登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理——创建隧道:

  • 隧道名称:可自定义,本例使用了:rocketmq,注意不要与已有的隧道名称重复

  • 协议:http

  • 本地地址:5557

  • 域名类型:随机域名

  • 地区:选择China TOP

image-20260206162729735

创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址,接下来就可以在其他电脑或者移动端设备(异地)上,使用地址访问。

image-20260206162750384

访问成功。

image-20260206162934112

7.将node_exporter暴露给Prometheus进行远程抓取

返回到监控主机,编辑prometheus配置文件:

vi prometheus.yml

Prometheus可以通过3b745a12.r2.cpolar.top这个公网地址访问到运行在192.168.42.145:9100的rocketmq_exporter服务,从而抓取系统指标。

      - targets: ["3b745a12.r2.cpolar.top"]
        labels:
          app: "rocketmq_exporter"

image-20260206163159488

重启Prometheus:

systemctl restart prometheus

f69eab54844fe0c568b150191e847712

登到prometheus网页后,可以看到我们的抓取成功:

image-20260206163253737

8.保留固定公网地址

使用cpolar为其配置二级子域名,该地址为固定地址,不会随机变化。

bb57af88579d81253d911fe4abd7fe01

点击左侧的预留,选择保留二级子域名,地区选择china Top,然后设置一个二级子域名名称,我这里演示使用的是rocketmq,大家可以自定义。填写备注信息,点击保留。

image-20260206163413854

登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道node_exporter,点击右侧的编辑

image-20260206163434824

修改隧道信息,将保留成功的二级子域名配置到隧道中

  • 域名类型:选择二级子域名
  • Sub Domain:填写保留成功的二级子域名
  • 地区: China TOP

点击更新

image-20260206163512483

更新完成后,打开在线隧道列表,此时可以看到随机的公网地址已经发生变化,地址名称也变成了保留和固定的二级子域名名称。

image-20260206163522882

最后,这样一个永久不会变化的二级子域名公网网址即设置好了。至此,我们完成了远程服务器监控搭建。

结尾

至此,我们已完整走通了 从源码编译、本地部署、指标采集到跨网络监控 的全流程。无论是内网环境还是混合云架构,借助RocketMQ Exporter与Prometheus的黄金组合,你都能轻松实现对RocketMQ集群的全面可观测性——不再“盲跑”,不再“猜错”,一切以数据说话。

更重要的是,通过像cpolar这样的轻量级工具,我们打破了网络隔离的壁垒,让监控无处不在,运维更加从容。这不仅是技术的胜利,更是稳定性与效率的双重保障

可观测性不是奢侈品,而是现代消息中间件的基础设施。 今天你为RocketMQ加上Exporter,明天就能在故障发生前收到告警,在容量瓶颈出现前完成扩容。

现在,就去部署你的第一个/metrics接口吧!

让每一条消息的轨迹清晰可见,让每一个消费延迟无所遁形。

感谢您对本篇文章的喜爱,有任何问题欢迎留言交流。cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站

Share:

发表回复

目录

On Key

推荐文章