根據需求,監控三個指標: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監控:
在檢測中-最新數據-主機中查看是否出現預期的數據。