借助于阿里云ARMS Prometheus监控服务和Grafana的指标存储和展示能力,云消息队列 RocketMQ 版提供仪表盘功能。该功能可帮助您一站式、全方位、多维度地统计和观测指标,进而快速了解业务的运行状态。本文介绍仪表盘的应用场景、业务背景、指标详情、计费说明和查询方式。

应用场景

  • 场景一:线上消息消费有异常,消息不能及时被处理,需要及时收到报警,并快速定位问题。
  • 场景二:线上某些订单状态有异常,需要排查对应的消息链路环节是否正常发送消息。
  • 场景三:需要分析消息流量变化趋势、流量分布特点或消息体量,进而进行业务趋势分析规划。
  • 场景四:需要查看和分析应用上下游依赖拓扑情况,进行架构升级优化或改造。

业务背景

云消息队列 RocketMQ 版的消息收发流程中,队列的堆积情况、缓冲情况以及消息处理各关节的耗时等,会直接反映当前业务处理的性能和服务端运行的状态。因此,云消息队列 RocketMQ 版的重点指标主要涉及以下业务场景。

消息堆积场景

如下图所示,表示指定主题的某一队列中各消息的状态:

队列消息状态

上图表示指定主题的某一队列中各消息的状态,云消息队列 RocketMQ 版将处于不同处理阶段的消息数量和耗时进行统计,这些指标可直接反映队列中消息的处理速率和堆积情况,通过观察这些指标可初步判断业务的消费是否异常。具体的指标含义和计算公式如下:

分类指标定义计算公式
消息数量指标处理中的消息(inflight messages)在消费者客户端正在处理,但客户端还未返回消费结果的消息。最晚一条拉取消息的位点-最晚一条提交消息的位点
已就绪的消息(ready messages)消息在云消息队列 RocketMQ 版服务端已就绪,对消费者可见可被消费的消息。最大消息位点-最晚一条拉取消息的位点
消息堆积量(consumer lag)所有未处理完成的消息量。处理中消息量+已就绪消息量
消息耗时指标已就绪消息的就绪时间(ready time)
  • 普通消息、顺序消息:消息存储到服务端的时间。
  • 定时/延时消息:消息定时或延时结束的时间。
  • 事务消息:事务提交的时间。
不涉及
已就绪消息的排队时间(ready message queue time)最早一条就绪消息的就绪时间和当前时刻的时间差。

该时间反映消费者拉取消息的及时性。

当前时间-最早一条就绪消息的就绪时间
消费处理滞后时间(comsumer lag time)最早一条未消费完成的消息的就绪时间和当前时刻的时间差。

该时间反映消费者完成消息处理的及时性。

当前时间-最早一条未提交消息的就绪时间

PushConsumer消费场景

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

pushconsumer

具体原理,请参见PushConsumer

在PushConsumer消费场景下,本地缓冲队列相关指标如下:

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

Metrics指标详情

重要 所有消息收发TPS、消息收发次数或消息条数的相关指标,在计算时以消息大小4 KB和普通消息类型为基准,在其基础上需要乘以消息大小倍数和高级消息类型倍数。具体计算规则,请参见计算规格说明
Metrics指标中相关字段说明如下:
字段取值
Metrics类型
  • Counter:累计型的度量指标,其数值只增不减。例如,消息生产数量。
  • Gauge:一种既可以增加又可以减少的度量指标,其数值表示统计对象的瞬间值。例如,API调用的TPS。
  • Histogram:直方图,用于度量指标值的分布区间。例如,消息大小的分布情况。
Label
  • instance_id:云消息队列 RocketMQ 版实例的ID。
  • topic:云消息队列 RocketMQ 版的主题。
  • message_type:消息类型。normal表示普通消息;fifo表示顺序消息;transaction表示事务消息;delay表示延时/定时消息。
  • fifo_enable:消息消费时服务端是否按照顺序投递。true表示顺序投递;false表示并发投递。
  • uid:您的阿里云主账号ID。
  • client_id:云消息队列 RocketMQ 版客户端的ID。
  • invocation_status:消息发送接口调用结果。success表示成功;failure表示失败。

