内容简介:项目背景描述: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数据库之触发器
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Effective Objective-C 2.0
Matt Galloway / 爱飞翔 / 机械工业出版社 / 2014-1 / 69.00元
《effective objective-c 2.0:编写高质量ios与os x代码的52个有效方法》是世界级c++开发大师scott meyers亲自担当顾问编辑的“effective software development series”系列丛书中的新作,amazon全五星评价。从语法、接口与api设计、内存管理、框架等7大方面总结和探讨了objective-c编程中52个鲜为人知和容易被忽......一起来看看 《Effective Objective-C 2.0》 这本书的介绍吧!