快到年关了,领导大手一挥,要把线上环境切换新的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))
这个脚本执行就可以获取当前所有的队列名,如图:
然后再准备一个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
2UserParameter=activemq.discover, python /mnt/discover_mq.py #我放到/mnt目录下了
UserParameter=activemq.check[*],sh /mnt/monitor_mq.sh $1 $2 $3
重启zabbix-agent
,此时别忘了在/etc/sudoers
添加上
1
2zabbix ALL=(root) NOPASSWD: /usr/bin/python
Defaults:zabbix !requiretty
前端配置
来到zabbix-server前端页面,先在对应的templates添加Discovery,如图:
点击Create discovery rule
,创建一个规则:
然后创建3个item prototypes
,每一个对应入队、出队、积压量,如图:
还可以针对积压量做一个Trigger prototypes
的告警。
保存之后,整个主动发现就配置到整个Templates,我们可以抽查一个机器,看一下是否自动匹配到所有的队列:
大功告成,收工回家!