藍(lán)鯨rabbitmq監(jiān)控實(shí)踐
> 本文來自騰訊藍(lán)鯨智云社區(qū)用戶:vinco
rabbitmq是藍(lán)鯨所依賴的消息隊列服務(wù),影響著多個服務(wù),如作業(yè)平臺、標(biāo)準(zhǔn)運(yùn)維、監(jiān)控平臺、節(jié)點(diǎn)管理、日志平臺等。因?yàn)閞abbitmq服務(wù)異常而導(dǎo)致的故障往往比較隱蔽,這類故障往往無法在頁面直接反饋出來。在生產(chǎn)環(huán)境中曾遇到過因?yàn)閞abbitmq異常,導(dǎo)致作業(yè)任務(wù)以及標(biāo)準(zhǔn)運(yùn)維任務(wù)執(zhí)行卡住的情況,如果故障發(fā)生在夜間,會導(dǎo)致一些重要的定時任務(wù)無法按照預(yù)期執(zhí)行,容易造成一些重大運(yùn)維事故。所以通過監(jiān)控掌握rabbitmq服務(wù)的運(yùn)行情況,對于整個藍(lán)鯨服務(wù)的正常運(yùn)行至關(guān)重要。這里提供一個rabbitmq監(jiān)控實(shí)踐總結(jié)。
rabbitmq_exporter
rabbitmq監(jiān)控指標(biāo)采集使用開源的rabbitmq_exporter,本身監(jiān)控平臺就支持各類exporter插件,這里我們可以拿來即用。如果是監(jiān)控平臺版本是V3.6.3029或者版本相近的,可以直接使用文末附件導(dǎo)入,其他版本的監(jiān)控平臺沒有測試過。
啟用rabbitmq_management插件
rabbitmq_exporter采集依賴于rabbitmq啟用rabbitmq_management插件。
rabbitmq_management 插件是 RabbitMQ 提供的一個管理插件,讓用戶可以通過圖形化的方式來管理 RabbitMQ,它還提供一系列接口,rabbitmq_exporter通過請求這些接口來獲取rabbitmq的各項指標(biāo)。
通過以下命令啟用rabbitmq_management插件
rabbitmq-plugins enable rabbitmq_management
插件啟用不需要重啟rabbitmq,如果是rabbitmq集群,則每個rabbitmq節(jié)點(diǎn)都需要啟用rabbitmq_management
rabbitmq_management插件啟用成功后,會在節(jié)點(diǎn)上監(jiān)聽15672端口
下載rabbitmq_exporter
Release下載地址:https://github.com/kbudde/rabbitmq_exporter/releases
Linux選擇最新版本即可:?rabbitmq_exporter
下載并解壓至本地
rabbitmq_exporter_1.0.0-RC19_linux_amd64.tar.gz
? |- LICENSE
? |- README.md
? |- rabbitmq_exporter
監(jiān)控平臺導(dǎo)入exporter插件
「插件」-「新建」- 「插件類型選擇Exporter」-「上傳rabbitmq_exporter」
綁定端口:9419
綁定主機(jī):127.0.0.1
定義以下環(huán)境變量參數(shù):
參數(shù)類型默認(rèn)值類型默認(rèn)值RABBIT_URL環(huán)境變量文本http://127.0.0.1:15672RABBIT_USER*環(huán)境變量文本adminRABBIT_PASSWORD環(huán)境變量密碼無PUBLISH_PORT環(huán)境變量文本${port}PUBLISH_ADDR環(huán)境變量文本${host}RABBIT_EXPORTERS*環(huán)境變量文本exchange,node,overview,queue,alivenessALIVENESS_VHOST*環(huán)境變量文本/
RABBIT_USER:任意一個tag=management用戶都可以,rabbitmqctl list_users
命令可以查看用戶tag
RABBIT_EXPORTERS:rabbitm_exporter把指標(biāo)分成了module,可以認(rèn)為是進(jìn)行了分類,RABBIT_EXPORTERS表示要采集的指標(biāo)類別
ALIVENESS_VHOST:利用rabbitmq 的aliveness接口探測服務(wù)狀態(tài),接口會默認(rèn)在探測的vhost下創(chuàng)建名為aliveness-test
的隊列,接口通過對aliveness-test
隊列消息的發(fā)送和接收來判斷rabbitmq服務(wù)狀態(tài),確保RABBIT_USER設(shè)置的用戶具有對ALIVENESS_VHOST指定的vhost有創(chuàng)建queue的權(quán)限,比如RABBIT_USER指定為admin,執(zhí)行rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"?
為admin用戶授權(quán)

調(diào)試插件,選擇一臺rabbitmq進(jìn)行調(diào)試,并保存指標(biāo),如果指標(biāo)名和監(jiān)控平臺保留字沖突,需要先轉(zhuǎn)換指標(biāo)名才能保存

采集
「數(shù)據(jù)采集」-「新建」-「填寫采集名稱和RABBIT_PASSWORD」
RABBIT_PASSWORD為rabbitmq的admin密碼,其他保持默認(rèn)即可

