1. 程式人生 > 實用技巧 >Python結合Zabbix模板的自動發現功能監控RabbitMQ佇列是否正常執行並自動新增觸發器...

Python結合Zabbix模板的自動發現功能監控RabbitMQ佇列是否正常執行並自動新增觸發器...

專案背景描述:

RabbitMQ作為一款非常常用的訊息中介軟體,那麼對此的監控也必不可少,對此我也寫過一篇文章(連線地址),但專案過於複雜,程式碼量大,但不得不說監控得非常詳細。此專案的部署的過程中也顯得不那麼容易,因監控項多,專案複雜也會影響到Zabbix的效率。為滿足我專案的個性化要求,減少Zabbix的效能開消為此我自己也寫了一個簡單的專案,主要實現以下功能

  1. 佇列自動發現(還可以指定vhost)

  2. 自動新增監控,自動新增觸發器

第一步:

Zabbix新增UserParameter

UserParameter=rabbitmq[*],/usr/bin/python/usr/local/sbin/rabbitmq.py$1

第二步:

建立指令碼指令碼內容如下

#!/usr/bin/python
#coding:utf8

importrequests
importsys
importjson

classRabbitMQ:


def__init__(self,user='guest',passwd='guest',server_ip='192.168.1.1',server_port=15670,vhost="device"):

self.user=user
self.password=passwd
self.server_ip=server_ip
self.server_port=server_port
self.vhost=vhost


defGetQueues(self):
#連線並獲取RabbitMQ資料,如果傳getallname引數代表獲取所有的佇列名稱,主要用於自動發現,如果不等於,那就是獲取指定佇列的資料
ifsys.argv[1]!="getallname":
connections=requests.get("http://{0}:{1}/api/queues/{2}/{3}".format(self.server_ip,self.server_port,self.vhost,sys.argv[1]),auth=(self.user,self.password))
else:
connections=requests.get("http://{0}:{1}/api/queues".format(self.server_ip,self.server_port),auth=(self.user,self.password))
connections=connections.json()
returnconnections


defQueuesDataProcessing(self):
#判斷佇列是否正常工作
data=self.GetQueues()
if"message_stats"indata:
Ack=data["message_stats"]["ack_details"]["rate"]
Total=data["messages"]

ifTotal>2000andAck==0:
returnTotal
else:
return0
else:
#當有些佇列長時間沒有資料傳輸,會沒有任何資料顯示,這裡也返回0,代表沒有問題
return0


defGetAllQueuesName(self):
#獲取所有隊名稱,格式化為Zabbix指定的格式,以便自動發現
list1=[]
result=self.GetQueues()
forninrange(len(result)):
list1.append({"{#QUEUES_NAME}":result[n]["name"]})
returnlist1


if__name__=='__main__':
mq=RabbitMQ()
ifsys.argv[1]!="getallname":
result=mq.QueuesDataProcessing()
print(result)
else:
result=mq.GetAllQueuesName()
names={"data":result}
print(json.dumps(names))

簡要說明:需要修改的地方主要就是QueuesDataProcessing函式,根據自己的要求去寫就可,我這裡的簡單邏輯就是判斷佇列內訊息總數如果大於2000,並且訊息速度為0就認為不正常,基本上為沒有正常消費,另外還有一種情況就是佇列長久沒有資料,那麼獲取不到任何資料,所以先做了一個判斷,如果查詢不到資料狀態也返回0,非0為不正常

最後一步:

匯入模板並關聯,模板下載地址(模板預設更新時間為30s,可自行更改設定)


效果展示:

1.png


2.png

3.png

轉載於:https://blog.51cto.com/270142877/2308929