概述
今天主要介绍一下zabbix怎么去自定义key来监控rabbitmq队列。
一、环境准备脚本
1、每秒钟插入一个观察队列情况(queues.py)
# -*- coding: utf-8 -*-import pikaimport timecredentials = pika.PlainCredentials('hwb', 'xxx')connection = pika.BlockingConnection(pika.ConnectionParameters('127.0.0.1',5672,'/',credentials))channel = connection.channel()queuename="hwb"channel.queue_declare(queue=queuename)i = 1while True: channel.basic_publish(exchange='', routing_key=queuename, body='hwb body {0}'.format( i )) print("insert hwb body success") time.sleep(1) i = i + 1
2、消费者程序(rabbitconsumer.py)
# -*- coding: utf-8 -*-import pikacredentials = pika.PlainCredentials('hwb', 'xxx')connection = pika.BlockingConnection(pika.ConnectionParameters('127.0.0.1',5672,'/',credentials))channel = connection.channel()queuename="hwb"channel.queue_declare(queue=queuename)def callback(ch, method, properties, body): print("Received %r" % body)channel.basic_consume(callback,queue=queuename,no_ack=True)print('Consume waiting for messages. To exit press CTRL+C')channel.start_consuming()
二、Rabbitmq监控脚本
1、Python获取队列信息(/etc/zabbix/zabbix_agentd.d/rabbitmqmonitor.py)
# -*- coding: utf-8 -*-try: import jsonexcept: import simplejson as jsonimport commands (status, output) = commands.getstatusoutput("""curl -s -u hwb:fxxx http://127.0.0.1:15672/api/queues""")outputjson = json.loads(output)for one in outputjson: print(one['name']) print(one['messages_ready']) if(one.has_key('message_stats')): if(one['message_stats'].has_key('deliver_get')): print(one['message_stats']['deliver_get']) continue print(0)
分别输出:namemessages_readydeliver_get信息
2、Shell监控脚本:(/etc/zabbix/zabbix_agentd.d/rabbitmq_check.sh)
#!/bin/bashqueuename=$1queuetype=$2result=$(python /etc/zabbix/zabbix_agentd.d/rabbitmqmonitor.py)case $2 in "unread" ) echo "$result" |grep "^$queuename$" -A 2 |awk 'NR==2';; "read" ) echo "$result" |grep "^$queuename$" -A 2 |awk 'NR==3';; *) echo "unsupport key";;esac
测试监控脚本
./rabbitmq_check.sh hwb read
./rabbitmq_check.sh hwb unread
3、自定义Key脚本(/etc/zabbix/zabbix_agentd.d/rabbitmq.conf)
UserParameter=rabbitmq.status[*],sh /etc/zabbix/zabbix_agentd.d/rabbitmq_check.sh $1 $2
4、zabbix_get测试
zabbix_get -s xxx -k rabbitmq.status[hwb,unread]
三、zabbix网页添加监控项
--未读队列名称:queue $1 $2键值:rabbitmq.status[hwb,unread]类型:数字单位:更新间隔:60s--每秒钟处理的队列数名称:queue $1 $2 persecond键值:rabbitmq.status[hwb,read]类型:浮点数单位:更新间隔:60s进程:每秒更改
四、zabbix网页添加触发器
--未读队列超过xxx告警 -> 监控业务有没有在正常处理名称:hwb queue unread>100严重性:严重表达式:{mq.jk:rabbitmq.status[hwb,unread].last()}>100--每秒钟处理的队列数超过xx告警 -> 监控业务的并发的能力名称:hwb queue read persecond > 200严重性:严重表达式:{mq.jk:rabbitmq.status[hwb,read].last()}>200
五、测试
模拟产生队列达到100触发告警
告警邮件如下:
修复邮件如下:
觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~