本文介绍轻量消息队列(原MNS)全链路追踪解决方案的核心能力、Trace定义及数据接入方案。
概述
在分布式应用系统中,多个服务间的交互涉及复杂的网络通信和数据传输。一次请求往往需要多个内部服务间的相互调用才能完成,消息队列作为服务间异步通信的核心组件,承担着削峰填谷、应用解耦等关键职责。当消息在生产者、消息队列和消费者之间传输时,任何一个环节出现问题都可能导致消息丢失、延迟或重复消费,且问题根源难以快速定位。
轻量消息队列(原MNS)全链路追踪解决方案通过记录消息在整个生命周期中的完整传输过程,提供详细的日志和性能数据。轻量消息队列支持将符合OpenTelemetry标准的Trace数据集成至阿里云的链路追踪服务中,帮助您快速诊断分布式消息系统中的异常问题。
核心能力
生产消费审计:详细记录操作信息、执行时间和结果状态
多条件查询:支持根据消息ID、队列名称、时间范围等快速定位问题
标准化集成:遵循OpenTelemetry标准,与应用追踪数据无缝集成
异常检测:自动识别和标记异常链路,支持故障快速定位
Trace定义
轻量消息队列的追踪实现遵循OpenTelemetry Messaging Spans规范,同时扩展了消息队列特有的属性字段。
通用Messaging Span属性
轻量消息队列支持OpenTelemetry标准定义的通用消息追踪属性,详细定义请参考OpenTelemetry Messaging Spans规范。
主要包括:
messaging.system:消息系统标识messaging.operation.name:操作名称messaging.operation.type:操作类型messaging.destination.name:目标队列或主题名称messaging.message.id:消息IDerror.type:错误类型(当操作失败时)
轻量消息队列特有属性
除了标准属性外,轻量消息队列还提供以下特有的Span属性:
属性名称 | 类型 | 描述 | 示例值 | 要求级别 |
| string | 轻量消息队列的具体操作方法名 | SendMessage, ReceiveMessage, PublishMessage | 必需 |
| string | 请求的唯一标识符 | 6733433D43444218004FAED2 | 必需 |
| string | 发送到主题的消息标签 | order, payment | 可选 |
| int | 消息下次可见的时间戳(秒) | 1731413593 | 可选 |
| string | 接收消息时返回的接收句柄 | 8-oMWXHzxBZlgIlzuz8ztxz0z8MHzcT8Z3Zsy3y0 | 可选 |
| string | 删除或修改消息时使用的接收句柄 | 8-oMWXHzxBZlgIlzuz8ztxz0z8MHzcT8Z3Zsy3y0 | 可选 |
| string | 订阅类型 | HTTP, HTTPS, QUEUE | 可选 |
属性值说明
messaging.smq.operation支持的操作类型:
SendMessage:发送队列消息BatchSendMessage:批量发送队列消息ReceiveMessage:接收队列消息BatchReceiveMessage:批量接收队列消息DeleteMessage:删除队列消息BatchDeleteMessage:批量删除队列消息ChangeMessageVisibility:修改消息可见时间PeekMessage:查看队列消息BatchPeekMessage:批量查看队列消息PublishMessage:发布主题消息ConsumeMessage:消费订阅消息AckMessage:确认消息消费Notify:推送通知
messaging.smq.subscription.type支持的订阅类型:
HTTP:HTTP端点订阅HTTPS:HTTPS端点订阅QUEUE:队列订阅
使用限制
目前仅Java SDK客户端(>= 1.3.0)支持上报Trace数据至链路追踪服务。SDK版本信息,请参见版本记录。
Trace数据接入方案
轻量消息队列目前支持与应用实时监控服务 ARMS集成,实现追踪数据的统一收集、存储和分析。请参见什么是应用监控。
与ARMS应用监控集成
具体操作,请参见应用接入。