本文介紹輕量訊息佇列(原MNS)全鏈路追蹤解決方案的核心能力、Trace定義及資料接入方案。
概述
在分布式應用系統中,多個服務間的互動涉及複雜的網路通訊和資料轉送。一次請求往往需要多個內部服務間的相互調用才能完成,訊息佇列作為服務間非同步通訊的核心組件,承擔著削峰填穀、應用解耦等關鍵職責。當訊息在生產者、訊息佇列和消費者之間傳輸時,任何一個環節出現問題都可能導致訊息丟失、延遲或重複消費,且問題根源難以快速定位。
輕量訊息佇列(原MNS)全鏈路追蹤解決方案通過記錄訊息在整個生命週期中的完整傳輸過程,提供詳細的日誌和效能資料。輕量訊息佇列支援將符合OpenTelemetry標準的TraceData Integration至阿里雲的鏈路追蹤服務中,協助您快速診斷分布式訊息系統中的異常問題。
核心能力
生產消費審計:詳細記錄操作資訊、執行時間和結果狀態
多條件查詢:支援根據訊息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應用監控整合
具體操作,請參見應用接入。