全部產品
Search
文件中心

ApsaraMQ for RabbitMQ:日志管理

更新時間:Jul 09, 2026

日誌管理功能能夠將雲訊息佇列 RabbitMQ 版執行個體的訊息作業日誌自動推送至您的Simple Log Service的LogStore。當訊息發送、消費或確認過程中出現異常時,您可以在Simple Log Service查詢並分析訊息的動作記錄,進行異常診斷。

前提條件

  • 建立雲訊息佇列 RabbitMQ 版執行個體。具體操作,請參見執行個體管理

  • 開通Simple Log Service並建立Project和Logstore。具體操作,請參見儲存資源層級關係說明

  • 根據控制台提示建立RabbitMQ服務關聯角色AliyunServiceRoleForAmqpLogDelivery並授權,用於將日誌推送到您的Simple Log Service中。

重要

如果您刪除Project、Logstore,或者將授予雲訊息佇列 RabbitMQ 版的許可權取消,日誌將無法正常推送。

計費說明

  • 雲訊息佇列 RabbitMQ 版

    使用日誌管理功能時,雲訊息佇列 RabbitMQ 版不收取費用。

  • Simple Log Service

    雲訊息佇列 RabbitMQ 版日誌被推送到Log Service後,Log Service會根據儲存空間、流量、請求數等進行收費。更多資訊,請參見按使用功能計費模式計費項目

日誌格式

日誌格式說明

參數

描述

Action

操作對應的要求方法。取值和描述請參見Action要求方法

Code

狀態代碼。 取值如下:

  • 200:請求成功。

  • 541:服務端內部錯誤。

  • 503:無效的命令。

  • 530:不允許的操作。

  • 404:資源不存在。

  • 406:預檢查失敗。

  • 403:許可權錯誤。

Info

請求成功時不顯示,顯示時表示錯誤狀態代碼資訊。

InstanceId

雲訊息佇列 RabbitMQ 版執行個體的ID。您可以在雲訊息佇列 RabbitMQ 版控制台的实例详情頁面或概览頁面查看。

Queue

訂閱或者訊息對應的Queue。

  • Action為PushMessage、BasicGet和DeleteMessage時,為訂閱的Queue。

  • Action為BasicReject時,為被拒絕的訊息對應的Queue。

  • Action為BasicNack時,為Nack訊息對應的Queue。

Property

訊息的屬性。取值和描述如下:

  • consumerTag:用於標識Queue的訂閱者。

  • deliveryTag:服務端標識某個Channel上的唯一訊息。

    說明

    Action為PushMessage、BasicGet、DeleteMessage或SendDlqMessage時,記錄該欄位。

RemoteAddress

發起該操作的用戶端地址。

  • Action為SendMessage時,為Producer用戶端地址。

  • Action為PushMessage時為Consumer用戶端地址:

  • Action為BasicAck時,為Consumer用戶端地址。

  • Action為DeleteMessage時,為Consumer用戶端地址。

說明

Action為SendDlqMessage時,不記錄該欄位。

ReqUid

帳號ID。

  • 如果您使用RAM使用者收發訊息,則為RAM使用者ID。

  • 如果您使用阿里雲帳號(主帳號)收發訊息,則為阿里雲帳號ID。

說明

Action為SendDlqMessage時,不記錄該欄位。

ResourceName

資源名稱。

  • messageId:使用SDK發送訊息時設定的Message ID。

  • exchange:Exchange名稱。您可以在雲訊息佇列 RabbitMQ 版控制台的Exchange管理頁面查看。

  • routingKey:您在使用SDK發送訊息時設定的Routing Key。

說明

Action為ConnectionOpen、ConnectionClose、ChannelOpen或ChannelClose時,不記錄該欄位。

VHost

Vhost名稱。您可以在雲訊息佇列 RabbitMQ 版控制台的Vhost管理頁面查看。

ConnectionId

服務端用於唯一標識Connection。

說明

Action為SendDlqMessage時,不記錄該欄位。

ChannelId

用戶端產生的Channel ID,用於標識當前Connection下的唯一Channel。

說明

Action為ConnectionOpen和ConnectionClose時,為null。

microtime

請求發生時間,單位:微秒。

_source_

該參數為Log ServiceSLS(Log Service)的保留欄位。如果您想瞭解該欄位的含義,請參見保留欄位

__tag__:__receive_time__

該參數為Log ServiceSLS的保留欄位。如果您想瞭解該欄位的含義,請參見保留欄位

__topic__

該參數為Log ServiceSLS的保留欄位。如果您想瞭解該欄位的含義,請參見保留欄位

Action要求方法

要求方法

說明

ConnectionOpen

開啟串連。

ConnectionClose

關閉串連。

ChannelOpen

開啟Channel。

ChannelClose

關閉Channel。

QueueDeclare

建立Queue。

QueueDelete

刪除Queue。

ExchangeDeclare

建立Exchange。

ExchangeDelete

刪除Exchange。

ExchangeBind

綁定路由到Exchange。

ExchangeUnBind

解除源Exchange到目標Exchange的綁定。

QueueBind

綁定路由到Queue。

QueueUnbind

