实例:监控http和mysql ESTABLISHED和TIME_WAIT链接数,当大与100的时候报警,并在web页面实时查看链接数;mysql
#!/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。web
UnsafeUserParameters=1 ##容许脚本中出现特殊字符
UserParameter=checkservices.sh[*],/etc/zabbix/scripts/checkservices.sh $1
UserParameter=key,command
前面是key值,也就是在web端添加监控脚本时的key值,command就是该key值对应的执行脚本,也就是脚本执行路径。sql
重启agent服务器,而后在zabbix-server上用zabbix-get命令测试一下key是否能够取到值。
shell
当出现这个错误时,请注意你脚本中使用的命令是否对zabbix用户有必定的限制;
解决方法:为zabbix用户设置sudo权限,并修改命令添加sudo。
容许脚本中出现一些特殊字符,这项看状况打开。默认是不容许的。ruby