zabbix监控ActiveMQ集群状态 自动发现并自动监控队列
< 返回列表时间: 2020-04-01来源:OSCHINA
【围观】麒麟芯片遭打压成绝版,华为亿元投入又砸向了哪里?>>>
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最新数据
热门排行