#!/bin/bash
#ipjk.txt存放ip位址 qq450433231
#ip2.txt存放專案名稱 ip位址 等資訊 用於格式化輸出,事先文字定義好ip位置,有利於快速排障
#ipadd.txt存放故障ip位址
#本次更新增加恢復告警 故障時間
. /root/downiptime.sh #根據日誌計算故障時間
#定義時間
cur_time(
)#定義輸出的告警資訊 根據ip查詢ip2.txt檔案輸出告警資訊
systemname(
)# 判斷檔案是否存在
[! -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++));
doping -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
wx "`
echo -e "$(cur_time)
\n$ip 未回應ping報文,請檢查!\n$(systemname)"`
"#傳送郵件告警 修改/etc/mail.rc就可以呼叫第三方郵箱
echo -e "$(cur_time)
\n$ip未回應ping報文,請檢查!\n$(systemname)
"|mail -s "【緊急告警】ip未回應ping報文" [email protected]
#寫入日誌
echo
"$(cur_time)
第$i次檢查$ip未回應ping報文"
>> /root/connectfail.log
#不可達ip移除監控列表
echo
"$ip"
>> ipadd.txt
sed -i "s|\<$ip\>||" ipjk.txt
sed -i "/^$/d" ipjk.txt
else
echo
"$(cur_time)
第$i次檢查$ip未回應ping報文"
>> /root/connectfail.log
sleep 2
fidone
done
< /root/ipjk.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
fised -i "s|\<$ip\>||" ipadd.txt
sed -i "/^$/d" ipadd.txt
wx "`
echo -e "$(cur_time)
\n$ip 已恢復\n$(systemname)
\n\n$(fail_time)"`
"echo -e "$(cur_time)
\n$ip 已恢復\n$(systemname)
\n\n$(fail_time)
"|mail -s "【ip已恢復】" [email protected]
else
echo
"$(cur_time)
第$i次檢查$ip未回應ping報文"
>> /dev/null
fidone
< /root/ipadd.txt
根據日誌計算故障時間指令碼
#!/bin/bash
#分析日誌計算時間
fail_time()'
`endtime=
`tail -n 500 connectfail.log |
grep
"$ip"
|grep
"已恢復"
|tail -n 1|
awk''
`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
60))
h $(($total %
60))
m"}
shell IP位址監控 山炮運維 葉俊海
bin bash 20190710 ip.txt存放ip位址?ip2.txt存放專案名稱?ip位址?等資訊 作為自動化web監控的衍生,針對 多鏈路的需求,寫了ip位址的監控,需要更高頻率監控,不用crontab,直接指令碼內while?true無限迴圈 cur time systemname f?...
ip位址子網劃分工具 大型監控網路系統IP位址規劃
對於監控專案來說,很多故障的大型原因都是跟ip位址設定不當有關,如ip衝突,或者有幾路監控影象沒有顯示等,都是跟ip有一定關聯,合理的分配ip位址十分重要。一 為什麼要合理分配ip?對於小型監控專案來說,ip位址的設定比較簡單,大部分的人都不會出錯,對於超過254個點位的監控專案來說,就有些容易出錯...
python監控 python 監控服務
最近寫了乙個web測試程式,因為部署在其他地方,所以想弄個監控的程序去看服務是不是還在,要是不在好發郵件,就用python簡單的寫了乙個。當然,有的時候也要考慮到監控程序本身就掛了,或者不想監控了。首先監控指令碼是這樣,很簡單 monitor.py coding 簡單的monitor函式,主要監控乙...