#!/bin/bash
#ip.txt存放IP地址 QQ450433231
#ip2.txt存放项目名称 IP地址 等信息 用于格式化输出,事先文本定义好IP位置,有利于快速排障
#本次更新增加恢复告警 故障时间
. /root/weixin.sh #调用微信机器人发送告警 https://blog.51cto.com/junhai/2424374
. /root/downiptime.sh #根据日志计算故障时间
#定义时间
cur_time(){
date "+%Y/%m/%d %H:%M:%S"
}
#定义输出的告警信息 根据IP查找ip2.txt文件输出告警信息
systemname(){
name=`cat ip2jk.txt|grep $ip|wc -l`
if [ $name -eq 1 ];then
cat ip2jk.txt|grep $ip
else
echo "$ip"
fi
}
# 判断文件是否存在
[ ! -f /root/ipjk.txt ] && echo "ipjk.txt文件不存在" && exit 1
[ ! -f /root/ipadd.txt ] && touch ipadd.txt
#去除文件空格
sed -i '/^$/d' /root/ipjk.txt
while read ip
do
[ -z $ip ] && echo "ipjk.txt存在空格 检查文件格式" && exit 1
for ((i=1;i<6;i++))
do
ping -W 2 -c 1 $ip &>/dev/null #判断规则
if [ $? = 0 ];then
echo "$(cur_time) ping $ip Successful" >/dev/null #>> /root/connect.log
break
elif [ $i = 5 ];then
info=`echo -e "$(cur_time)\n$ip 未回应PING报文,请检查!\n$(systemname)"`
wx_ip #发送企业微信告警
echo -e "$(cur_time) \n$ip未回应PING报文,请检查!\n$(systemname)"|mail -s "【紧急告警】IP未回应PING报文" 450433231@qq.com #发送邮件告警 修改/etc/mail.rc就可以调用第三方邮箱
echo "$(cur_time) 第$i次检查$ip未回应PING报文" >> /root/connectfail.log #写入日志
echo "$ip" >> ipadd.txt #不可达IP移除监控列表
sed -i "s|\<$ip\>||" ipjk.txt
sed -i "/^$/d" ipjk.txt
else
echo "$(cur_time) 第$i次检查$ip未回应PING报文" >> /root/connectfail.log
sleep 2
fi
done
done < /root/ipjk.txt
sed -i "/^$/d" ipadd.txt
###########################当IP恢复时,发送恢复告警
while read ip
do
[ -z $ip ] && echo "ipadd.txt存在空格 检查文件格式" && exit 1
ping -W 2 -c 1 $ip &>/dev/null
if [ $? = 0 ];then
echo -e "$(cur_time) $ip 已恢复" >> /root/connectfail.log
u=$(grep -w "$ip" ipjk.txt|wc -l)
if [ $u -eq 1 ];then
echo "$(cur_time) $ip已存在" >> /root/connectfail.log
else
echo "$ip" >> ipjk.txt
fi
sed -i "s|\<$ip\>||" ipadd.txt
sed -i "/^$/d" ipadd.txt
info=`echo -e "$(cur_time)\n$ip 已恢复\n$(systemname)\n\n$(fail_time)"`
wx_ip
echo -e "$(cur_time)\n$ip 已恢复\n$(systemname)\n\n$(fail_time)"|mail -s "【IP已恢复】" 450433231@qq.com
else
echo "$(cur_time) 第$i次检查$ip未回应PING报文" >> /dev/null
fi
done < /root/ipadd.txt#!/bin/bash
#分析日志计算时间
fail_time(){
starttime=`tail -n 500 connectfail.log |grep "$ip"|grep "第1次"|tail -n 1|awk '{print $1, $2}'`
endtime=`tail -n 500 connectfail.log |grep "$ip"|grep "已恢复"|tail -n 1|awk '{print $1, $2}'`
startm=$(date --date="$starttime" +%M);
endm=$(date --date="$endtime" +%M);
starth=$(date --date="$starttime" +%H);
endh=$(date --date="$endtime" +%H);
startd=$(date --date="$starttime" +%d);
endd=$(date --date="$endtime" +%d);
echo "本次故障开始时间 $starttime"
echo "本次故障结束时间 $endtime"
day=$(($((10#$endd)) - $((10#$startd))))
hour=$(($((10#$endh)) - $((10#$starth))))
minute=$(($((10#$endm)) - $((10#$startm))))
total=$(($(($day * 24 * 60)) + $(($hour * 60 )) + $minute))
echo "本次故障持续时间: $((total / 60)) h $(($total % 60)) m"
}
企业微信告警效果
创新互联2013年至今,先为休宁县等服务建站,休宁县等地企业,进行企业商务咨询服务。为休宁县企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
邮件告警效果
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
名称栏目:ShellIP地址监控-创新互联
文章来源:
http://6mz.cn/article/cdgids.html