1、先把zabbix加入到mqm用户组,以便监控
$ sudo usermod -aG mqm zabbix
2、编写zabbix脚本文件
$ su - zabbix
$ cd yourpath/zabbix-agent
$ makedir scripts
# 监控队列管理器状态
$ vi check_qm_status.sh
# 添加如下内容:
#!/bin/sh
qm_name=$1
qm_sta=`/opt/mqm/bin/dspmq -m $1 | awk '{print $2}'`
if [ $qm_sta == "STATUS(Running)" ]; then
echo 1
else
echo 0
fi
# 监控指定队列深度
$ vi check_qm_depath.sh
#!/bin/bash
echo "DIS QL($1) CURDEPTH" | /opt/mqm/bin/runmqsc $2 | grep "[C]URDEPTH(" | grep -o '[0-9]\+'
# 监控侦听器状态
$ vi check_chl_status.sh
#!/bin/sh
chl_name=$1
chl_sta=`echo "DIS lsstatus(LISTEN_CDM) STATUS" | /opt/mqm/bin/runmqsc $2 | grep "STATUS(" | awk '{print $2}'`
if [ $chl_sta == "STATUS(RUNNING)" ]; then
echo 1
else
echo 0
fi
# 配置执行权限
$ chmod +x ./*.sh
# 此时要在zabbix用户下,逐一测试一下以上脚本的正确性
3、更新zabbix配置文件,加入自定义脚本
$ vi yourpath/zabbix-agent/conf/zabbix-agentd.conf
# 添加三行:
UserParameter=ibm.mq.checkmqsta[*],yourpath/zabbix-agent/scripts/check_qm_status.sh $1
UserParameter=ibm.mq.checkmqdep[*],yourpath/zabbix-agent/scripts/check_qm_depath.sh $1 $2
UserParameter=ibm.mq.checkchlsta[*],yourpath/zabbix-agent/scripts/check_chl_status.sh $1 $2
# 并且更改两个参数:
EnableRemoteCommands=1
UnsafeUserParameters=1
# 重启zabbix客户端服务
$ service zabbix-agentd restart
4、去到zabbix网面,添加相关监控项
要注意配置好参数,例如,检查队列管理器XXX的状态,就配置它的键值为:ibm.mq.checkmqsta[XXX]
5、脚本权限处理
在实践中发现,尽管已经将zabbix用户加入了mqm组,但在查看相关资源时(执行上述3个脚本),仍然会出现错误提示:AMQ8135E: Not authorized.
此时需要对zabbix重新进行授权
# 对队列管理器xxxx的查看授权
$ setmqaut -m XXXX -t qmgr -p zabbix +dsp +inq
# 对指定队列AAAA.bbbb的查看授权
$ setmqaut -m XXXX -n 'AAAA.bbbb' -t queue -p zabbix +dsp
具体setmqaut命令用法,请参考: dspmqaut (显示对象授权) - IBM 文档