仪表盘

借助于阿里云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

Gauge

rocketmq_instance_requests_max

count/s

实例每分钟消息收发TPS的最大值(不包含被限流的请求)。

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

  • uid

  • instance_id

Gauge

rocketmq_instance_requests_in_max

count/s

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

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

  • uid

  • instance_id

Gauge

rocketmq_instance_requests_out_max

count/s

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

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

  • uid

  • instance_id

Gauge

rocketmq_topic_requests_max

count/s

实例每分钟向Topic发送消息TPS的最大值(不包含被限流的请求)。

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

  • uid

  • instance_id

  • topic

Gauge

rocketmq_group_requests_max

count/s

实例中消费组每分钟消息消费TPS的最大值(不包含被限流的请求)。

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

  • uid

  • instance_id

  • consumer_group

Gauge

rocketmq_instance_requests_in_threshold

count/s

实例消息发送的限流阈值。

  • uid

  • instance_id

Gauge

rocketmq_instance_requests_out_threshold

count/s

实例消息消费的限流阈值。

  • uid

  • instance_id

Gauge

rocketmq_throttled_requests_in

count

消息发送的限流次数。

  • uid

  • instance_id

  • topic

  • message_type

Gauge

rocketmq_throttled_requests_out

count

消息消费的限流次数。

  • uid

  • instance_id

  • topic

  • fifo_enable

  • consumer_group

Gauge

rocketmq_instance_elastic_requests_max

count/s

实例消息收发TPS的最大弹性值。

  • uid

  • instance_id

Counter

rocketmq_requests_in_total

count

消息发送相关API的调用次数。

  • uid

  • instance_id

  • topic

  • message_type

Counter

rocketmq_requests_out_total

count

消息消费相关API的调用次数。

  • uid

  • instance_id

  • topic

  • consumer_group

  • fifo_enable

Counter

rocketmq_messages_in_total

message

生产者发送到服务端的消息数量。

  • uid

  • instance_id

  • topic

  • message_type

Counter

rocketmq_messages_out_total

message

服务端投递给消费者的消息数量,其中包含消费者处理中、处理成功和处理失败的消息。

  • uid

  • instance_id

  • topic

  • consumer_group

  • fifo_enable

Counter

rocketmq_throughput_in_total

byte

生产者发送到服务端的消息吞吐量。

  • uid

  • instance_id

  • topic

  • message_type

Counter

rocketmq_throughput_out_total

byte

服务端投递给消费者的消息吞吐量,其中消息数量包含消费者处理中、处理成功和处理失败的消息。

  • uid

  • instance_id

  • topic

  • consumer_group

  • fifo_enable

Counter

rocketmq_internet_throughput_out_total

byte

消息收发所使用的公网下行流量。

  • uid

  • instance_id

  • topic

  • message_type

Histogram

rocketmq_message_size

byte

消息大小的分布情况,发送成功时统计。

分布区间如下:

  • 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

Gauge

rocketmq_consumer_ready_messages

message

已就绪消息量。

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

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

  • uid

  • instance_id

  • topic

  • consumer_group

Gauge

rocketmq_consumer_inflight_messages

message

处理中消息量。

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

  • uid

  • instance_id

  • topic

  • consumer_group

Gauge

rocketmq_consumer_queueing_latency

ms

已就绪消息排队时间。

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

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

  • uid

  • instance_id

  • topic

  • consumer_group

Gauge

rocketmq_consumer_lag_latency

ms

消费处理延迟时间。

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

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

  • uid

  • instance_id

  • topic

  • consumer_group

Counter

rocketmq_send_to_dlq_messages

message

每分钟转为死信状态的消息量。

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

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

  • uid

  • instance_id

  • topic

  • consumer_group

Gauge

rocketmq_storage_size

byte

实例所使用的存储空间大小,包含所有文件的大小。

  • uid

  • instance_id

生产者Metrics指标

Metrics类型

Metrics name

单位

指标说明

Label

Histogram

rocketmq_send_cost_time

ms

调用消息发送接口成功的耗时分布情况。

分布区间如下:

  • 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

Histogram

rocketmq_process_time

ms

PushConsumer的消息处理耗时分布情况,包含处理成功和处理失败。

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

Gauge

rocketmq_consumer_cached_messages

message

PushConsumer本地缓冲队列中的消息条数。

  • uid

  • instance_id

  • consumer_group

  • topic

  • client_id

Gauge

rocketmq_consumer_cached_bytes

byte

PushConsumer本地缓冲队列中消息的总大小。

  • uid

  • instance_id

  • consumer_group

  • topic

  • client_id

Histogram

rocketmq_await_time

ms

消息在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 详情页面单击仪表盘页签。

仪表盘常见问题

如何获取仪表盘指标数据?

  1. 使用主账号登录ARMS控制台

  2. 在左侧导航栏单击接入中心

  3. 接入中心页面的搜索文本框输入RocketMQ,并单击搜索图标。

  4. 在搜索的结果中,选择需要接入的云服务(如阿里云 RocketMQ(5.0) 服务)。接入的具体操作,请参见步骤一:接入云服务监控数据

  5. 接入成功后,在左侧导航栏单击接入管理

  6. 云服务区域环境列表中,单击目标环境名称进入云服务环境详情页面。

  7. 组件管理页签的基本信息区域,单击默认指标存储后的云服务地域。

  8. 设置页签上,可以获取不同的数据访问方式。

如何将DashBoard的指标数据接入自建Grafana?

云消息队列 RocketMQ 版的所有指标数据已保存到您的阿里云可观测监控 Prometheus 版中,您可以参照如何获取仪表盘指标数据?中的步骤,接入云服务并获取环境名称和HTTP API地址后,通过API将云消息队列 RocketMQ 版的仪表盘的指标数据接入到本地自建Grafana中。具体操作,请参见使用HTTP API地址对接Grafana或自建应用中接入Prometheus数据

如何理解实例的TPS Max值?

TPS Max值:以1分钟为统计周期,每秒采样一次,统计结果取这60个采样值的最大值。

具体示例如下:

假设某实例在1分钟内生产60条消息(均为普通消息、每条4 KB大小),则该实例的生产速率为60条/分钟。

  • 如果这60条消息在第1秒发送完成,则该实例在这1分钟内每秒的TPS分别为60、0、0……0。

    实例TPS Max值=60 TPS。

  • 如果这60条消息在第1秒发送了40条,第2秒发送了20条,则该实例在这1分钟内每秒的TPS分别为40、20、0、0……0。

    实例TPS Max值=40 TPS。