跳转至主要内容
版本: 5.0

指标

RocketMQ 以 Prometheus 格式公开以下指标。您可以使用这些指标来监控集群。

  • Broker 指标
  • 生产者指标
  • 消费者指标

版本支持:以下 RocketMQ 指标自 5.1.0 版本引入,且仅支持 Broker。

指标详情

指标类型

RocketMQ 中指标定义的标准符合开源 Prometheus 的指标定义标准。RocketMQ 提供的指标类型包括计数器 (Counters)、仪表 (Gauges) 和直方图 (Histograms)。更多信息,请参见 METRIC TYPES

Broker 指标

下表描述了与 Apache RocketMQ 消息队列 Broker 相关的指标标签。

  • cluster: RocketMQ 集群名称。
  • node_type: 服务节点类型,包括:proxy、broker、nameserver。
  • node_id: 服务节点 ID。
  • topic: RocketMQ 主题。
  • message_type: 消息类型,包括:
    normal: 普通消息;
    fifo: 顺序消息;
    transaction: 事务消息;
    delay: 定时或延时消息。
  • consumer_group: 消费者组 ID。
  • invocation_status: 创建主题或消费者组的 API 调用结果,包括 success(成功)和 failure(失败)。
类型名称单位描述标签
counterrocketmq_messages_in_totalcount生产的消息数量。cluster,node_type,node_id,topic,message_type
counterrocketmq_messages_out_totalcount消费的消息数量。cluster,node_type,node_id,topic, consumer_group
counterrocketmq_throughput_in_totalbyte生产写入的吞吐量。cluster,node_type,node_id,topic,message_type
counterrocketmq_throughput_out_totalbyte生产读取的吞吐量。cluster,node_type,node_id,topic, consumer_group
histogramrocketmq_message_sizebyte消息大小分布。此指标仅在发送消息时计数。以下显示分布范围:
le_1_kb: ≤ 1 KB
le_4_kb: ≤ 4 KB
le_512_kb: ≤ 512 KB
le_1_mb: ≤ 1 MB
le_2_mb: ≤ 2 MB
le_4_mb: ≤ 4 MB
le_overflow: > 4 MB
cluster,node_type,node_id,topic,message_type
gaugerocketmq_consumer_ready_messagescount就绪消息的数量。cluster,node_type,node_id,topic, consumer_group
gaugerocketmq_consumer_inflight_messagescount处理中消息的数量。cluster,node_type,node_id,topic, consumer_group
gaugerocketmq_consumer_queueing_latencymillisecond就绪消息的排队延迟时间。cluster,node_type,node_id,topic, consumer_group
gaugerocketmq_consumer_lag_latencymillisecond消息消费前的延迟时间。cluster,node_type,node_id,topic, consumer_group
counterrocketmq_send_to_dlq_messages_totalcount发送到死信队列的消息数量。cluster,node_type,node_id,topic, consumer_group
histogramrocketmq_rpc_latencymillisecondRPC 调用延迟。cluster,node_typ,node_id,protocol_type,request_code,response_code
gaugerocketmq_storage_message_reserve_timemillisecond消息保留时间。cluster,node_type,node_id
gaugerocketmq_storage_dispatch_behind_bytesbyte未分发消息的大小。cluster,node_type,node_id
gaugerocketmq_storage_flush_behind_bytesbyte未刷盘消息的大小。cluster,node_type,node_id
gaugerocketmq_thread_pool_wartermarkcount线程池中排队的任务数量。cluster,node_type,node_id,name
histogramrocketmq_topic_create_execution_timemillisecond创建主题的执行时间。
le_10_ms
le_100_ms
le_1_s
le_3_s
le_5_s
le_overflow
cluster,node_type,node_id,invocation_status,is_system
histogramrocketmq_consumer_group_create_execution_timemillisecond创建消费者组的执行时间。
le_10_ms
le_100_ms
le_1_s
le_3_s
le_5_s
le_overflow
cluster,node_type,node_id,invocation_status
gaugerocketmq_topic_numbercount主题数量。cluster,node_type,node_id
gaugerocketmq_consumer_group_numbercount消费者组数量。cluster,node_type,node_id

生产者指标

下表描述了与 Apache RocketMQ 消息队列生产者相关的指标标签。

  • cluster: RocketMQ 集群名称。
  • node_type: 服务节点类型,包括:proxy、broker、nameserver。
  • node_id: 服务节点 ID。
  • topic: Apache RocketMQ 消息队列的主题。
  • message_type: 消息类型,包括:
    normal: 普通消息;
    fifo: 顺序消息;
    transaction: 事务消息;
    delay: 定时或延时消息。
  • client_id: 客户端 ID。
  • invocation_status: 发送消息的 API 调用结果,包括 success(成功)和 failure(失败)。
类型名称单位描述标签
Histogramrocketmq_send_cost_timemillisecond生产 API 调用时间的分布。以下显示分布范围:
le_1_ms
le_5_ms
le_10_ms
le_20_ms
le_50_ms
le_200_ms
le_500_ms
le_overflow
topic,client_id,invocation_status

