zabbix监控ActiveMQ集群状态 自动发现并自动监控队列

那年仲夏 提交于 2020-04-06 19:12:03

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最新数据 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!