Stories

Detail Return Return

RabbitMQ 可觀測性最佳實踐 - Stories Detail

RabbitMQ 簡介

RabbitMQ 是一個開源的消息代理和隊列服務器,用 Erlang 語言編寫,支持多種客户端。它通過使用交換機(Exchanges)、隊列(Queues)和綁定(Bindings)來路由消息,提供靈活的路由功能。RabbitMQ 支持多種消息協議,包括 AMQP 等,使其能夠輕鬆地與多種應用程序集成。

RabbitMQ 作為一款流行的消息隊列中間件,其監控對於確保系統的穩定性和性能至關重要。監控能夠幫助我們及時發現並解決潛在問題,避免對用户造成影響;通過監控數據,我們可以優化性能,提升系統的處理能力和響應速度;同時,監控還能揭示系統的行為趨勢,輔助我們預測未來的系統需求,合理規劃資源和擴容,增強系統的可伸縮性和穩定性。此外,監控還包括對 RabbitMQ 的健康檢查,如 Erlang VM 的運行狀態,以及對 RabbitMQ 特有的指標和操作系統指標的監控,例如套接字描述符使用量、排隊消息總數、節點間通信流量率、CPU 利用率和內存使用量等。

觀測雲

觀測雲是一款專為 IT 工程師打造的全鏈路可觀測產品,它集成了基礎設施監控、應用程序性能監控和日誌管理,為整個技術棧提供實時可觀察性。這款產品能夠幫助工程師全面瞭解端到端的用户體驗追蹤,瞭解應用內函數的每一次調用,以及全面監控雲時代的基礎設施。此外,觀測雲還具備快速發現系統安全風險的能力,為數字化時代提供安全保障。

前置條件

  • RabbitMQ 版本 >= 3.8.14
  • 安裝 rabbitmqUbuntu 為例
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 ,required
  url = "http://localhost:15672"

  # rabbitmq user, required
  username = "guest"

  # rabbitmq password, required
  password = "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 verification
  insecure_skip_verify = false

  ## Set true to enable election
  election = 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 的運行性能,優化資源使用,減少數據延遲,從而改善用户的體驗。

Add a new Comments

Some HTML is okay.