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