全部產品
Search
文件中心

Simple Message Queue (formerly MNS):日誌管理

更新時間:Sep 03, 2024

輕量訊息佇列(原 MNS)的日誌管理功能將訊息請求日誌推送到Simple Log Service (SLS),然後可以使用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)技術人員支援。

日誌管理操作

如需使用日誌功能,請先完成以下操作:

  • 已建立Log ServiceProject和Logstore。具體操作,請參見建立專案Project建立Logstore

    您的Message Service動作記錄只能被推送到相同地區下的Log ServiceProject中。

  • 已授權Message Service使用AliyunMNSLoggingRole角色匯出日誌。

    單擊雲資源訪問授權,根據提示完成授權。

    警告

    請勿取消授權或刪除RAM角色,否則將導致輕量訊息佇列(原 MNS)日誌無法正常推送到Log Service。

開啟日誌功能

開啟隊列的日誌功能

  1. 登入輕量訊息佇列(原 MNS)控制台

  2. 在左側導覽列,單擊隊列列表

  3. 在頂部功能表列,選擇地區。

  4. 隊列列表頁面,找到目標隊列,在其右側操作列選擇更多>編輯

  5. 編輯隊列參數面板中,啟用日誌功能選擇

    隊列列表頁面,目標隊列的日誌功能列顯示為已啟用

開啟主題的日誌功能

  1. 登入輕量訊息佇列(原 MNS)控制台

  2. 在左側導覽列,單擊主題列表

  3. 在頂部功能表列,選擇地區。

  4. 主題列表頁面,找到目標主題,在其右側操作列單擊編輯

  5. 編輯主題參數面板中,啟用日誌功能選擇

    主題列表頁面,目標主題的日誌功能列顯示為已啟用

推送日誌到Log Service

操作步驟

  1. 登入輕量訊息佇列(原 MNS)控制台

  2. 在左側導覽列,單擊日誌管理

  3. 在頂部功能表列,選擇地區。

  4. 日誌管理頁面,在選擇目標設定精靈頁面選擇Log Service(SLS)

  5. 配置目標設定精靈頁面,選擇Project名稱Logstore名稱,然後單擊啟用

    日誌管理頁面,顯示已配置的Project和Logstore。

查看日誌

操作步驟

  1. 登入Log Service控制台

  2. 在Project列表地區,單擊目標Project。

    image

  3. 在控制台左側,單擊日誌儲存,在日誌庫列表中單擊目標Logstore。

    image

  4. 輸入查詢語句,然後單擊最近15分鐘,設定查詢的時間範圍。更多資訊,請參見查詢和分析日誌

日誌分析樣本

查詢隊列訊息的軌跡

本樣本要查詢隊列訊息的訊息軌跡,即輸入隊列名稱和訊息ID,格式為$QueueName and $MessageId,例如log and EED287A265726135146E6A9CADC8XXXX

查詢結果如下所示,記錄了某條訊息從發送到接收的過程。

image

查詢主題訊息的訊息軌跡

本樣本要查詢主題訊息的訊息軌跡,即輸入主題名稱和MessageId,查詢語句格式為$TopicName and $MessageId,例如logtest and 8798453B65727FC6433E6AB4F746XXXX

查詢結果如下圖所示,記錄了某條訊息從發送到通知的過程。

image

查詢隊列訊息發送量

本樣本要查詢隊列訊息發送量,即輸入隊列名稱和發送操作,查詢語句格式為$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條訊息。查看某個用戶端訊息處理量