在分布式应用系统中,多个服务间的交互涉及复杂的网络通信和数据传输,往往一次请求需要多个内部服务间的相互调用才能完成,任何一个环节出现问题都可能导致外部服务任务执行失败或延时,且很难快速定位问题根源。链路追踪功能可在多个服务进行交互时记录请求在系统的传输过程,并提供详细的日志和性能数据,云消息队列 RocketMQ 版支持将符合OpenTelemetry标准的Trace数据集成至阿里云的链路追踪服务中,帮助您快速诊断异常问题。
Trace定义
云消息队列 RocketMQ 版的Trace数据符合OpenTelemetry标准下,消息领域的span语义约定。详细信息,请参见opentelemetry-specification。
Messaging span定义
Messaging span定义了各span之间的拓扑关系,包括消息发送、接收和处理的不同span之间的父子关系及链接关系。更多信息,请参见Semantic Conventions of Messaging。
云消息队列 RocketMQ 版涉及的span如下:
span | 说明 |
send | 消息的发送过程。span以一次发送行为开始,以发送成功、失败或抛异常结束。 消息发送的内部重试会被记录成多条span。 |
receive | 消费者接收消息的长轮询过程,与长轮询的生命周期保持一致。 receive span默认不启用,若要启用,则需要在运行时增加 |
process | PushConsumer中 |
以上几个span的关系如下:
receive span未启用时:process span为send span的子级。
receive span启用时:process span为receive span的子级,同时会链接到send span。
Messaging attributes定义
消息领域的span语义约定中规定了随span携带的通用属性,包括:
messaging.message.id:消息ID,消息的唯一标识符。
messaging.destination:消息发送的目的地,通常是指某个队列或主题。
messaging.operation:对消息的操作类型,例如,发送、接收、确认等。
更多属性,请参见Messaging attributes。
对于不同的消息产品,会有自己特定的行为和属性。云消息队列 RocketMQ 版特定的属性如下:
属性 | 取值类型 | 说明 |
messaging.rocketmq.client_group | string | 消费者的负载均衡组。 |
messaging.rocketmq.client_id | string | 客户端的唯一标识符。 |
messaging.rocketmq.message.delivery_timestamp | int | 定时消息的定时时间。 |
messaging.rocketmq.message.group | string | 顺序消息的Group分组。 |
messaging.rocketmq.message.type | string | 消息类型。取值如下: |
messaging.rocketmq.message.tag | string | 消息的过滤标签。消费者可通过Tag对消息进行过滤,仅接收指定标签的消息。 |
messaging.rocketmq.message.keys | string[] | 消息的索引键,可通过设置不同的Key区分消息和快速查找消息。 |
使用限制
目前仅Java SDK客户端支持上报Trace数据至链路追踪服务。SDK版本信息,请参见Java SDK版本说明。
事务消息仅支持追踪消息生产相关的Trace数据,暂不支持追踪消息提交或消息回滚的Trace数据。
仅支持追踪PushConsumer消费者相关的Trace数据,暂不支持SimpleConsumer相关的Trace数据。更多信息,请参见消费者分类。
RocketMQ Trace数据集成方案
云消息队列 RocketMQ 版需要将符合OpenTelemetry标准的Trace数据上报至链路追踪的服务端,由链路追踪的服务端完成Trace数据的聚合计算及可视化展示。
链路追踪服务端您可以选择自行搭建,也可以选择阿里云提供的链路追踪服务,云消息队列 RocketMQ 版支持将Trace数据集成至阿里云日志服务链路追踪和ARMS链路追踪服务中。
SLS Trace全链路解决方案
集成操作:请参见SLS OpenTelemetry Trace接入。
Demo示例:
RocketMQ Trace指标大盘Demo:展示利用Trace数据转化得到的消息发送延时、发送成功率、消费成功率、端到端时延等指标。
RocketMQ Trace分析Demo:可以根据Trace指标大盘得到的Message ID或Trace ID,对异常调用进行进一步分析。
ARMS Trace全链路解决方案
具体操作,请参见ARMS OpenTelemetry Trace接入。