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来实现
转载于:https://blog.51cto.com/utrace/1529501