内容简介:项目背景描述:RabbitMQ作为一款非常常用的消息中间件,那么对此的监控也必不可少,对此我也写过一篇文章(连接地址),但项目过于复杂,代码量大,但不得不说监控得非常详细。此项目的部署的过程中也显得不那么容易,因监控项多,项目复杂也会影响到Zabbix的效率。为满足我项目的个性化要求,减少Zabbix的性能开消为此我自己也写了一个简单的项目,主要实现以下功能第一步:
项目背景描述:
RabbitMQ作为一款非常常用的消息中间件,那么对此的监控也必不可少,对此我也写过一篇文章(连接地址),但项目过于复杂,代码量大,但不得不说监控得非常详细。此项目的部署的过程中也显得不那么容易,因监控项多,项目复杂也会影响到Zabbix的效率。为满足我项目的个性化要求,减少Zabbix的性能开消为此我自己也写了一个简单的项目,主要实现以下功能
-
队列自动发现(还可以指定vhost)
-
自动添加监控,自动添加触发器
第一步:
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 if __name__ == '__main__': 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,可自行更改设置)
效果展示:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 触发器
- Oracle触发器详细讲解
- 窗口实用触发器:ContinuousEventTimeTrigger
- Oracle触发器用法实例详解
- 使用 Go 编写 PostgreSQL 触发器
- MySQL数据库之触发器
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Web Security Testing Cookbook
Paco Hope、Ben Walther / O'Reilly Media / 2008-10-24 / USD 39.99
Among the tests you perform on web applications, security testing is perhaps the most important, yet it's often the most neglected. The recipes in the Web Security Testing Cookbook demonstrate how dev......一起来看看 《Web Security Testing Cookbook》 这本书的介绍吧!