采集目標(biāo)選擇「動態(tài)拓?fù)洹?「藍(lán)鯨 / 公共組件 / rabbitmq」-「完成采集下發(fā)」

監(jiān)控儀表盤
rabbitmq_exporter采集的和rabbitmq相關(guān)的指標(biāo),都帶有rabbimtq_
的前綴
以下幾個指標(biāo)需要特別關(guān)注,其他指標(biāo)請參考:https://github.com/kbudde/rabbitmq_exporter
指標(biāo)名描述Label(維度)aliveness_infoaliveness狀態(tài),1或0無up節(jié)點(diǎn)存活狀態(tài),1或0nodeuptime節(jié)點(diǎn)運(yùn)行時長(ms)cluster, node, self*running狀態(tài)為running的節(jié)點(diǎn)數(shù)量cluster, node, selfnode_mem_used節(jié)點(diǎn)已使用的內(nèi)存數(shù)量(byte)cluster, node, selfnode_mem_limit*節(jié)點(diǎn)內(nèi)存限制(byte),默認(rèn)是節(jié)點(diǎn)內(nèi)存的40%cluster, node, selfnode_mem_alarmrabbitmq內(nèi)存使用率達(dá)到node_mem_limit時告警,1告警,0不告警cluster, node, selfnode_disk_free內(nèi)存空閑量(byte)cluster, node, selfnode_disk_free_limit內(nèi)存空閑量限制(byte),默認(rèn)是50MBcluster, node, selfnode_disk_free_alarm內(nèi)存空閑量小于node_disk_free_limit時告警,1告警,0不告警cluster, node, selfpartitions網(wǎng)絡(luò)分區(qū)數(shù),發(fā)生網(wǎng)絡(luò)分區(qū)是為2,正常為0cluster, node, selfqueue_messages_readyready的消息數(shù)量cluster, vhost, queue, durable, policy, selfqueue_messages_unacknowledgedunacknowledged的消息數(shù)量cluster, vhost, queue, durable, policy, selfqueue_memory隊列占用的內(nèi)存大?。╞yte)cluster, vhost, queue, durable, policy, self
self:self=1表示該條數(shù)據(jù)是當(dāng)前節(jié)點(diǎn)的數(shù)據(jù),rabbitmq_exporter訪問當(dāng)前節(jié)點(diǎn)的management接口,可以獲取到集群所有節(jié)點(diǎn)的數(shù)據(jù),用self這個label就可能表示獲取到的指標(biāo)是否是屬于當(dāng)前節(jié)點(diǎn),比如在節(jié)點(diǎn)rabbit@VM-240-33-centos.node.consul
上采集的rabbitmq_uptime
指標(biāo),就包含了所有節(jié)點(diǎn)的uptime數(shù)據(jù)。
# 在rabbit@VM-240-33-centos.node.consul節(jié)點(diǎn)上執(zhí)行curl -s 127.0.0.1:9419/metrics | grep rabbitmq_uptime
rabbitmq_uptime{cluster="rabbit@VM-240-18-centos",node="rabbit@VM-240-18-centos.node.consul",self="0"} 1.260266076e+09
rabbitmq_uptime{cluster="rabbit@VM-240-18-centos",node="rabbit@VM-240-33-centos.node.consul",self="1"} 1.433729125e+09 ?
node_mem_limit:對應(yīng)vm_memory_high_watermark配置,默認(rèn)情況下 vm_memory_high_watermark 的值為0.4,即內(nèi)存閾值為 0.4, 表示當(dāng) RabbitMQ 使用的內(nèi)存超過 40%時,就會產(chǎn)生內(nèi)存告警井阻塞所有生產(chǎn)者的連接。一旦告警被解除(有消息被消費(fèi)或者從內(nèi)存轉(zhuǎn)儲到磁盤等情況的發(fā)生), 一切都會恢復(fù)正常。
文末提供儀表盤附件導(dǎo)入
監(jiān)控告警策略
建議設(shè)置以下指標(biāo)告警:
指標(biāo)名靜態(tài)閾值描述rabbitmq_uptime<600000服務(wù)重啟告警rabbitmq_up<1節(jié)點(diǎn)失活告警rabbitmq_aliveness_info<1服務(wù)異常告警rabbitmq_node_mem_alarm>=1內(nèi)存使用達(dá)到閾值告警rabbitmq_partitions>=2出現(xiàn)網(wǎng)絡(luò)分區(qū)告警rabbitmq_node_mem_used>節(jié)點(diǎn)內(nèi)存的35%內(nèi)存使用告警
建議再加上藍(lán)鯨平臺自帶的應(yīng)用內(nèi)存率告警和磁盤使用率告警
附件
儀表盤
采集&策略&儀表盤
rabbitmq_exporter
查看更多藍(lán)鯨運(yùn)維文章,請?zhí)D(zhuǎn):藍(lán)鯨運(yùn)維手冊大全