Zabbix配置discovery主动发现ActiveMQ队列

快到年关了,领导大手一挥,要把线上环境切换新的VPC。既然要切VPC,就要与原有的VPC决裂,也要重新搭一套zabbix了,搭建activemq监控项就难免要监控各种队列,但是每个activemq里面的队列名又不同,一个一个特殊配置太头疼,于是就尝试使用主动发现来做,系统自己匹配队列。

后端脚本

首先要先准备一个discover_mq.py,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# !/usr/bin/env python 
# -*- coding: utf-8 -*-
# 用来获取当前mq的队列名
try:
import json
except:
import simplejson as json
import commands

(status, output) = commands.getstatusoutput("""curl -s -u 'mq前端页面账号:mq前端页面密码' http://127.0.0.1:8161/admin/queues.jsp|grep '</a></td>'|awk -F'<' '{print $1}'""")
outputs = output.split('\n')
result = []
for one in outputs:
result.append({'{#RESULT}': one})
print(json.dumps({'data':result},sort_keys=True,indent=4))

这个脚本执行就可以获取当前所有的队列名,如图:
akb48

然后再准备一个monitor_mq.sh,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/sh
# 获取每一个队列的入队、出队和积压量
username=mq前端页面账号
password=mq前端页面密码
myip=$1
queuename=$2
mytype=$3

case ${mytype} in
Pending)
curl -s -u "$username:$password" "http://${myip}:8161/admin/queues.jsp"|grep "^${queuename}</a></td>" -A 5|sed -n '2p'|egrep -o '[0-9]+'
;;
Enqueued)
curl -s -u "$username:$password" "http://${myip}:8161/admin/queues.jsp"|grep "^${queuename}</a></td>" -A 5|sed -n '4p'|egrep -o '[0-9]+'
;;
Dequeued)
curl -s -u "$username:$password" "http://${myip}:8161/admin/queues.jsp"|grep "^${queuename}</a></td>" -A 5|sed -n '5p'|egrep -o '[0-9]+'
;;
esac

然后就是准备zabbix的自定义监控项:

1
2
UserParameter=activemq.discover, python /mnt/discover_mq.py		#我放到/mnt目录下了
UserParameter=activemq.check[*],sh /mnt/monitor_mq.sh $1 $2 $3

重启zabbix-agent,此时别忘了在/etc/sudoers添加上

1
2
zabbix  ALL=(root) NOPASSWD: /usr/bin/python
Defaults:zabbix !requiretty

前端配置

来到zabbix-server前端页面,先在对应的templates添加Discovery,如图:
akb48

点击Create discovery rule,创建一个规则:
akb48

然后创建3个item prototypes,每一个对应入队、出队、积压量,如图:
akb48

还可以针对积压量做一个Trigger prototypes的告警。

保存之后,整个主动发现就配置到整个Templates,我们可以抽查一个机器,看一下是否自动匹配到所有的队列:
akb48

大功告成,收工回家!

感谢您请我喝咖啡~O(∩_∩)O,如果要联系请直接发我邮箱chenx1242@163.com,我会回复你的
-------------本文结束感谢您的阅读-------------