天天看點

Shell+Curl監控網站頁面通路狀态,利用SendEmail發郵件通知

下面分享一個監控腳本,對公司幾個主要站點的域名通路情況進行監控,并利用sendemail進行郵件發送。監控腳本裡寫了一個多線程的網站狀态檢測腳本,直接從檔案中讀出站點位址,然後用curl去檢測傳回碼,發現速度非常好,基本幾秒鐘内就能出結果。

[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
      

執行腳本:

[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!

======================================================================

下面是郵件報警設定:

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,那麼就是不能正常通路狀态,需要發送報警郵件!

如下,報警郵件發送給[email protected][email protected]兩個郵箱:
[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 [email protected] -t [email protected] -s smtp.kevin.cn -u "Domain monitoring" -o message-content-type=html -o message-charset=utf8 -xu [email protected] -xp zh@123bj -m "[$url] can not normally access,please deal with it as soon as possible "
/usr/local/bin/sendEmail -f [email protected] -t [email protected] -s smtp.kevin.cn -u "Domain monitoring" -o message-content-type=html -o message-charset=utf8 -xu [email protected] -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 [email protected]                                  #發件人郵箱
-t [email protected]                            #收件人郵箱
-s smtp.kevin.cn                                 #發件人郵箱的smtp伺服器
-u "....."                                       #郵件的标題
-o message-content-type=html                     #郵件内容的格式,html表示它是html格式
-o message-charset=utf8                          #郵件内容編碼
-xu [email protected]                                 #發件人郵箱的使用者名
-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 [email protected] -t [email protected] -s smtp.kevin.cn -u 'Domain monitoring' -o message-content-type=html -o message-charset=utf8 -xu [email protected] -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 [email protected] -t [email protected] -s smtp.kevin.cn -u 'Domain monitoring' -o message-content-type=html -o message-charset=utf8 -xu [email protected] -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 [email protected] -t [email protected] -s smtp.kevin.cn -u 'Domain monitoring' -o message-content-type=html -o message-charset=utf8 -xu [email protected] -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 [email protected] -t [email protected] -s smtp.kevin.cn -u 'Domain monitoring' -o message-content-type=html -o message-charset=utf8 -xu [email protected] -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!      

登陸[email protected]郵箱,發現已經收到報警郵件了!最後添加計劃任務,每5分鐘執行一次

[root@bastion-IDC ~]# crontab -l
#domain monit
*/5 * * * * /bin/bash -x /root/url-mail.sh >/dev/null 2>&1      

*************** 當你發現自己的才華撐不起野心時,就請安靜下來學習吧!***************