描述:
在日常的工作中,可能会需要同时对数百个甚至更多的url进行监控,通过浏览器访问的话,太过繁琐且效率低下,因此,针对这种场景,在公司没有监控系统的情况下,可以使用下面的脚本,通过url的返回值,对系统情况进行最直接的初步判断及检查,有兴趣的可以进行扩展。
功能:
通过对url的返回值进行判断,并产生告警邮件;
附:
邮箱的配置及定时任务的设置方式这里省略,大家可以去网上查找方法;
直接上脚本:
#!/bin/bash
export scrip_path='/home/xuguanping/mydocument/service_monitor'
mail1=xxx@163.com
function init() {
cd $scrip_path
#if test -s erro.log;
# then
# echo '' >erro.log
# date '+%F %T' >>erro.log
# echo '系统服务情况监控' >>erro.log
# else
# touch erro.log
# echo '' >erro.log
# date '+%F %T' >>erro.log
# echo '系统服务情况监控' >>erro.log
# fi
if test -s normal.log;
then
echo '' >normal.log
date '+%F %T' >>normal.log
echo '系统服务情况监控' >>normal.log
else
touch normal.log
echo '' >normal.log
date '+%F %T' >>normal.log
echo '系统服务情况监控' >>normal.log
fi
}
function end() {
mv erro.log logs/erro/`date +%F-%T`.log
mv normal.log logs/normal/`date +%F-%T`.log
}
function service_monitor() {
for i in `cat path_list`
do
school=`echo $i|awk -F '~' '{print $1}'`
path=`echo $i|awk -F '~' '{print $2}'`
contacts=`echo $i|awk -F '~' '{print $3}'`
contact_information=`echo $i|awk -F '~' '{print $4}'`
curl --connect-timeout 10 -m 20 -k $path >/dev/null 2>&1
erro_value=$?
case $erro_value in
0)
echo -e `date +%Y-%m-%d-%T`\\t "$school:服务正常!"
echo -e `date +%Y-%m-%d-%T`\\t "$school:服务正常!" >>normal.log
;;
6)
echo -e `date +%Y-%m-%d-%T`\\t"警告:请检查:$school:timed out,错误值:$erro_value"
echo -e `date +%Y-%m-%d-%T`\\t"警告:$school:服务异常\n错误信息:timed out,错误值:$erro_value;\n请联系:$contacts 联系方式:$contact_information 进行处理!\n" >>erro.log
;;
7)
echo -e `date +%Y-%m-%d-%T`\\t"警告:$school:Network is unreachable,错误值:$erro_value"
echo -e `date +%Y-%m-%d-%T`\\t"警告:$school:服务异常\n错误信息:Network is unreachable,错误值:$erro_value;\n请联系:$contacts 联系方式:$contact_information 进行处理!\n" >>erro.log
;;
28)
echo -e `date +%Y-%m-%d-%T`\\t"警告:$school: a timeout was reached,错误值:$erro_value"
echo -e `date +%Y-%m-%d-%T`\\t"警告:$school:服务异常\n错误信息:a timeout was reached,错误值:$erro_value;\n请联系:$contacts 联系方式:$contact_information 进行处理!\n" >>erro.log
;;
*)
echo -e `date +%Y-%m-%d-%T`\\t"警告:请检查:$school,错误值:$erro_value"
echo -e `date +%Y-%m-%d-%T`\\t"警告:$school:服务异常\n错误信息:其他,错误值:$erro_value;\n请联系:$contacts 联系方式:$contact_information 进行处理!\n" >>erro.log
esac
done
}
function sendmail_alarm() {
if test -s erro.log;
then
echo -e "begin send alarm email !"
mail -s "系统服务监控告警(`date '+%F %T'`)" $mail1 < erro.log
else
echo -e "all service is nomal"
fi
}
init
service_monitor
sendmail_alarm
end
补充:
需要创建一个名字未:path_list的文件,然后以以下格式把所有需要测试的url都写进去:
xxxxurlxxxx