检查RabbitMQ队列是否堵塞的Python脚本

89次阅读
没有评论

共计 1173 个字符,预计需要花费 3 分钟才能阅读完成。

啥也不说了,上脚本之前先说一下有种做成 zabbix 自动发现的方案不是很合适,因为线上的集群动不动就几千个 queue,这样生成的 zabbix 监控项太多,综合各方面考虑都不是很合适,下面的方案是把结果写到文件里面,然后配置个让 zabbix agent 定时去扫关键字的模板,具体怎么弄就不赘述了,直接上我们的 Python 脚本哦。

# -*- coding: utf-8 -*-
import re
import subprocess
list_vhost_cmd = "/sbin/rabbitmqctl list_vhosts |grep -v'Listing vhosts'"list_vhost_result = subprocess.check_output(list_vhost_cmd, shell=True).strip().split('\n')
no_exception_count = 0
with open('./results.txt', 'w') as f:
    for vhost in list_vhost_result:
        list_queue_cmd = "/sbin/rabbitmqctl list_queues -p {0} |grep -Ev'Listing queues|Timeout:|name\tmessages'".format(vhost)
        try:
            list_queue_result = subprocess.check_output(list_queue_cmd, shell=True).strip().split('\n')
            for q in list_queue_result:
                q_item = q.split('\t')
                # print(q_item)
                q_name = q_item[0]
                q_num = q_item[1]
                case1= re.findall('bakup', q_name, re.IGNORECASE)
                case2 = re.findall('backup', q_name, re.IGNORECASE)
                if case1 or case2:
                    continue
                if int(q_num) >= 100000:
                    f.write("Queue_Exception:" + "队列名:" + q_name + '数量:' + q_num + '\n')
                    no_exception_count = no_exception_count + 1
                    # print("Queue_Exception:" + "队列名:" + q_name + '数量:' + q_num + '\n')
        except subprocess.CalledProcessError:
            pass
if no_exception_count == 0:
    with open('./results.txt', 'w') as f:
        f.write("\n")

Tips:上面的阈值设置为了 100000,你可以根据你们公司的业务情况进行调整哦~

正文完
 
sharp097
版权声明:本站原创文章,由 sharp097 2022-04-03发表,共计1173字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)