python实时连接rabbitmq_Python自动发现功能监控RabbitMQ队列是否正常运行并自动添触发器...

原标题:Python自动发现功能监控RabbitMQ队列是否正常运行并自动添触发器

项目背景描述:

RabbitMQ作为一款非常常用的消息中间件,那么对此的监控也必不可少,对此我也写过一篇文章(连接地址),但项目过于复杂,代码量大,但不得不说监控得非常详细。此项目的部署的过程中也显得不那么容易,因监控项多,项目复杂也会影响到Zabbix的效率。为满足我项目的个性化要求,减少Zabbix的性能开消为此我自己也写了一个简单的项目,主要实现以下功能

队列自动发现(还可以指定vhost)

题外话!如果还有在入门阶段的小萌新们的话,就私信我!我送大量的PDF书籍!精心整理的,希望大家能早日入门!进群:548377875

第一步:

Zabbix添加UserParameter

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

第二步:

创建脚本脚本内容如下

#!/usr/bin/python

#coding:utf8

import requests

import sys

import json

class RabbitMQ:

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

def GetQueues(self):

# 连接并获取RabbitMQ数据,如果传getallname参数代表获取所有的队列名称,主要用于自动发现,如果不等于,那就是获取指定队列的数据

if sys.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()

return connections

def QueuesDataProcessing(self):

# 判断队列是否正常工作

data = self.GetQueues()

if "message_stats" in data:

Ack = data["message_stats"]["ack_details"]["rate"]

Total = data["messages"]

if Total > 2000 and Ack == 0:

return Total

else:

return 0

else:

# 当有些队列长时间没有数据传输,会没有任何数据显示,这里也返回0,代表没有问题

return 0

def GetAllQueuesName(self):

# 获取所有队名称,格式化为Zabbix指定的格式,以便自动发现

list1= []

result = self.GetQueues()

for n in range(len(result)):

list1.append({"{#QUEUES_NAME}": result[n]["name"]})

return list1

mq = RabbitMQ()

if sys.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,可自行更改设置)

效果展示:

责任编辑:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值