RabbitMQ 可觀測性最佳實踐

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

指標介紹

MetricDescriptionUnit
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 的運行性能,優化資源使用,減少數據延遲,從而改善用戶的體驗。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/65748.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/65748.shtml
英文地址,請注明出處:http://en.pswp.cn/web/65748.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

美攝科技PC端視頻編輯解決方案,為企業打造專屬的高效創作平臺

在當今這個信息爆炸的時代&#xff0c;視頻已成為不可或缺的重要內容形式&#xff0c;美攝科技推出了PC端視頻編輯解決方案的私有化部署服務&#xff0c;旨在為企業提供一款量身定制的高效創作平臺。 一、全面功能&#xff0c;滿足企業多樣化需求 美攝科技的PC端視頻編輯解決…

【Oracle篇】深入了解執行計劃中的訪問路徑(含表級別、B樹索引、位圖索引、簇表四大類訪問路徑)

&#x1f4ab;《博主介紹》&#xff1a;?又是一天沒白過&#xff0c;我是奈斯&#xff0c;從事IT領域? &#x1f4ab;《擅長領域》&#xff1a;??擅長阿里云AnalyticDB for MySQL(分布式數據倉庫)、Oracle、MySQL、Linux、prometheus監控&#xff1b;并對SQLserver、NoSQL(…

騰訊云AI代碼助手編程挑戰賽-廚房助手之AI大廚

騰訊云AI代碼助手編程挑戰賽-廚房助手之AI大廚 作品簡介 身處當今如火箭般迅猛發展的互聯網時代&#xff0c;智能聊天助手已然化身成為提升用戶體驗的關鍵利器&#xff0c;全方位滲透至人們的數字生活。 緊緊跟隨著這股洶涌澎湃的時代浪潮&#xff0c;我毅然投身于極具挑戰性…

vscode 無法使用npm, cmd命令行窗口可以正常執行

解決方法&#xff1a; 執行命令獲得命令的位置 get-command npm 得到如下 然后刪除或者修改 npm.ps1文件 讓其不能使用就行。然后重啟vscode即可。 pnpm 同理即可 另外加速源 國內鏡像源&#xff08;淘寶&#xff09;&#xff1a; npm config set registry https://regist…

簡易CPU設計入門:算術邏輯單元(四)

項目代碼下載 請大家首先準備好本項目所用的源代碼。如果已經下載了&#xff0c;那就不用重復下載了。如果還沒有下載&#xff0c;那么&#xff0c;請大家點擊下方鏈接&#xff0c;來了解下載本項目的CPU源代碼的方法。 CSDN文章&#xff1a;下載本項目代碼 上述鏈接為本項目…

Spring Boot 和微服務:快速入門指南

&#x1f496; 歡迎來到我的博客&#xff01; 非常高興能在這里與您相遇。在這里&#xff0c;您不僅能獲得有趣的技術分享&#xff0c;還能感受到輕松愉快的氛圍。無論您是編程新手&#xff0c;還是資深開發者&#xff0c;都能在這里找到屬于您的知識寶藏&#xff0c;學習和成長…

VSCode 使用鼠標滾輪控制字體

一、 文件 | 首選項 | 設置 二、單擊在 settings.json中編輯 "editor.mouseWheelZoom": true 注注注意&#xff1a;保存哦&#xff01;ctrlS 三、測試 按住ctrl鼠標滾輪&#xff0c;控制字體大小

tip:vue中路由跳轉,返回是還想保留原來的搜索條件

新寫的一個項目&#xff0c;使用后發現&#xff0c;點“詳細”跳轉到詳情頁面。返回時&#xff0c;原來的篩條件沒了&#xff0c;又把全部的數據都查詢出來&#xff0c;還需要重新篩選一下&#xff0c;使用起來很不友好。 解決辦法&#xff1a;瀏覽器本地存儲&#xff08;Local…

rabbitmq的三個交換機及簡單使用

提前說一下&#xff0c;創建隊列&#xff0c;交換機&#xff0c;綁定交換機和隊列都是在生產者。消費者只負責監聽就行了&#xff0c;不用配其他的。 完成這個場景需要兩個服務哦。 1直連交換機-生產者的代碼。 在配置類中創建隊列&#xff0c;交換機&#xff0c;綁定交換機…

uniapp 使用 pinia 狀態持久化

1.創建文件 stores -index.js -global.js2.對應文件內容 index.js 安裝插件 npm i pinia-plugin-persistedstate import { createPinia } from pinia; import persist from pinia-plugin-persistedstate; const pinia createPinia(); pinia.use(persist); export default pi…

