Shell Web監控

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

監控效果 以下圖:優化

image.png

image.png

對外使用用郵件發送告警,由於政務雲監控的web太多了都要發送郵件,郵箱常常被認爲供給發送垃圾郵件,被封了好屢次。網站

image.png

1次告警1次恢復,這裏防止屢次告警,一次故障只會發出2封郵件,恢復用第三個腳本控制,用於政務雲平臺WEB監控。url


3次不可達中止告警,恢復告警一次,告警@相關係統人員,使用第二個腳本控制,用於長威內部系統監控告警。郵件可選,內部用企業微信比較快。

image.png




#!/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
相關文章
相關標籤/搜索