rabbitmq的笔记(五)用Python请求rabbitmq的接口监控状态

摘要:
json是用来读数的,吧rabbitmq返回的json数组去除字符串。time和datetime都是获取时间点。/usr/bin/envpython#-*-coding:utf-8-*-importrequests,json,time,datetimefromrequests.authimportHTTPBasicAuthimportsysusername='********'password='********'queue_url='http://10.3.22.19:15672/api/queues'overview_url='http://10.3.22.19:15672/api/overview'nodes_url='http://10.3.22.19:15672/api/nodes'nodes_num=0ignore_queue=["Youku_OPFlowPkgSubsSync_delay_queue","dlx_Youku_OPFlowPkgSubsSync_queue","order_status_changed_notify_queue","polling_order_status_queue_200056","dlx_polling_order_status_queue","polling_order_status_queue_200117"]msg="%s消息队列堆积异常:"%queues_num_msg="队列总数是{},参考数是217,这是绝对数,需要注意!"deliver_rate_msg="邮件传递率{},消息消费速度,时间单位秒,如果为零,需要注意消费者和单列消费者工作状态。"nodes_num_msg="健康节点一共{}个,参考值4,如果小于4,需要尽快处理。

1、使用了Python的requests模块,是因为服务器本来就是Python2,使用这个已安装的模块也比较熟悉。json是用来读数的,吧rabbitmq返回的json数组去除字符串。time和datetime都是获取时间点。

#!/usr/bin/env python

#-*- coding:utf-8 -*-
importrequests, json, time, datetime
from requests.auth importHTTPBasicAuth
importsys

username = '********'password = '********'queue_url = 'http://10.3.22.19:15672/api/queues'overview_url = 'http://10.3.22.19:15672/api/overview'nodes_url = 'http://10.3.22.19:15672/api/nodes'nodes_num =0
ignore_queue = ["Youku_OPFlowPkgSubsSync_delay_queue","dlx_Youku_OPFlowPkgSubsSync_queue","order_status_changed_notify_queue","polling_order_status_queue_200056","dlx_polling_order_status_queue","polling_order_status_queue_200117"]
msg = "%s 消息队列堆积异常:" % (time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())),)
queues_num_msg = "队列总数是{},参考数是217,这是绝对数,需要注意!"message_num_msg = "消息总数是{},没有参考数,订单多的时候就多,订单少的时候就少。"consumers_num_msg = "消费者总数是{},参考数是14761,仅供参考。"messages_ready_msg = "待消费的消息数是{},没有参考数值,一般情况下,待消费消息应该和消息总数一样,因为程序设定消费完就确认删除。"messages_unacknowledged_msg = "待确认的消息数量是{},没有参考值,如果太多,说明程序有消费,但是没确认的消息数。"publish_details_msg = "消息发布率{},消息生产速度,时间单位秒,如果为零,需要注意订单受理情况。"deliver_rate_msg = "邮件传递率{},消息消费速度,时间单位秒,如果为零,需要注意消费者和单列消费者工作状态。"nodes_num_msg = "健康节点一共{}个,参考值4,如果小于4,需要尽快处理。"messages_details_msg = "总消息数的增速为每秒{},仅供判断,没有参考值。"
ove = requests.get(url=overview_url, auth=HTTPBasicAuth(username=username, password=password), timeout=3)
nodes = requests.get(url=nodes_url, auth=HTTPBasicAuth(username=username, password=password), timeout=3)

if ove.status_code == 200:
overview =json.loads(ove.text)
queues_num = overview.get("object_totals").get("queues")
consumers_num = overview.get("object_totals").get("consumers")
messages_num = overview.get("queue_totals").get("messages")
messages_ready = overview.get("queue_totals").get("messages_ready")
messages_unacknowledged = overview.get("queue_totals").get("messages_unacknowledged") 
messages_details = overview.get("queue_totals").get("messages_details").get("rate") 
deliver_rate = overview.get("message_stats").get("deliver_details").get("rate")
publish_details = overview.get("message_stats").get("publish_details").get("rate")

if nodes.status_code == 200:
all_nodes =json.loads(nodes.text)
for n inall_nodes:
partitions = n.get("partitions")
nodes_num = nodes_num+1

defqueue_num():
que = requests.get(url=queue_url, auth=HTTPBasicAuth(username=username, password=password), timeout=3)
if que.status_code == 200:
queues =json.loads(que.text)
for queue inqueues:
if queue['name'] inignore_queue:
continuequeue_count = int(queue.get("messages", 0))
if queue_count>10000:
print msg,queue['name'],queue_count
return
printnodes_num_msg.format(nodes_num)
printqueues_num_msg.format(queues_num)
printconsumers_num_msg.format(consumers_num)
printmessage_num_msg.format(messages_num)
printmessages_ready_msg.format(messages_ready)
printmessages_unacknowledged_msg.format(messages_unacknowledged)
printmessages_details_msg.format(messages_details)
printpublish_details_msg.format(publish_details)
printdeliver_rate_msg.format(deliver_rate)
print "*以上是 %s rabbitmq的巡检邮件,下面是有队列记录,才是异常情况:" % (time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())),)
queue_num()

免责声明:文章转载自《rabbitmq的笔记(五)用Python请求rabbitmq的接口监控状态》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇转载:ffmpeg 音视频合成分割架构系列:逻辑分层总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

js-定时器

知识 要用定时器,先清除定时器   1、 定时器   setInterval() 循环定时器;周而复始的执行(循环执行)  setTimeout()( 执行事件,间隔时间(单位毫秒)) <script> var num=0; setInterval(function(){ console.log( num);...

python之路 之一pyspark

pip包下载安装pyspark pip install pyspark  这里可能会遇到安装超时的情况   加参数  --timeout=100 pip   -default   -timeout=100     install -U pyspark  下面是我写的一些代码,在运行时,没什么问题,但是目前不知道怎么拿到rdd与dataframe中的值  f...

《深度剖析CPython解释器》29. Python内存管理与垃圾回收(第二部分):源码解密Python中的垃圾回收机制

楔子 现在绝大部分的语言都实现了垃圾回收机制,这其中也包括Python,而不同的语言采用的垃圾回收算法也各不相同。那么,常见的垃圾回收算法都有哪些呢? 引用计数法(reference count): 记录对象的被引用此处, 引用计数降为0时回收 标记-清除法(mark-sweep): 从根集合触发, 遍历所有能访问到的对象并对其进行标记, 然后将未被标记...

redux简明学习

前面的话 这几天被redux折腾的够呛,看了很多视频,也看了很多资料。很多时候,感觉好像顿悟了,但实际上只是理解了其中的一个小概念而已。真正去做项目的时候,还是会卡壳。可能是学CSS和Javascript时花的时间太久了,学redux的时候有点浮躁。还有就是redux内容实在是不少,全部都看都理解,好像没什么必要。不看吧,用的时候总是有点力不从心。于是,决...

linux重新安装python

第一步:下载python2.7  wget https://www.Python.org/ftp/python/2.7.12/Python-2.7.12.tar.xz 第二步: 解压刚刚下载的压缩包 #tar -xvf Python-2.7.12.tar.xz 第三步:新建安装目录 mkdir /usr/local/Python27 第四步: 编译./co...

python基础之读取xml

python怎么操作xml文件详细介绍链接:https://www.jb51.net/article/50812.htm 从结构上来说,xml很像常见的HTML超文本标记语言。不过超文本语言被设计用来显示数据,其焦点是数据的外观。xml被设计用来传输和存储数据,其焦点是数据的内容。 特征: 1. 标签对组成:<TEST></TEST>...