代碼隨想錄算法訓練營第3天(鏈表1)| 203.移除鏈表元素 707.設計鏈表 206.反轉鏈表

一、203.移除鏈表元素 題目&#xff1a;203. 移除鏈表元素 - 力扣&#xff08;LeetCode&#xff09; 視頻&#xff1a;手把手帶你學會操作鏈表 | LeetCode&#xff1a;203.移除鏈表元素_嗶哩嗶哩_bilibili 講解&#xff1a;代碼隨想錄 注意&#xff1a; 針對頭結點和非頭結點的…

NetMQ里Push-Pull模式,消息隔一收一問題小記

問題&#xff1a; 本機環境下&#xff0c;在push端向pull端發送消息的過程中&#xff0c;發現同一個進程里的pusher和puller代碼&#xff0c;可以準確地完成收發&#xff1b; 然而&#xff0c;將代碼放在兩個進程里&#xff0c;將pusher發送的消息從1計數&#xff0c;puller端竟…

CES Asia 2025科技盛宴,AI智能體成焦點

2025第七屆亞洲消費電子技術展&#xff08;CES Asia賽逸展&#xff09;將在北京拉開帷幕&#xff0c;AI智能體有望成為展會的核心亮點。 深圳市人工智能行業協會發文表示全力支持CES Asia 2025&#xff08;賽逸展&#xff09;&#xff0c;稱其為人工智能領域的創新發展提供了強…

matlab編寫分段Hermite插值多項式

文章目錄 原理使用分段Hermite插值多項式原因公式第一類的兩個插值積函數第二類的兩個插值積函數 例題法一法二 代碼分段 Hermite 插值的思路&#xff1a;分段 Hermite 插值多項式的構造&#xff1a;MATLAB 實現代碼&#xff1a;結果如圖&#xff1a;注歸一化變量的作用&#x…

Cline(原Claude Dev)開源的IDE AI插件,如何搭配OpenRouter實現cursor功能,Cline怎么使用

Cline&#xff08;原Claude Dev&#xff09;是一個開源的IDE AI插件&#xff0c;可以使用你的命令行界面和編輯器的人工智能助手。 你可以直接在VS Code編輯器進行安裝。如果你使用過Cursor AI IDE的話&#xff0c;可以嘗試最新發布的Cline3.1版本。 在OpenRouter上&#xff0…

計科高可用服務器架構實訓(防火墻、雙機熱備,VRRP、MSTP、DHCP、OSPF)

一、項目介紹 需求分析&#xff1a; &#xff08;1&#xff09;總部和分部要求網絡拓撲簡單&#xff0c;方便維護&#xff0c;網絡有擴展和冗余性&#xff1b; &#xff08;2&#xff09;總部分財務部&#xff0c;人事部&#xff0c;工程部&#xff0c;技術部&#xff0c;提供…

企業級PHP異步RabbitMQ協程版客戶端 2.0 正式發布

概述 workerman/rabbitmq 是一個異步RabbitMQ客戶端&#xff0c;使用AMQP協議。 RabbitMQ是一個基于AMQP&#xff08;高級消息隊列協議&#xff09;實現的開源消息組件&#xff0c;它主要用于在分布式系統中存儲和轉發消息。RabbitMQ由高性能、高可用以及高擴展性出名的Erlan…

AsyncOperation.allowSceneActivation導致異步加載卡死

先看這段代碼&#xff0c;有個詭異的問題&#xff0c;不確定是不是bug public class Test : MonoBehaviour {void Start(){StartCoroutine(LoadScene(Ego.LoadingLevel));}IEnumerator LoadScene(string sceneName){LoadingUI.UpdateProgress(0.9f);yield return new WaitForS…

C#使用MVC框架創建WebApi服務接口

第一步,使用VS2019新建MVC-Web API應用程序 創建BridgeApi 第二步,運行將生成默認的示例網頁,網頁Url為 https://localhost:44361/home/index 右鍵 項目 添加 WebAPI控制器類 添加 我們可以看到App_Start目錄下 有三個文件: BundleConfig.cs代表 捆綁文件的引用 有腳本文件…

wordpress 房產網站篩選功能

自定義分類法創建 add_action( init, ashu_post_type ); function ashu_post_type() {register_taxonomy(province,post,array(label => 省,rewrite => array( slug => province ),hierarchical => true));register_taxonomy(city,post,array(label => 市,rewr…