解除源Exchange到目標Queue的x0005綁定。

SendMessage

生產者生產訊息。

PushMessage

服務端推送訊息。

BasicGet

用戶端拉取訊息。

BasicAck

ACK訊息。

BasicConsume

訂閱Queue。

BasicReject

Reject訊息。

BasicRecover

Recover訊息。

BasicNack

Nack訊息。

BasicQos

設定Consumer的流控。

QueuePurge

清空Queue中所有訊息。

DeleteMessage

用戶端調用BasicAck,服務端確認訊息被成功刪除。

SendDlqMessage

發送死信訊息。

操作步驟

雲訊息佇列 RabbitMQ 版執行個體配置LoggingBucket,將日誌推送到Simple Log Service

  1. 登入雲訊息佇列 RabbitMQ 版控制台,然後在左側導覽列選擇实例列表

  2. 实例列表頁面的頂部功能表列選擇地區,然後在執行個體列表中,單擊目標執行個體名稱。

  3. 在左側導覽列,單擊日志管理

  4. 我的資源卡片,單擊立即授权

    如果您已授予雲訊息佇列 RabbitMQ 版訪問Simple Log Service許可權,則無需操作。

  5. 日志管理頁面,從Project 名称列表,選擇已建立的Project,從Logstore 名称列表,選擇已建立的Logstore,然後單擊启用

  6. 登入Log Service控制台,開啟日誌索引並配置日誌欄位索引。具體操作請參見建立索引

  7. 在索引欄位中手動添加__tag__:__receive_time__欄位,並設定別名為timestamp。

實踐教程

統計各隊列訊息收發次數以定位高額費用

當控制台無法直接提供隊列維度精確計費明細時,可以利用Simple Log Service中的動作記錄,按 Queue 欄位彙總統計各隊列在指定時間段內的訊息收發次數,從而自主定位高消耗隊列,無需依賴後台人工提取資料。

操作步驟

  1. 登入Log Service控制台,進入已配置雲訊息佇列 RabbitMQ 版日誌推送的 Logstore。

  2. 在查詢分析欄輸入以下語句,設定目標時間範圍後單擊查詢/分析

    * | SELECT Queue,
          SUM(if(Action='SendMessage', 1, 0)) AS "發送次數",
          SUM(if(Action='PushMessage', 1, 0)) AS "推送次數",
          SUM(if(Action='BasicGet', 1, 0)) AS "拉取次數",
          COUNT(*) AS "總操作次數"
      WHERE Action IN ('SendMessage', 'PushMessage', 'BasicGet') AND Code=200
      GROUP BY Queue
      ORDER BY "總操作次數" DESC
      LIMIT 100
  3. 查詢結果按總操作次數降序排列,即可定位訊息收發量最高的隊列。

說明

SendMessage 對應生產者發送訊息,PushMessage 對應服務端推送訊息,BasicGet 對應用戶端拉取訊息。上述查詢僅統計狀態代碼為 200(成功)的操作。如需調整統計範圍(例如包含失敗操作或增加其他 Action 類型),可修改 WHERE 子句中的篩選條件。

常見問題

為什麼用戶端日誌列印時間與雲訊息佇列 RabbitMQ 版服務端日誌顯示的投遞成功時間存在差異?

建議按以下步驟排查:

  1. 確認服務端投遞是否正常:在Simple Log Service中查詢服務端動作記錄,篩選 Action=PushMessageAction=DeleteMessage 的記錄,查看 Code 欄位是否均為 200,確認服務端已正常完成投遞且無異常延遲。

  2. 若服務端日誌正常,排查用戶端環境:用戶端記錄時間晚於服務端實際投遞時間,通常由用戶端自身環境因素導致。請重點排查以下情況:

    • 網路波動:用戶端與服務端之間存在網路抖動或丟包,導致 ACK 響應延遲到達用戶端。

    • CPU 高負載:用戶端 CPU 佔用率過高,訊息處理線程因得不到及時調度而產生延遲。

    • 記憶體頻繁 Full GC:JVM 發生 Full GC 時所有線程暫停(Stop-the-World),調用 convertAndSend 等方法後的處理耗時顯著增加,導致用戶端記錄的完成時間晚於服務端實際投遞時間。

收到雲訊息佇列 RabbitMQ 版警示日誌或警示通知後如何分析原因?

收到警示日誌時,建議按以下步驟定位根因:

  1. 查看日誌中的控制台連結:警示日誌通常包含關聯的控制台地址(例如 cis.console.alibabacloud.com 相關連結),單擊該連結直接進入對應的任務詳情頁或叢集監控頁。

  2. 查看任務詳情和指標資料:在任務詳情頁查看詳細的警示上下文,結合叢集監控指標(如串連數、訊息堆積量、網路流量等),定位觸發警示的根本原因。

  3. 關聯動作記錄深入分析:如需進一步排查,可在Simple Log Service中,以警示發生時間為基準,查詢對應隊列或執行個體的動作記錄,結合 Code 欄位和 Action 欄位分析異常原因。常見觸發情境包括:訊息大量堆積、消費者串連中斷、頻繁建立或刪除資源等。