RabbitMQ訊息追蹤之rabbitmq_tracing
rabbitmq_tracing外掛相當於Firehose的GUI版本,它同樣能跟蹤RabbitMQ中訊息的流入流出情況。rabbitmq_tracing外掛同樣會對流入流出的訊息做封裝,然後將封裝後的訊息日誌存入相應的trace檔案之中。
可以使用rabbitmq-plugins enable rabbitmq_tracing命令來啟動rabbitmq_tracing外掛。
[root@node3 opt]# rabbitmq-plugins enable rabbitmq_tracing
The following plugins have been enabled:
rabbitmq_tracing
Applying plugin configuration to rabbit@node3... started 1 plugin.
對應的關閉外掛的命令是:rabbitmq-plugins disable rabbitmq_tracing。
在Web管理介面 “Admin”右側原本只有”Users”、”Virtual Hosts”以及”Policies“這個三Tab項,在新增rabbitmq_tracing外掛之後,會多出”Tracing”這一項內容:
可以在此Tab項中新增相應的trace:
在新增完trace之後,會根據匹配的規則將相應的訊息日誌輸出到對應的trace檔案之中,檔案的預設路徑為/var/tmp/rabbitmq-tracing。可以在頁面中直接點選“Trace log files”下面的列表直接檢視對應的日誌檔案。
如下圖,我們添加了兩個trace任務。
與其相對應的trace檔案如下:
再新增完相應的trace任務之後,會發現多了兩個佇列:
就以第一個佇列amq.gen-MoyvSKQau9udetl4lUdQZw而言,其所繫結的交換器就是amq.rabbitmq.log。
由此可以看出整個rabbitmq_tracing和Firehose在實現上如出一轍,只不過rabbitmq_tracing的方式比Firehose多了一層GUI的包裝,更容易使用和管理。
再來補充說明上圖中“Name”,“Format”,“Max payload bytes”,”Pattern”的具體含義。“Name”,顧名思義,就是為你所要即將建立的trace任務取個名稱。
“Format”表示輸出的訊息日誌格式,有Text和JSON兩種,Text格式的日誌方便人類閱讀,JSON的方便程式解析。
Text格式的訊息日誌參考如下:
================================================================================
2017-10-24 9:37:04:412: Message published
Node: [email protected]
Connection: <[email protected].3.3552.0>
Virtual host: /
User: root
Channel: 1
Exchange: exchange
Routing keys: [<<"rk">>]
Routed queues: [<<"queue">>]
Properties: [{<<"delivery_mode">>,signedint,1},{<<"headers">>,table,[]}]
Payload:
trace test payload.
JSON格式的訊息日誌參考如下:
{
"timestamp": "2017-10-24 9:37:04:412",
"type": "published",
"node": "[email protected]",
"connection": "<[email protected]>",
"vhost": "/",
"user": "root",
"channel": 1,
"exchange": "exchange",
"queue": "none",
"routed_queues": [
"queue"
],
"routing_keys": [
"rk"
],
"properties": {
"delivery_mode": 1,
"headers": {}
},
"payload": "dHJhY2UgdGVzdCBwYXlsb2FkLg=="
}
JSON格式的payload(訊息體)預設會採用Base64進行編碼,如上面的“trace test payload.”會被編碼成“dHJhY2UgdGVzdCBwYXlsb2FkLg==”。
“Max payload bytes”表示每條訊息的最大限制,單位為B。比如設定了了此值為10,那麼當有超過10B的訊息經過RabbitMQ流轉時,在記錄到trace檔案的時候會被截斷。如上text日誌格式中“trace test payload.”會被截斷成“trace test”。
“Pattern”用來設定匹配的模式,和Firehose的類似。如“#”匹配所有訊息流入流出的情況,即當有客戶端生產訊息或者消費訊息的時候,會把相應的訊息日誌都記錄下來;“publish.#”匹配所有訊息流入的情況;“deliver.#”匹配所有訊息流出的情況。
歡迎支援《RabbitMQ實戰指南》以及關注微信公眾號:朱小廝的部落格。