Zabbix 3.0 监控推送rabbitmq队列-消息堆积

Posted by Yancy on 2017-07-29

Zabbix 3.0 监控推送rabbitmq队列

对于RabbitMQ的监控,除了服务器基本信息(硬盘、CPU、内存、IO等)以及MQ的进程和端口,我们也可以通过请求url访问管理API监控其集群和队列的情况。在java api 3.6.0以后,channel接口为我们提供了如下接口:

  • messageCount:查询队列未消费的消息数,可以监控消息堆积的情况。
  • consumerCount:队列的消费者个数,可以对消费者进行监控

1.监控告警需求问题:

1
2
3
4
message.bi队列 积压> 300 或者 消费者数<=2
message.push.cart队列 积压 >10000 或者消费者数<5
message.user.related队列 积压>2000 或者 消费者数<=2
message.cart队列 积压>10000 或者 消费者数<=2

2.编写Python脚本监控获取消费者数监控,队列。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
vim rabbitmq-monitor.py
#!/bin/env python
# -*- coding: UTF-8 -*-
import sys, urllib2, base64, json, re,time
ip = "169.23.73.22"
keys = ('messages_ready',)
def GetRabbitmqData():
request = urllib2.Request("http://%s:15672/api/queues" % ip)
base64string = base64.b64encode('guest:guest')
request.add_header("Authorization", "Basic %s" % base64string)
result = urllib2.urlopen(request)
data = json.loads(result.read())
return data
data=GetRabbitmqData()
#print data
for queue in data:
try:
print "消费者数量:",queue['consumers'],"队列:",queue['name'],"消息积压数:",int(queue[keys[0]])
except:
pass
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@message-center-mq zabbix]# python rabbitmq-monitor.py
消费者数量: 0 队列: 79d02dde-2007-4a49-b94b-0d4bee67b19c 消息积压数: 0
消费者数量: 0 队列: aliveness-test 消息积压数: 0
消费者数量: 0 队列: cartService.orderCancel.update 消息积压数: 0
消费者数量: 0 队列: cartService.virtualOrderCancel.update 消息积压数: 0
消费者数量: 0 队列: e9de65bd-be59-4c1c-b4a8-7312f382ac59 消息积压数: 0
消费者数量: 3 队列: message.bi 消息积压数: 0
消费者数量: 3 队列: message.cart 消息积压数: 0
消费者数量: 3 队列: message.console 消息积压数: 0
消费者数量: 3 队列: message.logistics 消息积压数: 0
消费者数量: 3 队列: message.order.info 消息积压数: 0
消费者数量: 30 队列: message.push.cart 消息积压数: 0
消费者数量: 3 队列: message.style 消息积压数: 0
消费者数量: 3 队列: message.user.related 消息积压数: 0
消费者数量: 0 队列: payment.virtual.notify.success 消息积压数: 0
消费者数量: 1 队列: 61b73745-4c74-475b-803e-bf2d48d2fa50 消息积压数: 0
消费者数量: 1 队列: a984d00a-8bbe-43c1-aa20-c1dc788ddd97 消息积压数: 0
消费者数量: 1 队列: e569e8a1-b7c9-4736-8bf8-13d76ecf7577 消息积压数: 0
消费者数量: 3 队列: push.station.task.status 消息积压数: 0

编写zabbix-agentd 监控:

1
2
3
4
5
6
7
8
9
[root@message-center-mq zabbix]# vim zabbix_agentd.conf
UserParameter=rabbitmq.consumer.bi,python /etc/zabbix/rabbitmq-monitor.py | grep message.bi |awk -F'[ :]' '{print $3}'
UserParameter=rabbitmq.overstock.bi,python /etc/zabbix/rabbitmq-monitor.py | grep message.bi |awk -F'[ :]' '{print $NF}'
UserParameter=rabbitmq.consumer.push.cart,python /etc/zabbix/rabbitmq-monitor.py | grep message.push.cart |awk -F'[ :]' '{print $3}'
UserParameter=rabbitmq.overstock.push.cart,python /etc/zabbix/rabbitmq-monitor.py | grep message.push.cart |awk -F'[ :]' '{print $NF}'
UserParameter=rabbitmq.consumer.user.related,python /etc/zabbix/rabbitmq-monitor.py | grep message.user.related |awk -F'[ :]' '{print $3}'
UserParameter=rabbitmq.overstock.user.related,python /etc/zabbix/rabbitmq-monitor.py | grep message.user.related |awk -F'[ :]' '{print $NF}'
UserParameter=rabbitmq.consumer.cart,python /etc/zabbix/rabbitmq-monitor.py | grep message.cart |awk -F'[ :]' '{print $3}'
UserParameter=rabbitmq.overstock.cart,python /etc/zabbix/rabbitmq-monitor.py | grep message.cart |awk -F'[ :]' '{print $NF}'

监控模板下载:在我github上面.

weixin监控效果图: