指标
RocketMQ 以 Prometheus 格式暴露以下指标。您可以使用这些指标监控您的集群。
- Broker 指标
- 生产者指标
- 消费者指标
版本支持:RocketMQ 的以下指标自 5.1.0 版本引入,且仅支持 Broker。
指标详情
指标类型
RocketMQ 中指标的定义标准符合开源 Prometheus 中指标的定义标准。RocketMQ 提供的指标类型包括计数器 (counters)、测量仪 (gauges) 和直方图 (histograms)。更多信息,请参见 指标类型。
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: 创建 Topic 或消费者组 API 调用的结果,包括成功和失败。
类型 | 名称 | 单位 | 描述 | 标签 |
---|---|---|---|---|
counter | rocketmq_messages_in_total | 计数 | 已生产的消息数量。 | cluster,node_type,node_id,topic,message_type |
counter | rocketmq_messages_out_total | 计数 | 已消费的消息数量。 | cluster,node_type,node_id,topic, consumer_group |
counter | rocketmq_throughput_in_total | 字节 | 生产吞吐量。 | cluster,node_type,node_id,topic,message_type |
counter | rocketmq_throughput_out_total | 字节 | 消费吞吐量。 | cluster,node_type,node_id,topic, consumer_group |
histogram | rocketmq_message_size | 字节 | 消息大小分布。此指标仅在发送消息时计数。以下显示了分布范围: 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 |
gauge | rocketmq_consumer_ready_messages | 计数 | 就绪消息数量。 | cluster,node_type,node_id,topic, consumer_group |
gauge | rocketmq_consumer_inflight_messages | 计数 | 正在处理的消息数量。 | cluster,node_type,node_id,topic, consumer_group |
gauge | rocketmq_consumer_queueing_latency | 毫秒 | 就绪消息排队延迟时间。 | cluster,node_type,node_id,topic, consumer_group |
gauge | rocketmq_consumer_lag_latency | 毫秒 | 消息被消费前的延迟时间。 | cluster,node_type,node_id,topic, consumer_group |
counter | rocketmq_send_to_dlq_messages_total | 计数 | 发送到死信队列的消息数量。 | cluster,node_type,node_id,topic, consumer_group |
histogram | rocketmq_rpc_latency | 毫秒 | RPC 调用延迟。 | cluster,node_typ,node_id,protocol_type,request_code,response_code |
gauge | rocketmq_storage_message_reserve_time | 毫秒 | 消息保留时间。 | cluster,node_type,node_id |
gauge | rocketmq_storage_dispatch_behind_bytes | 字节 | 未分发消息大小。 | cluster,node_type,node_id |
gauge | rocketmq_storage_flush_behind_bytes | 字节 | 未刷新消息大小。 | cluster,node_type,node_id |
gauge | rocketmq_thread_pool_wartermark | 计数 | 线程池中排队的任务数量。 | cluster,node_type,node_id,name |
histogram | rocketmq_topic_create_execution_time | 毫秒 | 创建主题的执行时间。 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 |
histogram | rocketmq_consumer_group_create_execution_time | 毫秒 | 创建消费者组的执行时间。 le_10_ms le_100_ms le_1_s le_3_s le_5_s le_overflow | cluster,node_type,node_id,invocation_status |
gauge | rocketmq_topic_number | 计数 | 主题数量。 | cluster,node_type,node_id |
gauge | rocketmq_consumer_group_number | 计数 | 消费者组数量。 | 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 调用的结果,包括成功和失败。
类型 | 名称 | 单位 | 描述 | 标签 |
---|---|---|---|---|
Histogram | rocketmq_send_cost_time | 毫秒 | 生产 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 调用的结果,包括成功和失败。
类型 | 名称 | 单位 | 描述 | 标签 |
---|---|---|---|---|
Histogram | rocketmq_process_time | 毫秒 | 消息处理时间分布。以下显示了分布范围: 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 |
gauge | rocketmq_consumer_cached_messages | 消息 | PushConsumer 本地缓冲区队列中的消息数量。 | topic,consumer_group,client_id |
gauge | rocketmq_consumer_cached_bytes | 字节 | PushConsumer 本地缓冲区队列中消息的总大小。 | topic,consumer_group,client_id |
Histogram | rocketmq_await_time | 毫秒 | PushConsumer 本地缓冲区队列中消息的排队等待时间分布。以下显示了分布范围: 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 基于以下业务场景定义指标。
消息堆积场景
上图显示了不同阶段的消息数量和持续时间。通过监控这些指标,您可以判断业务消费是否异常。下表描述了这些指标的含义以及用于计算这些指标的公式。
名称 | 描述 | 公式 |
---|---|---|
正在处理的消息 | 消费者正在处理但尚未确认 (acked) 的消息数量。 | 最新拉取消息的 Offset - 最新提交消息的 Offset |
就绪消息 | 已准备好供消费的消息数量。 | 最大 Offset - 最新拉取消息的 Offset |
就绪时间 | 普通消息或顺序消息:消息存储到 Broker 的时间。 定时消息:定时结束时间。 事务消息:事务提交时间。 | -- |
就绪消息排队时间 | 最早就绪消息的就绪时间与当前时间之间的时间间隔。此时间反映了消费者拉取消息的及时性。 | 当前时间 - 最早就绪消息的就绪时间 |
消费者滞后时间 | 最早未确认消息的就绪时间与当前时刻之间的时间差。 此时间反映了消费者完成消息处理的及时性。 | 当前时间 - 最早未确认消息的就绪时间 |
PushConsumer 消费场景
在 PushConsumer 中,实时消息处理能力是基于 SDK 内部典型的 Reactor 线程模型实现的。如下图所示,SDK 内置了一个长轮询线程,它将消息异步拉取到 SDK 内置的缓冲区队列中,然后分别提交给消费者线程,触发监听器执行本地消费逻辑。
PushConsumer 场景下本地缓冲区队列的指标如下:
- 本地缓冲区队列中的消息数量:本地缓冲区队列中的消息总数。
- 本地缓冲区队列中的消息大小:本地缓冲区队列中所有消息大小的总和。
- 消息等待时间:消息在本地缓冲区队列中暂时缓存等待处理的时间。
如何获取指标
目前支持两种 Exporter:gRPC OTLP 和 Prometheus。
gRPC OTLP Exporter
gRPC OTLP Exporter 定期向指定的 OpenTelemetry Collector 报告指标。
前提条件:部署一个支持 GRPC OpenTelemetry 协议的 OpenTelemetry Collector。
要启用 Broker 指标的 gRPC OTLP Exporter,请执行以下操作:
- 将
metricsExporterType
设置为OTLP_GRPC
。 - 将
metricsGrpcExporterTarget
设置为 OpenTelemetry Collector 提供的端点。
可选配置
metricsGrpcExporterHeader
: 以 key1:value1,key2:value2 的格式将请求头附加到 gRPC OTLP Exporter。metricGrpcExporterTimeOutInMills
: 设置 gRPC OTLP Exporter 的请求超时时间。metricGrpcExporterIntervalInMills
: 设置 gRPC OTLP Exporter 的报告间隔。
Prometheus Exporter
Prometheus Exporter 仅支持 Pull 模式和 Cumulative 聚合。更多信息,请参见 OpenTelemetry Metrics Exporter - Prometheus。
要启用 Broker 指标的 Prometheus Exporter,请执行以下操作:
- 将
metricsExporterType
设置为PROM
。
访问 http://<broker-ip>:5557/metrics
查看指标。配置服务发现或在 Prometheus 中手动配置拉取任务以收集指标。
可选配置
metricsPromExporterPort
: Broker 暴露指标服务的端口号。默认值为5557
。metricGrpcExporterTimeOutInMills
: 暴露指标服务的主机名。默认值为 Broker 注册到 NameServer 的 IP,即 brokerIP1。