#!/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 $ipelse        echo "$ip"fi}# 判断文件是否存在[ ! -f /root/ipjk.txt ] && echo "ipjk.txt文件不存在" && exit 1[ ! -f /root/ipadd.txt ] && touch ipadd.txt#去除文件空格sed -i '/^$/d' /root/ipjk.txtwhile read ipdo[ -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 ];theninfo=`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.txtsed -i "/^$/d" ipjk.txt                else                        echo "$(cur_time) 第$i次检查$ip未回应PING报文" >> /root/connectfail.log                        sleep 2                fi        donedone < /root/ipjk.txtsed -i "/^$/d" ipadd.txt###########################当IP恢复时,发送恢复告警while read ipdo    [ -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.comelse    echo "$(cur_time) 第$i次检查$ip未回应PING报文" >> /dev/null        fidone < /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"}

企业微信告警效果 

邮件告警效果