服务端Metrics指标

Metrics类型Metrics name单位指标说明Label
Gaugerocketmq_instance_requests_maxcount/s实例每分钟消息收发TPS的最大值(不包含被限流的请求)。

取值规则:以1分钟为周期,每秒钟采样一次,取这60次采样的最大值。

  • uid
  • instance_id
Gaugerocketmq_instance_requests_in_maxcount/s实例每分钟消息发送TPS的最大值(不包含被限流的请求)。

取值规则:以1分钟为周期,每秒钟采样一次,取这60次采样的最大值。

  • uid
  • instance_id
Gaugerocketmq_instance_requests_out_maxcount/s实例每分钟消息消费TPS的最大值(不包含被限流的请求)。

取值规则:以1分钟为周期,每秒钟采样一次,取这60次采样的最大值。

  • uid
  • instance_id
Gaugerocketmq_instance_requests_in_thresholdcount/s实例消息发送的限流阈值。
  • uid
  • instance_id
Gaugerocketmq_instance_requests_out_thresholdcount/s实例消息消费的限流阈值。
  • uid
  • instance_id
Gaugerocketmq_throttled_requests_incount消息发送的限流次数。
  • uid
  • instance_id
  • topic
  • message_type
Gaugerocketmq_throttled_requests_outcount消息消费的限流次数。
  • uid
  • instance_id
  • topic
  • fifo_enable
  • consumer_group
Gaugerocketmq_instance_elastic_requests_maxcount/s实例消息收发TPS的最大弹性值。
  • uid
  • instance_id
Counterrocketmq_requests_in_totalcount消息发送相关API的调用次数。
  • uid
  • instance_id
  • topic
  • message_type
Counterrocketmq_requests_out_totalcount消息消费相关API的调用次数。
  • uid
  • instance_id
  • topic
  • consumer_group
  • fifo_enable
Counterrocketmq_messages_in_totalmessage消息生产数量。
  • uid
  • instance_id
  • topic
  • message_type
Counterrocketmq_messages_out_totalmessage消息消费数量。
  • uid
  • instance_id
  • topic
  • consumer_group
  • fifo_enable
Counterrocketmq_throughput_in_totalbyte消息生产流入服务端的吞吐量(传输层消息大小)。
  • uid
  • instance_id
  • topic
  • message_type
Counterrocketmq_throughput_out_totalbyte消息消费从服务端流出的吞吐量(传输层消息大小)。
  • uid
  • instance_id
  • topic
  • consumer_group
  • fifo_enable
Counterrocketmq_internet_throughput_out_totalbyte消息收发所使用的公网下行流量(传输层消息大小)。
  • uid
  • instance_id
  • topic
  • message_type
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
  • uid
  • instance_id
  • topic
  • message_type
Gaugerocketmq_consumer_ready_messagesmessage已就绪消息量。

在服务端已就绪,可以被消费者消费的消息数量。

指标反映还未被消费者开始处理的消息规模。

  • uid
  • instance_id
  • topic
  • consumer_group
Gaugerocketmq_consumer_inflight_messagesmessage处理中消息量。

在消费者客户端正在处理,但客户端还未返回消费结果的消息的总量。

  • uid
  • instance_id
  • topic
  • consumer_group
Gaugerocketmq_consumer_queueing_latencyms已就绪消息排队时间。

最早一条就绪消息的就绪时间和当前时间差。

该时间反映消费者拉取消息的及时性。

  • uid
  • instance_id
  • topic
  • consumer_group
Gaugerocketmq_consumer_lag_latencyms消费处理延迟时间。

最早一条未消费完成的消息的就绪时间和当前时刻的时间差。

该时间反映消费者完成消息处理的及时性。

  • uid
  • instance_id
  • topic
  • consumer_group
Counterrocketmq_send_to_dlq_messagesmessage每分钟转为死信状态的消息量。

变成死信状态指的是消息达到最大重投次数后不再投递。

