实例:监控http和mysql ESTABLISHED和TIME_WAIT连接数,当大与100的时候报警,并在web页面实时查看连接数;
1 在要监控的服务器上面编写Shell脚本,取出ESTABLISHED和TIME_WAIT连接数
#!/bin/bash
ARGS=1
if [ $# -ne "$ARGS" ];then
echo "Please input one arguement";
fi
case $1 in
EST_80)
result=`netstat -anp | grep :80 | grep EST | wc -l`
echo $result
;;
TIME_OUT_80)
result=`netstat -anp | grep :80 | grep TIME_WAIT | wc -l`
echo $result
;;
EST_3306)
result=`netstat -anp | grep :3306 | grep EST | wc -l`
echo $result
;;
TIME_OUT_3306)
result=`netstat -anp | grep:3306 | grep TIME_WAIT | wc -l`
echo $result
;;
EST_11211)
result=`netstat -anp | grep :11211 | grep EST | wc -l`
echo $result
;;
TIME_OUT_11211)
result=`netstat -anp | grep:11211 | grep TIME_WAIT | wc -l`
echo $result
;;
*)
echo "Usage:$0(EST_80|TIME_OUT_80|EST_3306|TIME_OUT_3306|EST_11211|TIME_OUT_11211)"
;;
esac
这个脚本有个坑:zabbiz-agent服务运行的用户为zabbix,但是netstat的-p选项只能root用户可用。解决办法为在不影响的情况下去掉-p选项,或者给zabbix用户在netstat命令sudo权限,但记得使用命令时要加上sudo。
2 在zabbix_agentd.conf里面添加UserParament,格式如下,对于zabbix来说,脚本其实就是一个插件。
UnsafeUserParameters=1 ##允许脚本中出现特殊字符
UserParameter=checkservices.sh[*],/etc/zabbix/scripts/checkservices.sh $1
UserParameter=key,command
前面是key值,也就是在web端添加监控脚本时的key值,command就是该key值对应的执行脚本,也就是脚本执行路径。
重启agent服务器,然后在zabbix-server上用zabbix-get命令测试一下key是否可以取到值。
3 一些坑
当出现这个错误时,请注意你脚本中使用的命令是否对zabbix用户有一定的限制;
解决方法:为zabbix用户设置sudo权限,并修改命令添加sudo。
允许脚本中出现一些特殊字符,这项看情况打开。默认是不允许的。