本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
輕量消息隊列(原 MNS)的日志管理功能將消息請求日志推送到日志服務 SLS(Simple Log Service),然后可以使用SLS的能力查詢和分析請求日志功能來定位線上問題。
應用場景
您在收發消息的過程中,是否遇到過以下問題:
消息成功發送到隊列,但消費端收不到消息,消息去哪兒了?
消息被誰消費了?消費了幾次?
消費端宕機了,消費失敗的消息什么時候可以再次被消費?
消息發布到主題,Endpoint卻遲遲收不到消息?
這些問題可以通過輕量消息隊列(原 MNS)的日志管理功能解決,方法如下:
將日志推送到SLS,在控制臺查看完整消息軌跡。
使用官網提供查詢工具,指定相應參數即可查看消息的處理日志。
費用說明
輕量消息隊列(原 MNS)不針對日志管理功能收取額外費用。
輕量消息隊列(原 MNS)將日志推送到SLS,對應服務會根據存儲空間、流量、請求數等進行收費,詳情請參見計費概述。
隊列日志格式說明
隊列消息操作日志是指操作隊列消息所產生的日志,例如發送消息、消費消息、刪除消息等操作。一條消息操作日志中包含多個字段,每個字段都有特定的含義。根據操作的不同,消息操作日志所包含的字段也不相同。以下分別介紹各個字段的含義和不同操作所包含的字段信息。
日志字段解析
一條消息操作日志中包含多個字段,各個字段的含義如下:
字段
含義
Time
本次操作的發生時間。
MessageId
消息的MessageId,標識本次操作處理的消息。
QueueName
本次操作對應的隊列名稱。
AccountId
本次操作對應隊列的賬號。
RemoteAddress
發起該操作的客戶端地址。
NextVisibleTime
該操作執行完成后,這條消息的下次可見時間。
ReceiptHandleInRequest
客戶端執行該操作時傳入的ReceiptHandle參數。
ReceiptHandleInResponse
該操作執行完成后,返回客戶端的ReceiptHandle。
ProcessTime
本次操作的處理時間。
RequestId
本次執行的任務ID。
Action
表示動作,例如:刪除、發送等。
各個操作的字段列表
不同操作的日志包含的字段信息各不相同,具體每個操作包含的字段如下:
操作
Time
QueueName
AccountId
MessageId
RemoteAddress
NextVisibleTime
ReceiptHandleInResponse
ReceiptHandleInRequest
SendMessage/BatchSendMessage
有
有
有
有
有
有
無
無
PeekMessage/BatchPeekMessage
有
有
有
有
有
無
無
無
ReceiveMessage/BatchReceiveMessage
有
有
有
有
有
有
有
無
ChangeMessageVisibility
有
有
有
有
有
有
有
有
DeleteMessage/BatchDeleteMessage
有
有
有
有
有
有
無
有
主題日志格式說明
主題消息操作日志是指操作主題消息產生的日志,主要有兩類:發布消息和推送消息。以下分別介紹主題消息操作日志各個字段的含義,以及不同的操作所包含的字段信息。
日志字段解析
一條消息操作日志中包含多個字段,各個字段的含義如下:
字段
含義
Time
本次操作的發生時間。
MessageId
消息的MessageId,標識本次操作處理的消息。
TopicName
本次操作對應的主題名稱。
SubscriptionName
本次操作對應的訂閱名稱。
AccountId
本次操作對應主題的賬號。
RemoteAddress
發起該操作的客戶端地址。
NotifyStatus
輕量消息隊列(原 MNS)將消息推送給用戶時,用戶返回的狀態碼或者相應的出錯信息。
ProcessTime
本次操作的處理時間。
MessageTag
設置的消息標簽。
RequestId
本次執行的任務ID。
Action
表示動作,例如:刪除、發送等。
各個操作的字段列表
不同操作的日志包含的字段信息各不相同,具體每個操作包含的字段如下:
操作
Time
MessageId
TopicName
SubscriptionName
AccountId
RemoteAddress
NotifyStatus
SubscriptionName
PublishMessage
有
有
有
無
有
有
無
無
Notify
有
有
有
有
有
無
有
有
NotifyStatus
NotifyStatus是推送消息日志特有的字段,可以幫助您排查輕量消息隊列(原 MNS)推送消息到Endpoint失敗的原因。 根據不同的NotifyStatus,您可以按照下表建議的處理方法進行處理。
錯誤碼
描述
建議處理方法
2xx
消息推送成功。
無。
其它HTTP狀態碼
消息推送給用戶,Endpoint返回了非2xx的狀態碼。
檢查Endpoint端處理邏輯。
InvalidHost
訂閱指定的Endpoint不合法。
確認訂閱中Endpoint是否真實有效,可使用curl或telnet進行確認。
ConnectTimeout
連接訂閱指定的Endpoint超時。
確認訂閱中Endpoint當前是否可訪問,可使用curl或telnet進行確認。
ConnectFailure
連接訂閱指定的Endpoint失敗。
確認訂閱中Endpoint當前是否可訪問,可使用curl或telnet進行確認。
UnknownError
未知錯誤。
請聯系輕量消息隊列(原 MNS)技術人員支持。
日志管理操作
如需使用日志功能,請先完成以下操作:
已創建日志服務Project和Logstore。具體操作,請參見創建項目Project和創建Logstore。
您的消息服務操作日志只能被推送到相同地域下的日志服務Project中。
已授權消息服務使用AliyunMNSLoggingRole角色導出日志。
單擊云資源訪問授權,根據提示完成授權。
警告請勿取消授權或刪除RAM角色,否則將導致輕量消息隊列(原 MNS)日志無法正常推送到日志服務。
開啟日志功能
開啟隊列的日志功能
在左側導航欄,單擊隊列列表。
在頂部菜單欄,選擇地域。
在隊列列表頁面,找到目標隊列,在其右側操作列選擇更多>編輯。
在編輯隊列參數面板中,啟用日志功能選擇是。
在隊列列表頁面,目標隊列的日志功能列顯示為已啟用。
開啟主題的日志功能
在左側導航欄,單擊主題列表。
在頂部菜單欄,選擇地域。
在主題列表頁面,找到目標主題,在其右側操作列單擊編輯。
在編輯主題參數面板中,啟用日志功能選擇是。
在主題列表頁面,目標主題的日志功能列顯示為已啟用。
推送日志到日志服務
在左側導航欄,單擊日志管理。
在頂部菜單欄,選擇地域。
在日志管理頁面,在選擇目標配置向導頁面選擇日志服務(SLS)。
在配置目標配置向導頁面,選擇Project名稱和Logstore名稱,然后單擊啟用。
在日志管理頁面,顯示已配置的Project和Logstore。
查看日志
日志分析示例
查詢隊列消息的軌跡
本示例要查詢隊列消息的消息軌跡,即輸入隊列名稱和消息ID,格式為$QueueName and $MessageId
,例如log and EED287A265726135146E6A9CADC8XXXX
。
查詢結果如下所示,記錄了某條消息從發送到接收的過程。
查詢主題消息的消息軌跡
本示例要查詢主題消息的消息軌跡,即輸入主題名稱和MessageId,查詢語句格式為$TopicName and $MessageId
,例如logtest and 8798453B65727FC6433E6AB4F746XXXX
。
查詢結果如下圖所示,記錄了某條消息從發送到通知的過程。
查詢隊列消息發送量
本示例要查詢隊列消息發送量,即輸入隊列名稱和發送操作,查詢語句格式為$QueueName and (SendMessage or BatchSendMessage)
,例如log and (SendMessage or BatchSendMessage)
。
查詢結果如下所示,當前查詢時段內,生產者向log隊列發送了3條隊列消息。
查詢主題消息發送量
本示例要查詢主題消息發送量,即輸入主題名稱和發布操作,查詢語句格式為$TopicName and PublishMessage
,例如logtest and PublishMessage
。
查詢結果如下圖所示,當前查詢時段內,生產者向logtest主題發送了3條消息。
查詢隊列消息消費量
本示例要查詢隊列消息消費量,即輸入隊列名稱和消費操作,查詢語句格式為$QueueName and (ReceiveMessage or BatchReceiveMessage)
,例如log and (ReceiveMessage or BatchReceiveMessage)。
查詢結果如下所示,當前查詢時段內,log隊列中有12條消息被消費。
查詢隊列消息刪除量
本示例要查詢隊列消息刪除量,即輸入隊列名稱和刪除操作,查詢語句格式為$QueueName and (DeleteMessage or BatchDeleteMessage)
,例如log and (DeleteMessage or BatchDeleteMessage)
。
查詢結果如下所示,當前查詢時段內,61條log隊列消息被刪除。
查詢某個客戶端消息處理量
本示例要查詢某個客戶端消息處理量,即輸入客戶端IP地址,查詢語句格式為$ClientIP
,例如10.10.10.0
。
如果您要查詢某個客戶端的某類操作日志,可使用多個關鍵字組合方式,例如$ClientIP and (SendMessage or BatchSendMessage)
。
查詢結果如下圖所示,當前查詢時段內,該客戶端處理了66條消息。