下面分享一個監控腳本,對公司幾個主要站點的域名訪問狀況進行監控,並利用sendemail進行郵件發送。監控腳本里寫了一個多線程的網站狀態檢測腳本,直接從文件中讀出站點地址,而後用curl去檢測返回碼,發現速度很是好,基本幾秒鐘內就能出結果。html
[root@bastion-IDC ~]# cat url-monit.sh #!/bin/bash #取出網站數據 data=`cat /root/url.list` if [ -z "$data" ];then echo "Faild to connect database!" exit 1 fi test -f result.log && rm -f result.log function delay { sleep 2 } tmp_fifofile=/tmp/$$.fifo mkfifo $tmp_fifofile exec 6<>$tmp_fifofile rm $tmp_fifofile #定義併發線程數,需根據vps配置進行調整。 thread=100 for ((i=0 ;i<$thread;i++ )) do echo done>&6 #開始多線程循環檢測 for url in $data do read -u6 { #curl抓取網站http狀態碼 code=`curl -o /dev/null --retry 3 --retry-max-time 8 -s -w %{http_code} $url` echo "HTTP Status of $url is $code ">>result.log #判斷子線程是否執行成功,並輸出結果 delay && { echo "HTTP Status of $url is $code" } || { echo "Check thread error!" } echo >& 6 }& done #等待全部線程執行完畢 wait exec 6>&- exit 0 [root@bastion-IDC ~]# cat url.list www.shibo.com www.kevin.com erp.shibo.com graceadmin.kevin.com www.hqsbtime.com qmjjr.kevin.com admin.kevin.com m.kevin.com fq.kevin.com mfq.kevin.com zc.kevin.com mzc.kevin.com uc.kevin.com grace.kevin.com img.kevin.com app.kevin.com www.shibo.cn www.kevin.wang.com
執行腳本:bash
[root@bastion-IDC ~]# sh url-monit.sh HTTP Status of app.kevin.com is 301 HTTP Status of grace.kevin.com is 301 HTTP Status of www.kevin.com is 301 HTTP Status of graceadmin.kevin.com is 301 HTTP Status of admin.kevin.com is 301 HTTP Status of mfq.kevin.com is 301 HTTP Status of zc.kevin.com is 301 HTTP Status of erp.shibo.com is 302 HTTP Status of www.shibo.com is 200 HTTP Status of fq.kevin.com is 301 HTTP Status of img.kevin.com is 301 HTTP Status of www.hqsbtime.com is 200 HTTP Status of mzc.kevin.com is 301 HTTP Status of www.shibo.cn is 000 HTTP Status of uc.kevin.com is 301 HTTP Status of qmjjr.kevin.com is 301 HTTP Status of m.kevin.com is 301 HTTP Status of www.kevin.wang.com is 000
測試利用上面的多線程的網站狀態檢測腳本的執行時間,以下,12s多執行完畢!服務器
[root@bastion-IDC ~]# time sh url-monit.sh HTTP Status of app.kevin.com is 301 HTTP Status of grace.kevin.com is 301 HTTP Status of www.kevin.com is 301 HTTP Status of graceadmin.kevin.com is 301 HTTP Status of admin.kevin.com is 301 HTTP Status of mfq.kevin.com is 301 HTTP Status of zc.kevin.com is 301 HTTP Status of erp.shibo.com is 302 HTTP Status of www.shibo.com is 200 HTTP Status of fq.kevin.com is 301 HTTP Status of img.kevin.com is 301 HTTP Status of www.hqsbtime.com is 200 HTTP Status of mzc.kevin.com is 301 HTTP Status of www.shibo.cn is 000 HTTP Status of uc.kevin.com is 301 HTTP Status of qmjjr.kevin.com is 301 HTTP Status of m.kevin.com is 301 HTTP Status of www.kevin.wang.com is 000 real 0m12.782s user 0m0.085s sys 0m0.096s
下面再測試直接curl監測網站狀態的時間:多線程
[root@bastion-IDC ~]# cat testurl-monit.sh #!/bin/bash for url in `cat /root/url.list` do code=`curl -I -s $url | head -1 | cut -d " " -f2` echo "HTTP Status of $url is $code " done
以下,這個腳本執行時間要30s多!併發
[root@bastion-IDC ~]# time sh testurl-monit.sh HTTP Status of www.shibo.com is 200 HTTP Status of www.kevin.com is 301 HTTP Status of erp.shibo.com is 302 HTTP Status of graceadmin.kevin.com is 301 HTTP Status of www.hqsbtime.com is 200 HTTP Status of qmjjr.kevin.com is 301 HTTP Status of admin.kevin.com is 301 HTTP Status of m.kevin.com is 301 HTTP Status of fq.kevin.com is 301 HTTP Status of mfq.kevin.com is 301 HTTP Status of zc.kevin.com is 301 HTTP Status of mzc.kevin.com is 301 HTTP Status of uc.kevin.com is 301 HTTP Status of grace.kevin.com is 301 HTTP Status of img.kevin.com is 301 HTTP Status of app.kevin.com is 301 HTTP Status of www.shibo.cn is HTTP Status of www.kevin.wang.com is real 0m31.689s user 0m0.067s sys 0m0.124s
顯然多線程的測試腳本執行速度要快點!因此保留第一個腳本url-monit.sh!
======================================================================
下面是郵件報警設置:app
1)先下載安裝包到本地,解壓。 [root@bastion-IDC ~]# cd /usr/local/src/ [root@bastion-IDC src]# wget -c http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz [root@bastion-IDC src]# tar -zvxf sendEmail-v1.56.tar.gz [root@bastion-IDC src]# cd sendEmail-v1.56 [root@bastion-IDC sendEmail-v1.56]# cp -a sendEmail /usr/local/bin/ [root@bastion-IDC sendEmail-v1.56]# chmod +x /usr/local/bin/sendEmail [root@bastion-IDC sendEmail-v1.56]# file /usr/local/bin/sendEmail /usr/local/bin/sendEmail: a /usr/bin/perl -w script text executable 2)安裝下依賴 [root@bastion-IDC sendEmail-v1.56]# yum install perl-Net-SSLeay perl-IO-Socket-SSL -y 3)部署發送腳本 這裏因爲一些域名作了跳轉,因此若是發現域名訪問後的結果不是200,301,302,那麼就是不能正常訪問狀態,須要發送報警郵件! 以下,報警郵件發送給wangshibo@kevin.cn和hugang@kevin.cn兩個郵箱: [root@bastion-IDC ~]# cat url-mail.sh #!/bin/bash NUM=$(/bin/sh /root/url-monit.sh|grep -v "200"|grep -v "301"|grep -v "302"|wc -l) DOMAIN=$(/bin/sh /root/url-monit.sh|grep -v "200"|grep -v "301"|grep -v "302"|awk -F" " '{print $4}') if [ $NUM -ne 0 ];then for url in $DOMAIN;do /usr/local/bin/sendEmail -f ops@kevin.cn -t wangshibo@kevin.cn -s smtp.kevin.cn -u "Domain monitoring" -o message-content-type=html -o message-charset=utf8 -xu ops@kevin.cn -xp zh@123bj -m "[$url] can not normally access,please deal with it as soon as possible " /usr/local/bin/sendEmail -f ops@kevin.cn -t hugang@kevin.cn -s smtp.kevin.cn -u "Domain monitoring" -o message-content-type=html -o message-charset=utf8 -xu ops@kevin.cn -xp zh@123bj -m "[$url] can not normally access,please deal with it as soon as possible " done else echo "it is OK" fi ========================================================================================== 郵件發送參數說明: 命令說明: /usr/local/bin/sendEmail #命令主程序 -f ops@kevin.cn #發件人郵箱 -t wangshibo@kevin.cn #收件人郵箱 -s smtp.kevin.cn #發件人郵箱的smtp服務器 -u "....." #郵件的標題 -o message-content-type=html #郵件內容的格式,html表示它是html格式 -o message-charset=utf8 #郵件內容編碼 -xu ops@kevin.cn #發件人郵箱的用戶名 -xp zh@123bj #發件人郵箱密碼 -m "......" #郵件的具體內容 ========================================================================================= [root@bastion-IDC ~]# sh -x url-mail.sh ++ /bin/sh /root/url-monit.sh ++ grep -v 200 ++ grep -v 301 ++ grep -v 302 ++ wc -l + NUM=2 ++ /bin/sh /root/url-monit.sh ++ grep -v 200 ++ grep -v 301 ++ grep -v 302 ++ awk '-F ' '{print $4}' + DOMAIN='www.shibo.cn www.kevin.wang.com' + '[' 2 -ne 0 ']' + for url in '$DOMAIN' + /usr/local/bin/sendEmail -f ops@kevin.cn -t wangshibo@kevin.cn -s smtp.kevin.cn -u 'Domain monitoring' -o message-content-type=html -o message-charset=utf8 -xu ops@kevin.cn -xp zh@123bj -m '[www.shibo.cn] can not normally access,please deal with it as soon as possible ' Oct 25 19:21:43 bastion-idc sendEmail[19668]: Email was sent successfully! + for url in '$DOMAIN' + /usr/local/bin/sendEmail -f ops@kevin.cn -t wangshibo@kevin.cn -s smtp.kevin.cn -u 'Domain monitoring' -o message-content-type=html -o message-charset=utf8 -xu ops@kevin.cn -xp zh@123bj -m '[www.kevin.wang.com] can not normally access,please deal with it as soon as possible ' Oct 25 19:21:47 bastion-idc sendEmail[19672]: Email was sent successfully! + for url in '$DOMAIN' + /usr/local/bin/sendEmail -f ops@kevin.cn -t huang@kevin.cn -s smtp.kevin.cn -u 'Domain monitoring' -o message-content-type=html -o message-charset=utf8 -xu ops@kevin.cn -xp zh@123bj -m '[www.shibo.cn] can not normally access,please deal with it as soon as possible ' Oct 25 19:21:43 bastion-idc sendEmail[19668]: Email was sent successfully! + for url in '$DOMAIN' + /usr/local/bin/sendEmail -f ops@kevin.cn -t hugang@kevin.cn -s smtp.kevin.cn -u 'Domain monitoring' -o message-content-type=html -o message-charset=utf8 -xu ops@kevin.cn -xp zh@123bj -m '[www.kevin.wang.com] can not normally access,please deal with it as soon as possible ' Oct 25 19:21:47 bastion-idc sendEmail[19672]: Email was sent successfully!
登錄wangshibo@kevin.cn郵箱,發現已經收到報警郵件了!最後添加計劃任務,每5分鐘執行一次dom
[root@bastion-IDC ~]# crontab -l #domain monit */5 * * * * /bin/bash -x /root/url-mail.sh >/dev/null 2>&1