boss要求每天晚上九点发送一条短信,至各部门总监的手机上,总结一天中所有服务器的错误统计,接到任务后,我分析了一下,通过zabbix的自带功能不太好实现,于是打算通过编写shell脚本来实现,以下是我线上的脚本,经过了二次修改后,已修复脚本误报Bug。 脚本简要说明: 通过sql语句,查询出events表中一天的所有警报,通过triggers表将警报分类,然后按分类放入相应的数组,最后通过公司的短信接口,发出统计短信。 ---------------------------------------------------------------------------------------------------------------------------------------------- #!/bin/sh ### ## 版本:V0.2 2010-10-21 22:28 David.zhu #------------------------------ ## array1 普通信息 ## array2 警告信息 ## array3 一般问题 ## array4 严重问题 ## array5 灾难 #----------------------------- now=`date +%s` fix=`expr $now - 86400` myconn="mysql -h 192.168.0.10 -uzabbix -pzabbix zabbix" result=`${myconn} -e "SELECT objectid FROM events WHERE value=1 AND objectid >10000 AND clock>=${fix} AND clock<=${now} ORDER BY clock DESC LIMIT 100" | grep -v "objectid"` i=0 for trid in ${result};do PRO=`${myconn} -e "SELECT priority FROM triggers t WHERE ((t.triggerid BETWEEN 000000000000000 AND 099999999999999)) AND (t.triggerid IN(${trid}))"| grep -v priority` case $PRO in 1) array1[$i]=${PRO};; 2) array2[$i]=${PRO};; 3) array3[$i]=${PRO};; 4) array4[$i]=${PRO};; 5) array5[$i]=${PRO};; *) error[$i]=${PRO};; esac i=`expr $i + 1` done message="服务器监控总结---灾难问题:${#array5[@]}个|严重问题:${#array4[@]}个|一般问题:${#array3[@]}个|警告信息:${#array2[@]}个|普通信息:${#array1[@]}个" mobile=('138*****' '138*****' '138*****' '138*****') for ((j=0;j<${#mobile[@]};j++));do number=${mobile[${j}]} /usr/local/zabbix/bin/sendsms_pro.php ${number} notitle ${message} | 2>&1 done ----------------------------------------------------------------------------------------------------------------------------------------------- 注:本脚本在zabbix 1.8.3版本上测试通过,其它版本未做过测试,sendsms_pro.php为我司的短信接口,如没有接口,可以使用linux fetion来实现 http://bbs.linuxtone.org/thread-9402-1-1.html (责任编辑:IT) |