这些不再投递的消息会根据Group的死信策略配置保存至指定Topic或被丢弃。

  • uid
  • instance_id
  • topic
  • consumer_group
Gaugerocketmq_storage_sizebyte实例所使用的存储空间大小,包含所有文件的大小。
  • uid
  • instance_id

生产者Metrics指标

Metrics类型Metrics name单位指标说明Label
Histogramrocketmq_send_cost_timems调用消息发送接口成功的耗时分布情况。

分布区间如下:

  • le_1_ms
  • le_5_ms
  • le_10_ms
  • le_20_ms
  • le_50_ms
  • le_200_ms
  • le_500_ms
  • le_overflow
  • uid
  • instance_id
  • topic
  • client_id
  • invocation_status

消费者Metrics指标

Metrics类型Metrics name单位指标说明Label
Histogramrocketmq_process_timemsPushConsumer的消息处理耗时分布情况,包含处理成功和处理失败。

rocketmq_process_time=process end time-process start time

分布区间如下:

  • le_1_ms
  • le_5_ms
  • le_10_ms
  • le_100_ms
  • le_10000_ms
  • le_60000_ms
  • le_overflow
  • uid
  • instance_id
  • consumer_group
  • topic
  • client_id
  • invocation_status
Gaugerocketmq_consumer_cached_messagesmessagePushConsumer本地缓冲队列中的消息条数。
  • uid
  • instance_id
  • consumer_group
  • topic
  • client_id
Gaugerocketmq_consumer_cached_bytesbytePushConsumer本地缓冲队列中消息的总大小。
  • uid
  • instance_id
  • consumer_group
  • topic
  • client_id
Histogramrocketmq_await_timems消息在PushConsumer本地缓冲队列中的排队时间的分布情况。

rocketmq_await_time=process start time-arrival time

分布区间如下:

  • le_1_ms
  • le_5_ms
  • le_20_ms
  • le_100_ms
  • le_1000_ms
  • le_5000_ms
  • le_10000_ms
  • le_overflow
  • uid
  • instance_id
  • consumer_group
  • topic
  • client_id

计费说明

云消息队列 RocketMQ 版的仪表盘指标在阿里云ARMS Prometheus监控服务中属于基础指标,基础指标不收取费用。因此,使用仪表盘功能不收取费用。

更多信息,请参见基础指标说明按量计费

前提条件

  • 开通ARMS Prometheus监控服务
  • 创建服务关联角色
    • 角色名称:AliyunServiceRoleForOns
    • 角色策略名称:AliyunServiceRolePolicyForOns
    • 权限说明:允许云消息队列 RocketMQ 版使用该角色访问您的服务(云监控和ARMS服务)以完成监控报警和仪表盘相关功能。
    • 具体文档说明:服务关联角色

查看仪表盘

云消息队列 RocketMQ 版支持通过以下入口查看仪表盘:
  • 仪表盘页面:支持查看实例所有Topic和Group的各个指标。
  • 实例详情页面:主要展示指定实例的生产者概览信息、计费相关指标以及限流相关指标。
  • Topic 详情页面:主要展示指定Topic的生产相关指标以及生产者客户端相关指标。
  • Group 详情页面:主要展示指定Group的消费堆积相关指标以及消费者客户端相关指标。
  1. 登录云消息队列 RocketMQ 版控制台,在左侧导航栏单击实例列表
  2. 在顶部菜单栏选择地域,如华东1(杭州),然后在实例列表中,单击目标实例名称。
  3. 选择以下任一方式查看仪表盘。
    • 实例详情页面:在实例详情页单击仪表盘页签。
    • 仪表盘页面:在左侧导航栏单击仪表盘
    • Topic 详情页面:在左侧导航栏单击Topic 管理,在Topic列表中单击目标Topic名称,然后在Topic 详情页面单击仪表盘页签。
    • Group 详情页面:在左侧导航栏单击Group 管理,在Group列表中单击目标Group名称,然后在Group 详情页面单击仪表盘页签。