zabbix版本3.4.11
activemq5.9
系统centos6or7
监控硬件物理空间是否充足:
ActiveMQ有3个重要的参数,存储空间百分比,内存空间百分比和临时空间百分比。这三个参数的意义很明显,如果值到了100,则表明硬件空间已满,Broker不能再接受任何的消息了,除非有消息消费并且删除,Broker才可以再接收消息。
如果这些值长时间都比较高,接近阀值,则表示硬件的配置不能满足要求,建议更换硬件,或者给予ActiveMQ的环境配置比较小,建议给予更多的资源给ActiveMQ。
如果平时保持在一个稳定值,有一段时间突然增高,则有两种可能。一种可能是用户量大增(当然大家都希望是这样),另一种可能是某个或者某几个消息消费者死机了。需要人工干预重启。
还有一种可能是平时保持在一个稳定值,但是一段时间内突然降低了,则表示消息的生产者可能出现问题了。
监控队列:
如果ActiveMQ使用队列,需要监控队列的未消费消息数量,消费者数量,消息入队和出队的数量。
未消费消息数量的含义和监控硬件的内存和硬盘空间差不多,过多的消息堆积可能是有消息消费者死机。
消费者数量应该是一个相对固定的值,这个值减少,就直接表示有的消费者已经死机。
消息入队和出队数量如果增长缓慢或者不增长,则表示消息发送者已经死机。一般是通过增量监控。
监控方式 是访问 activemq的管理端口8161接口 Jolokia API
例如
[root@znhjkapp02 ~]# curl -u admin:admin http://9.1.8.247:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost,service=Health/CurrentStatus 2>/dev/null |jq .
{
"value": "Good",
"request": {
"type": "read",
"attribute": "CurrentStatus",
"mbean": "org.apache.activemq:brokerName=localhost,service=Health,type=Broker"
},
"status": 200,
"timestamp": 1585721407
}
jq工具是 Linux下解析json的工具
最后取得value值如下
[root@znhjkapp02 ~]# curl -u admin:admin http://9.1.8.247:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost,service=Health/CurrentStatus 2>/dev/null |jq .value
"Good"
我们监控activem的几个指标如下
#当前服务器状态
curl -u admin:admin http://9.1.8.247:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost,service=Health/CurrentStatus |jq .
Memory percent used #内存使用情况
curl -u admin:admin http://9.1.8.247:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost/MemoryPercentUsage |jq .
Store percent used #磁盘使用情况
curl -u admin:admin http://9.1.8.247:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost/StorePercentUsage |jq .
Temp percent used #临时文件磁盘空间使用量
curl -u admin:admin http://9.1.8.247:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost/TempPercentUsage |jq .
Number Of Pending Messages #队列 未消费消息数量
curl -u admin:admin http://9.1.8.247:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName=serviceQueue/QueueSize |jq .
Number Of Consumers #消费队列数
curl -u admin:admin http://9.1.8.247:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName=eventQueue/ConsumerCount |jq .
Messages Enqueued #已接收的队列数
curl -u admin:admin http://9.1.8.247:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName=eventQueue/EnqueueCount |jq .
Messages Dequeued #已消费的队列数
curl -u admin:admin http://9.1.8.247:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName=eventQueue/DequeueCount |jq .
生产者数量
http://9.1.8.247:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName=eventQueue/ProducerCount
获取所有eventQueue
http://9.1.8.247:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost/Queues
开始修改自动发现队列脚本 #这个自动发现脚本来自网络 自己稍作修改
[root@znhjkapp02 zabbix_agentd.d]# cat activemq_discovery.sh
#!/bin/bash
discovery() {
#MQ_IP=(172.16.8.119 172.16.8.120 172.16.8.118)
MQ_IP=(9.1.8.247)
for g in ${MQ_IP[@]}
do
curl -uadmin:admin http://${g}:8161/admin/queues.jsp >/dev/null 2>&1
if [ $? -eq 0 ];then
i=$g
fi
port=($(curl -uadmin:admin http://${i}:8161/admin/queues.jsp 2>/dev/null| grep -A 5 "${QUEUENAME}</a></td>"|awk -F '<' '{print $0}'|sed 's/<\/td>//g'|sed 's/<.*>//g;/^$/d;/--/d'|grep '^[a-Z]'))
done
printf '{\n'
printf '\t"data":[\n'
for key in ${!port[@]}
do
if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
printf '\t {\n'
printf "\t\t\t\"{#QUEUENAME}\":\"${port[${key}]}\"},\n"
else [[ "${key}" -eq "((${#port[@]}-1))" ]]
printf '\t {\n'
printf "\t\t\t\"{#QUEUENAME}\":\"${port[${key}]}\"}\n"
fi
done
printf '\t ]\n'
printf '}\n'
}
discovery
本地测试
[root@znhjkapp02 zabbix_agentd.d]# ./activemq_discovery.sh
{
"data":[
{
"{#QUEUENAME}":"eventQueue"},
{
"{#QUEUENAME}":"serviceQueue"},
{
"{#QUEUENAME}":"event_mmdb"},
{
"{#QUEUENAME}":"transferQueue"},
{
"{#QUEUENAME}":"mmdbQueue"},
{
"{#QUEUENAME}":"IOMP_CLOUD_TO_CMPM"},
{
"{#QUEUENAME}":"TEST"}
]
}
状态监控脚本
[root@znhjkapp02 zabbix_agentd.d]# cat activemq_status.sh
#/bin/sh
QUEUENAME=$1
MQ_COMMAND=$2
#MQ_IP=(172.16.8.120 172.16.8.118 172.16.8.119)
MQ_IP=(9.1.8.247)
for g in ${MQ_IP[@]}
do
curl -uadmin:admin http://${g}:8161/admin/queues.jsp >/dev/null 2>&1
if [ $? -eq 0 ]; then
i=$g
case $MQ_COMMAND in
Enqueued)
curl -uadmin:admin http://${i}:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName=${QUEUENAME}/EnqueueCount 2>/dev/null |/usr/bin/jq .value
;;
Dequeued)
curl -uadmin:admin http://${i}:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName=${QUEUENAME}/DequeueCount 2>/dev/null |/usr/bin/jq .value
;;
Pending)
curl -uadmin:admin http://${i}:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName=${QUEUENAME}/QueueSize 2>/dev/null |/usr/bin/jq .value
;;
Consumers)
curl -u admin:admin http://${i}:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName=${QUEUENAME}/ConsumerCount 2>/dev/null |/usr/bin/jq .value
;;
ServerStatus)
curl -u admin:admin http://${i}:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost,service=Health/CurrentStatus 2>/dev/null |jq .value
;;
MemoryPercentUsage)
curl -u admin:admin http://${i}:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost/MemoryPercentUsage 2>/dev/null|jq .value
;;
StorePercentUsage)
curl -u admin:admin http://${i}:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost/StorePercentUsage 2>/dev/null |jq .value
;;
TempPercentUsage)
curl -u admin:admin http://${i}:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost/TempPercentUsage 2>/dev/null|jq .value
;;
esac
fi
done
本地测试
[root@znhjkapp02 zabbix_agentd.d]# ./activemq_status.sh event_mmdb ServerStatus #需要传2个参数 一个队列名 一个监控项
"Good"
修改zabbix agent上的配置
[root@znhjkapp02 zabbix_agentd.d]# cat activemq.conf
UserParameter=mq.mqScan,/etc/zabbix/zabbix_agentd.d/activemq_discovery.sh
UserParameter=mq.status[*],/etc/zabbix/zabbix_agentd.d/activemq_status.sh $1 $2
zabbix添加自动发现模板
配置--模板--创建模板

创建自动发现规则

创建监控项原型

服务器端测试自动发现
[root@Zabbix_server_proxy ~]# /data/zabbix3.4-proxy/bin/zabbix_get -s 9.1.8.247 -p 10050 -k "mq.mqScan"
{
"data":[
{
"{#QUEUENAME}":"eventQueue"},
{
"{#QUEUENAME}":"serviceQueue"},
{
"{#QUEUENAME}":"event_mmdb"},
{
"{#QUEUENAME}":"transferQueue"},
{
"{#QUEUENAME}":"mmdbQueue"},
{
"{#QUEUENAME}":"IOMP_CLOUD_TO_CMPM"},
{
"{#QUEUENAME}":"TEST"}
]
}
[root@Zabbix_server_proxy ~]# /data/zabbix3.4-proxy/bin/zabbix_get -s 9.1.8.247 -p 10050 -k "mq.status[event_mmdb,ServerStatus]"
"Good"
查看zabbix最新数据
来源:oschina
链接:https://my.oschina.net/kcw/blog/3216498