消费者指标

下表描述了与 Apache RocketMQ 消息队列消费者相关的指标标签。

  • topic: Apache RocketMQ 消息队列的主题。
  • consumer_group: 消费者组 ID。
  • client_id: 客户端 ID。
  • invocation_status: 消费消息的 API 调用结果,包括 success(成功)和 failure(失败)。
类型名称单位描述标签
Histogramrocketmq_process_timemillisecond消息处理时间的分布。以下显示分布范围:
le_1_ms
le_5_ms  
le_10_ms
le_100_ms
le_10000_ms
le_60000_ms
le_overflow
topic,consumer_group,client_id,invocation_status
gaugerocketmq_consumer_cached_messagesmessagePushConsumer 本地缓冲区队列中的消息数量。topic,consumer_group,client_id
gaugerocketmq_consumer_cached_bytesbytePushConsumer 本地缓冲区队列中消息的总大小。topic,consumer_group,client_id
Histogramrocketmq_await_timemillisecondPushConsumer 本地缓冲区队列中消息的排队时间分布。以下显示分布范围:
le_1_ms
le_5_ms
le_20_ms
le_100_ms
le_1000_ms
le_5000_ms
le_10000_ms
le_overflow
topic,consumer_group,client_id

背景信息

RocketMQ 根据以下业务场景定义指标。

消息堆积场景

rocketmq queue meesage stuatus
上图显示了不同阶段消息的数量和持续时间。通过监控这些指标,您可以确定业务消费是否异常。下表描述了这些指标的含义以及计算这些指标所使用的公式。

名称描述公式
Inflight messages(处理中消息)消费者正在处理但尚未确认 (ack) 的消息数量。最新拉取消息的 Offset - 最新提交消息的 Offset
Ready messages(就绪消息)可供消费的消息数量。最大 Offset - 最新拉取消息的 Offset
Ready time(就绪时间)普通消息或顺序消息:消息存储到 Broker 的时间。
定时消息:定时到期时间。
事务消息:事务提交时间。
--
Ready message queue time(就绪消息排队时间)最早就绪消息的就绪时间与当前时间之间的时间间隔。该时间反映了消费者拉取消息的及时性。当前时间 - 最早就绪消息的就绪时间
Consumer lag time(消费滞后时间)最早未确认消息的就绪时间与当前时刻之间的时间差。
该时间反映了消费者完成消息处理的及时性。
当前时间 - 最早未确认消息的就绪时间

PushConsumer 消费场景

在 PushConsumer 中,实时消息处理能力是基于 SDK 内部典型的 Reactor 线程模型实现的。如下图所示,SDK 内置了一个长轮询线程,异步地将消息拉取到 SDK 内置的缓冲区队列中,然后分别提交给消费者线程,触发监听器执行本地消费逻辑。
PushConsumer client
PushConsumer 场景下的本地缓冲区队列指标如下:

  • 本地缓冲区队列中的消息数量:本地缓冲区队列中的消息总数。
  • 本地缓冲区队列中的消息大小:本地缓冲区队列中所有消息的大小总和。
  • 消息等待时间:消息在本地缓冲区队列中临时缓存等待处理的时间。

如何获取指标

目前支持两种导出器:gRPC OTLP 和 Prometheus。

gRPC OTLP Exporter

gRPC OTLP 导出器定期向指定的 OpenTelemetry Collector 上报指标。

前提条件:部署支持 GRPC OpenTelemetry 协议 的 OpenTelemetry Collector。

要启用 Broker 指标的 gRPC OTLP 导出器,请执行以下操作:

  1. metricsExporterType 设置为 OTLP_GRPC
  2. metricsGrpcExporterTarget 设置为 OpenTelemetry Collector 提供的端点。

可选配置

  1. metricsGrpcExporterHeader: 以 key1:value1,key2:value2 的格式为 gRPC OTLP 导出器附加请求头。
  2. metricGrpcExporterTimeOutInMills: 设置 gRPC OTLP 导出器的请求超时时间。
  3. metricGrpcExporterIntervalInMills: 设置 gRPC OTLP 导出器的上报间隔。

Prometheus Exporter

Prometheus 导出器仅支持 Pull 模式和累积聚合。更多信息请参见 OpenTelemetry Metrics Exporter - Prometheus

要启用 Broker 指标的 Prometheus 导出器,请执行以下操作:

  1. metricsExporterType 设置为 PROM

访问 http://<broker-ip>:5557/metrics 查看指标。在 Prometheus 中配置服务发现或手动配置 Pull 任务以收集指标。

可选配置

  1. metricsPromExporterPort: Broker 公开指标服务的端口号。默认为 5557
  2. metricGrpcExporterTimeOutInMills: 公开指标服务的主机名。默认为 Broker 向 NameServer 注册的 IP (brokerIP1)。