概述
今天主要介绍一下zabbix怎么去自定义key来监控rabbitmq队列。
一、环境准备脚本
1、每秒钟插入一个观察队列情况(queues.py)
# -*- coding: utf-8 -*-
import pika
import time
credentials = 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 = 1
while 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 pika
credentials = 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 json
except:
import simplejson as json
import 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)
分别输出:name\messages_ready\deliver_get信息
2、Shell监控脚本:(/etc/zabbix/zabbix_agentd.d/rabbitmq_check.sh)
#!/bin/bash
queuename=$1
queuetype=$2
result=$(python /etc/zabbix/zabbix_agentd.d/rabbitmqmonitor.py)
case $2 in
"unread" )
echo "$result" |grep "^$queuename#34; -A 2 |awk 'NR==2';;
"read" )
echo "$result" |grep "^$queuename#34; -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方面的内容,感兴趣的朋友可以关注下~