日誌管理功能能夠將雲訊息佇列 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 | 狀態代碼。 取值如下:
|
Info | 請求成功時不顯示,顯示時表示錯誤狀態代碼資訊。 |
InstanceId | 雲訊息佇列 RabbitMQ 版執行個體的ID。您可以在雲訊息佇列 RabbitMQ 版控制台的实例详情頁面或概览頁面查看。 |
Queue | 訂閱或者訊息對應的Queue。
|
Property | 訊息的屬性。取值和描述如下:
|
RemoteAddress | 發起該操作的用戶端地址。
說明 Action為SendDlqMessage時,不記錄該欄位。 |
ReqUid | 帳號ID。
說明 Action為SendDlqMessage時,不記錄該欄位。 |
ResourceName | 資源名稱。
說明 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的 |
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。
登入雲訊息佇列 RabbitMQ 版控制台,然後在左側導覽列選擇实例列表。
在实例列表頁面的頂部功能表列選擇地區,然後在執行個體列表中,單擊目標執行個體名稱。
在左側導覽列,單擊日志管理。
在我的資源卡片,單擊立即授权。
如果您已授予雲訊息佇列 RabbitMQ 版訪問Simple Log Service許可權,則無需操作。
在日志管理頁面,從Project 名称列表,選擇已建立的Project,從Logstore 名称列表,選擇已建立的Logstore,然後單擊启用。
登入Log Service控制台,開啟日誌索引並配置日誌欄位索引。具體操作請參見建立索引。
在索引欄位中手動添加
__tag__:__receive_time__欄位,並設定別名為timestamp。
實踐教程
統計各隊列訊息收發次數以定位高額費用
當控制台無法直接提供隊列維度精確計費明細時,可以利用Simple Log Service中的動作記錄,按 Queue 欄位彙總統計各隊列在指定時間段內的訊息收發次數,從而自主定位高消耗隊列,無需依賴後台人工提取資料。
操作步驟
登入Log Service控制台,進入已配置雲訊息佇列 RabbitMQ 版日誌推送的 Logstore。
在查詢分析欄輸入以下語句,設定目標時間範圍後單擊查詢/分析:
* | 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查詢結果按總操作次數降序排列,即可定位訊息收發量最高的隊列。
SendMessage 對應生產者發送訊息,PushMessage 對應服務端推送訊息,BasicGet 對應用戶端拉取訊息。上述查詢僅統計狀態代碼為 200(成功)的操作。如需調整統計範圍(例如包含失敗操作或增加其他 Action 類型),可修改 WHERE 子句中的篩選條件。
常見問題
為什麼用戶端日誌列印時間與雲訊息佇列 RabbitMQ 版服務端日誌顯示的投遞成功時間存在差異?
建議按以下步驟排查:
確認服務端投遞是否正常:在Simple Log Service中查詢服務端動作記錄,篩選
Action=PushMessage或Action=DeleteMessage的記錄,查看 Code 欄位是否均為 200,確認服務端已正常完成投遞且無異常延遲。若服務端日誌正常,排查用戶端環境:用戶端記錄時間晚於服務端實際投遞時間,通常由用戶端自身環境因素導致。請重點排查以下情況:
網路波動:用戶端與服務端之間存在網路抖動或丟包,導致 ACK 響應延遲到達用戶端。
CPU 高負載:用戶端 CPU 佔用率過高,訊息處理線程因得不到及時調度而產生延遲。
記憶體頻繁 Full GC:JVM 發生 Full GC 時所有線程暫停(Stop-the-World),調用
convertAndSend等方法後的處理耗時顯著增加,導致用戶端記錄的完成時間晚於服務端實際投遞時間。
收到雲訊息佇列 RabbitMQ 版警示日誌或警示通知後如何分析原因?
收到警示日誌時,建議按以下步驟定位根因:
查看日誌中的控制台連結:警示日誌通常包含關聯的控制台地址(例如
cis.console.alibabacloud.com相關連結),單擊該連結直接進入對應的任務詳情頁或叢集監控頁。查看任務詳情和指標資料:在任務詳情頁查看詳細的警示上下文,結合叢集監控指標(如串連數、訊息堆積量、網路流量等),定位觸發警示的根本原因。
關聯動作記錄深入分析:如需進一步排查,可在Simple Log Service中,以警示發生時間為基準,查詢對應隊列或執行個體的動作記錄,結合 Code 欄位和 Action 欄位分析異常原因。常見觸發情境包括:訊息大量堆積、消費者串連中斷、頻繁建立或刪除資源等。