根据需求,监控三个指标:MQ进程、自定义监控项订阅组的未消费值Diff Total和TPS。web
建立MQ 状态的监控模板,进程监控利用zabbix自带的模板;apache
监控订阅组的Diff Total和TPSbash
由于每一个Nameserver的订阅组可能会实时改变,因此采用自动发现的方式获取全部的订阅组信息。再根据nameserver 和订阅组获取其Diff Total和TPS。spa
步骤:3d
编写订阅组自动发现和自定义监控项的脚本。server
#!/bin/bash GroupInfo=`sh /opt/rocketmq/incubator-rocketmq-rocketmq-all-4.1.0-incubating/distribution/target/apache-rocketmq/bin/mqadmin consumerProgress -n "ip:port;ip:port;ip:port" 2>/dev/null` #echo "$GroupInfo" GroupName=`echo "$GroupInfo"|grep -v "#Group"|awk '{print $1}'` subgroup_discovery () { COUNT=`echo "$GroupName" |wc -l` INDEX=0 echo '{"data":[' echo "$GroupName" | while read LINE; do echo -n '{"{#GROUPNAME}":"'$LINE'"}' INDEX=`expr $INDEX + 1` if [ $INDEX -lt $COUNT ]; then echo ',' fi done echo ']}' } diffandtps () { GroupConsume=`echo "$GroupInfo"|grep -w $1` #echo $GroupConsume if [[ $2 == "TPS" ]]; then echo $GroupConsume|awk '{print $(NF-1)}' #echo "TPS" elif [[ $2 == "diff" ]];then echo $GroupConsume|awk '{print $NF}' fi } case "$1" in subgroup_discovery) subgroup_discovery ;; diffandtps) diffandtps $2 $3 ;; *) echo "Usage:$0" ;; esac
根据nameserver实时获取全部的订阅组信息。blog
命令为MQ自带的mqadmin:进程
sh mqadmin consumerProgress -n ip:port
根据订阅组名称获取其Diff Total 和TPS。ip
修改配置文件,重启zabbix agent。在zabbix/conf/zabbix_agentd.conf中添加以下信息:get
Timeout=30
UnsafeUserParameters=1
UserParameter=mq.subgroup.discovery,/opt/zabbix/mq_status.sh subgroup_discovery
UserParameter=mq.subgroup.diff[*],/opt/zabbix/mq_status.sh diffandtps $1 diff
UserParameter=mq.subgroup.tps[*],/opt/zabbix/mq_status.sh diffandtps $1 TPS
注意:mqadmin命令执行时有必定的时长,因此设置Timeout=30,不然会报错。
配置文件改好后重启agent生效。
在zabbix web端建立自动发现规则
配置文件的自动发现项名称为键值
在zabbix web端的自动发现规则里面建立监控项原型
此处监控两个指标,须要两个监控项
Diff Total监控:
由于可能存在复值,因此信息类型选择浮点数
TPS监控:
在检测中-最新数据-主机中查看是否出现预期的数据。