shell web監控腳本,全套都在裏面了 ,斷定規則改了幾回,多個結合的用能夠看舊版本的,後續懶得寫新的。
web
舊版本連接:shell
https://blog.51cto.com/junhai/2407485
這次有3個腳本組成,寫下大體實現的過程數據庫
計算故障時間效果在: bash
https://blog.51cto.com/junhai/2443931
使用微信機器人:微信
https://blog.51cto.com/junhai/2424374
由於沒用數據庫只能這樣用3個txt了 ,實際上是我不會。。。。。。- -! 多個sed能夠sed -e寫成1句,懶得花時間優化了。curl
url.txt(存放監控連接)> url.del(存放不可達的網址,第二個腳本分析後在)>url.add(第三個腳本分析是否網址是否恢復)ide
監控效果 以下圖:優化
對外使用用郵件發送告警,由於政務雲監控的web太多了都要發送郵件,郵箱常常被認爲供給發送垃圾郵件,被封了好屢次。網站
1次告警1次恢復,這裏防止屢次告警,一次故障只會發出2封郵件,恢復用第三個腳本控制,用於政務雲平臺WEB監控。url
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