1. 程式人生 > >RabbitMQ訊息追蹤之rabbitmq_tracing

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實戰指南》以及關注微信公眾號:朱小廝的部落格。