shell web监控脚本,全套都在里面了 ,判定规则改了几次,多个结合的用可以看旧版本的,后续懒得写新的。
旧版本链接:
https://blog.51cto.com/junhai/2407485
此次有3个脚本组成,写下大致实现的过程
计算故障时间效果在:
https://blog.51cto.com/junhai/2443931
使用微信机器人:
https://blog.51cto.com/junhai/2424374
因为没用数据库只能这样用3个txt了 ,其实是我不会。。。。。。- -! 多个sed可以sed -e写成1句,懒得花时间优化了。
url.txt(存放监控链接)> url.del(存放不可达的网址,第二个脚本分析后在)>url.add(第三个脚本分析是否网址是否恢复)
监控效果 如下图:
对外使用用邮件发送告警,因为政务云监控的web太多了都要发送邮件,邮箱经常被认为供给发送垃圾邮件,被封了好多次。
1次告警1次恢复,这里防止多次告警,一次故障只会发出2封邮件,恢复用第三个脚本控制,用于政务云平台WEB监控。
3次不可达停止告警,恢复告警一次,告警@相关系统人员,使用第二个脚本控制,用于长威内部系统监控告警。邮件可选,内部用企业微信比较快。
#!/bin/bash
#×××
#QQ×××
. /root/weixin.sh #调用企业微信机器人
#时间
cur_time(){
date "+%Y/%m/%d %H:%M:%S"
}
systemname(){
name=`cat url2.txt|grep $url|wc -l`
if [ $name -eq 1 ];then
cat url2.txt|grep -w $url
else
echo "$url"
fi
}
[ ! -f /root/url.txt ] && echo "url.txt文件不存在" && exit 1
sed -i '/^$/d' url.txt
while read url
do
[ -z $url ] && echo "url.txt存在空格 检查文件格式" && exit 1
for ((i=1;i<7;i++))
do
rule=`curl -i -s -k -L -m 10 $url|grep -w "HTTP/1.1 200"|wc -l`
if [ $rule -eq 1 ];then
echo "$(cur_time) 第$i次检查$url网页访问成功" >> check.log
break
elif [ $i = 6 ];then
echo $url >> url.del
info=`echo -e "$(cur_time) \n$(systemname) 网页无法访问,请检查!"`
wx_web
echo -e "$(cur_time) \n\n$(systemname) 网页无法访问,请检查!"|mail -s "【重要告警】网页不可达" ×××@×××.com
echo "$(cur_time) $(systemname) 网页$(expr $i \* 3)秒无法访问,请检查!" >> checkfail.log
sh /root/checkdel.sh #第二个脚本
else
echo "$(cur_time) 第$i次检查$url网页访问失败" >> checkfail.log
sleep 3
fi
done
done < /root/url.txt
sh /root/checkadd.sh #第三个脚本 我喜欢把第三个脚本单独用设置间隔1分钟1次
#!/bin/bash
. /root/weixin.sh
cur_time(){
date "+%Y/%m/%d %H:%M:%S"
} #显示时间
sed -i '/^$/d' url.del
sed -i '/^$/d' url.delout
cat url.del|sort|uniq -c >> url.delout
while read line
do
i=`echo $line|awk '{print$1}'`
newurl=`echo $line|awk '{print$2}'`
if [ -z $newurl ];then
continue
elif [ $i -eq 1 ];then
echo $newurl >> url.add
sed -i "s|$newurl||" url.txt
sed -i "s|$newurl||" url.del
sed -i '/^$/d' url.txt
sed -i '/^$/d' url.del
#info=`echo -e "$(cur_time) \n $i次告警网站$newurl未恢复 暂停发送告警"`
#wx_web
#echo "$(cur_time) $i次告警网站$newurl未恢复 暂停发送告警"|mail -s "【暂停告警】" ×××@×××.com
#echo "$(cur_time) 网站$newurl未恢复 暂停告警" >> checkfail.log
sed -i "s|$newurl||" url.delout
sed -i '/^$/d' url.delout
else
echo > url.del
continue
fi
done< url.delout
echo > url.delout
#!/bin/bash
. /root/weixin.sh
. /root/downtime.sh
cur_time(){
date "+%Y/%m/%d %H:%M:%S"
}
systemname(){
name=`cat url2.txt|grep $url|wc -l`
if [ $name -eq 1 ];then
cat url2.txt|grep $url|awk '{print$1,$2}'
else
echo "$url"
fi
}
sed -i '/^$/d' url.add
while read url
do
[ -z $url ] && echo "url.del存在空格 检查文件格式" && exit 1
rule=`curl -i -s -k -L -m 10 $url|grep -w "HTTP/1.1 200"|wc -l`
if [ $rule -eq 1 ];then
u=$(grep -w "$url" url.txt|wc -l)
if [ $u -eq 1 ];then
echo "$url已存在" >> checkfail.log
else
echo "$url" >> url.txt
fi
sed -i "s|$url||" url.add
sed -i '/^$/d' url.add
echo "$(cur_time) $url 已恢复监控" >> checkfail.log
info=`echo -e "$(cur_time) \n$(systemname) 网站恢复啦 \n$(fail_time)"`
wx_ah
echo -e "$(cur_time) $(systemname) 网站已恢复 \n$(fail_time)"|mail -s "【网站恢复】" ×××@×××.com
else
echo "$(cur_time) 检查$url网页访问失败" >> /dev/null #checkfail.log
fi
done< url.add
后面写了个傻瓜式交互脚本 将就着用吧 用户增删改查监控网址 sh 脚本 add 就可以批量添加监控网站了。。。。。。。。。。。。。。。。
#!/bin/bash
#20190831
case $1 in
add )
[ -z $2 ] && echo "请在add后面输入要增加监控的网站地址 用法: add baidu.com" && exit 1
u=$(grep -w "$2" url.txt|wc -l)
if [ $u -eq 1 ];then
echo "$2 网站已存在"
else
echo $2 >> url.txt
echo "$2 网站已加入监控列表"
fi
;;
del )
[ -z $2 ] && echo "请在del后面输入要移除监控的网站地址 用法: del baidu.com" && exit 1
u=$(grep -w "$2" url.txt|wc -l)
if [ $u -eq 1 ];then
sed -i "s|$2||" url.txt
sed -i '/^$/d' url.txt
echo "$2 网站已删除"
else
echo "$2 网站未找到"
fi
;;
update )
vi url2.txt
;;
dis )
cat url.txt|sort|uniq -c
;;
back )
cp url.txt url.bk
echo "监控列表备份文件url.bk"
;;
disuniq )
cp url.txt url.bk
cat url.txt|sort|uniq -c|awk '{print$2}' > url.new
cat url.new > url.txt
rm -rf url.new
sed -i '/^$/d' url.txt
echo "监控列表去重完成 备份文件 url.bk"
;;
* )
echo "-----------`date`-----------------"
echo "sh $0 add 增加监控网站"
echo "sh $0 del 删除监控网站"
echo "sh $0 update 修改网站联系人信息"
echo "sh $0 dis 显示监控列表"
echo "sh $0 back 备份监控列表"
echo "sh $0 disuniq 监控列表去重"
echo "----------------------------------"
;;
esac
顺带常用的crontab调用频率 使用看旧版本博客。
*/5 * * * * sh /root/check.sh
*/1 * * * * sh /root/checkadd.sh
0 0 * * * echo > url.del