Shell IP地址監控

#!/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"

}

企業微信告警效果 bash

image.png

郵件告警效果
微信

image.png

image.png

相關文章
相關標籤/搜索