RabbitMQ 簡介
RabbitMQ 是一個開源的消息代理和隊列服務器,用 Erlang 語言編寫,支持多種客戶端。它通過使用交換機(Exchanges)、隊列(Queues)和綁定(Bindings)來路由消息,提供靈活的路由功能。RabbitMQ 支持多種消息協議,包括 AMQP 等,使其能夠輕松地與多種應用程序集成。
RabbitMQ 作為一款流行的消息隊列中間件,其監控對于確保系統的穩定性和性能至關重要。監控能夠幫助我們及時發現并解決潛在問題,避免對用戶造成影響;通過監控數據,我們可以優化性能,提升系統的處理能力和響應速度;同時,監控還能揭示系統的行為趨勢,輔助我們預測未來的系統需求,合理規劃資源和擴容,增強系統的可伸縮性和穩定性。此外,監控還包括對 RabbitMQ 的健康檢查,如 Erlang VM 的運行狀態,以及對 RabbitMQ 特有的指標和操作系統指標的監控,例如套接字描述符使用量、排隊消息總數、節點間通信流量率、CPU 利用率和內存使用量等。
觀測云
觀測云是一款專為 IT 工程師打造的全鏈路可觀測產品,它集成了基礎設施監控、應用程序性能監控和日志管理,為整個技術棧提供實時可觀察性。這款產品能夠幫助工程師全面了解端到端的用戶體驗追蹤,了解應用內函數的每一次調用,以及全面監控云時代的基礎設施。此外,觀測云還具備快速發現系統安全風險的能力,為數字化時代提供安全保障。
前置條件
- RabbitMQ 版本 >=?
3.8.14
- 安裝?
rabbitmq
?以?Ubuntu
?為例
sudo apt-get update
sudo apt-get install rabbitmq-server
sudo service rabbitmq-server start
- 開啟?
REST API plug-ins
sudo rabbitmq-plugins enable rabbitmq_management
- 創建 user,比如:
sudo rabbitmqctl add_user guance <SECRET>
sudo rabbitmqctl set_permissions -p / guance "^aliveness-test$" "^amq\.default$" ".*"sudo rabbitmqctl set_user_tags guance monitoring
安裝 DataKit
如果未部署 DataKit 可參考如下操作提前部署。
登錄觀測云控制臺,點擊「集成」 -「DataKit」 - 「Linux」,拷貝第 2 步中的安裝命令。
在 RabbitMQ 的節點上復制該安裝命令,安裝 DataKit。
安裝完成后,DataKit 會提示您使用?datakit monitor
?來檢查 DataKit 的運行狀態,如下圖所示:
開啟 RabbitMQ 采集器
進入 DataKit 安裝目錄下的?/usr/local/datakit/conf.d/rabbitmq
?目錄,復制?rabbitmq.conf.sample
?并命名為?rabbitmq.conf
。示例如下:
[[inputs.rabbitmq]]# rabbitmq url ,requiredurl = "http://localhost:15672"# rabbitmq user, requiredusername = "guest"# rabbitmq password, requiredpassword = "guest"# ##(optional) collection interval, default is 30s# interval = "30s"## Optional TLS Config# tls_ca = "/xxx/ca.pem"# tls_cert = "/xxx/cert.cer"# tls_key = "/xxx/key.key"## Use TLS but skip chain & host verificationinsecure_skip_verify = false## Set true to enable electionelection = true# [inputs.rabbitmq.log]# files = []# #grok pipeline script path# pipeline = "rabbitmq.p"[inputs.rabbitmq.tags]# some_tag = "some_value"# more_tag = "some_other_value"# ...
配置完成后重啟 DataKit 即可。
# 終端執行命令
datakit service -R
指標介紹
Metric | Description | Unit |
---|---|---|
message_ack_count | 客戶端確認的消息數量 | count |
message_ack_rate | 每秒客戶端確認的消息速率 | percent |
message_confirm_count | 確認的消息數量 | count |
message_confirm_rate | 每秒確認的消息速率 | percent |
message_deliver_get_count | 確認模式下交付給消費者的消息總數,無確認模式下交付給消費者的消息總數,確認模式下響應basic.get的消息總數,以及無確認模式下響應basic.get的消息總數 | count |
message_deliver_get_rate | 確認模式下交付給消費者的消息速率,無確認模式下交付給消費者的消息速率,確認模式下響應basic.get的消息速率,以及無確認模式下響應basic.get的消息速率 | percent |
message_publish_count | 發布的消息數量 | count |
message_publish_in_count | 從通道發布到此概覽的消息數量 | count |
bindings_count | 特定隊列的綁定數量 | count |
consumer_utilization | 隊列消費者可以接收新消息的時間比例 | percent |
consumers | 消費者數量 | count |
head_message_timestamp | 隊列頭部消息的時間戳,以毫秒顯示 | msec |
memory | 與隊列關聯的Erlang進程消耗的內存字節,包括棧、堆和內部結構 | B |
message_ack_count | 隊列中交付給客戶端并被確認的消息數量 | count |
message_ack_rate | 每秒交付給客戶端并被確認的消息數量 | percent |
message_deliver_count | 確認模式下交付給消費者的消息數量 | count |
message_deliver_get_count | 隊列中確認模式下交付給消費者的消息總數,無確認模式下交付給消費者的消息總數,確認模式下響應basic.get的消息總數,以及無確認模式下響應basic.get的消息總數 | count |
message_deliver_get_rate | 隊列中確認模式下交付給消費者的消息速率,無確認模式下交付給消費者的消息速率,確認模式下響應basic.get的消息速率,以及無確認模式下響應basic.get的消息速率 | percent |
message_deliver_rate | 確認模式下交付給消費者的消息速率 | percent |
message_publish_count | 隊列中發布的消息數量 | count |
message_publish_rate | 每秒發布的消息數量 | percent |
message_redeliver_count | 隊列中deliver_get中設置了重新交付標志的消息子集數量 | count |
message_redeliver_rate | 隊列中deliver_get中設置了重新交付標志的消息子集每秒數量 | percent |
messages | 隊列中的總消息數量 | count |
messages_rate | 每秒隊列中的總消息數量 | percent |
messages_ready | 準備交付給客戶端的消息數量 | count |
場景視圖
登錄觀測云控制臺,點擊「場景」 -「新建儀表板」,輸入 “RabbitMQ”, 選擇 “RabbitMQ 監控視圖”,點擊 “確定” 即可添加。
監控器(告警)
- 隊列消息數過高
通過實時查詢隊列中的消息總數來監控隊列是否有堆積,如果有堆積,可能會影響到數據的延遲消費。
window("M::`rabbitmq_queue`:(last(`messages`)) BY `queue_name`", '5m')
- 消息重傳次數過多
指標 queue_totals_messages_unacknowledged_rate 描述的是 RabbitMQ 中未確認消息的數量的速率。這個指標反映了在 RabbitMQ 隊列中,每秒未被消費者確認的消息數量的變化率。
在 RabbitMQ 中,消息的確認機制是非常重要的,因為它確保了消息的可靠傳遞。當一個消息被消費者接收后,消費者需要發送一個確認(ack)給 RabbitMQ 服務器,表明消息已經被成功處理。如果消費者在處理消息時失敗或沒有發送確認,那么該消息就是未確認的。
M::`rabbitmq_overview`:(avg(`queue_totals_messages_unacknowledged_rate`)) BY `host_ip`, `url`
- 隊列新增速率過高
queue_totals_messages_rate 是 RabbitMQ 中的一個監控指標,它描述的是隊列中未確認消息數量的變化速率,即每秒未確認消息數量的變化率。這個指標對于了解和監控 RabbitMQ 隊列的消費情況非常重要。
M::`rabbitmq_overview`:(avg(`queue_totals_messages_rate`) AS `消息速率`) BY `host_ip`
- 不可用路由突增過高
message_return_unroutable_count_rate 描述的是每秒返回給發布者作為無法路由的消息的速率。在 RabbitMQ 中,當一個消息被發送到交換機(exchange),而該交換機無法將消息路由到任何綁定的隊列時,這個消息就被認為是無法路由的。這種情況下,如果設置了備用交換機(alternate exchange),消息將被發送到備用交換機;如果沒有設置備用交換機,或者備用交換機同樣無法路由該消息,則消息將被返回給發布者。
M::`rabbitmq_overview`:(avg(`message_return_unroutable_count_rate`)) BY `host_ip`, `url`
總結
結合觀測云的可視化監控,可以達到實時監控 RabbitMQ 的運行性能,優化資源使用,減少數據延遲,從而改善用戶的體驗。