ケース13、CDN各ノードが正常かどうかを監視する
5870 ワード
CDNは、ユーザーがWebサイトにアクセスする体験を向上させることができます.CDNは通常、全国の各都市や海外にノードを配置し、ユーザーがアクセスするノードを近く選択できるようにし、応答的にも帯域幅消費的にも良い表現をすることができます.しかし逆に言えば,ノードが多くなると,あるノードに問題が発生する可能性が大きくなる.
このケースでは、各CDNノードを監視し、正常かどうかを確認する必要があります.具体的なニーズ:
1)すべてのCDNノードIPのテキスト(/data/cdn_ip.list)を提供する
2)監視リンクアドレス(http://www.apelearn.com/test.php)
3)ノードとソース局のアクセス結果が一致するかどうかを比較する(ソースノードIPは:88.88.88)
4)あるノードに問題が発生した場合、警告メールを送る必要がある[email protected]
5)1分間に1回のスクリプトを実行し、警告を収束させる必要があります.つまり、ノードに障害があることを発見したら、すぐに警告し、障害がずっとある場合、次の警告は30分後に行う必要があります.
6)このスクリプトは、ソース局が正常でない場合、つまりソース局が正常であることを考慮する必要はありません.
知識点1:curlコマンド
curlはhttpリソースにアクセスするコマンドラインツールで、Webサーバをテストするのによく使います.curlコマンドの後に直接Webサイトにリンクすると、アクセスしたコンテンツが現在の端末の下に表示され、次のように使用されます.
curlコマンドは非常に実用的で、多くの使い方があります.以下はcurlの一般的な使い方です.
1)curlでファイルをダウンロードする:
-Oを使用すると、logo.pngを現在のディレクトリに直接ダウンロードすることもできます.-oを使用してダウンロードしたファイルの名前を変更することもできます.
2)ヘッダー情報の表示
3)プロキシサーバーの指定
説明:-xの後に続くのはプロキシサーバーのIP:portで、あるサーバーの上のウェブサイトをテストするために、-xでそのサーバーのIPを指定することができて、つまりこのIPは必ずしもプロキシサーバーではありませんて、webサーバー自身で、その作用はDNSの中でこのドメイン名をこのIPに解析したのと似ています.-xオプションに加えて、類似の効果を実現する方法もあります.例:
これで127.0.0.1という機械にアクセスしましたhttp://www.apelearn.com/test.php.
4)カスタムrefer
5)カスタムuser_agent
6)タイムアウト時間の指定
このケースのリファレンススクリプト
需要の拡張
指定したページのステータスコードが200であるかどうかを監視します.スクリプトは次のとおりです.
このケースでは、各CDNノードを監視し、正常かどうかを確認する必要があります.具体的なニーズ:
1)すべてのCDNノードIPのテキスト(/data/cdn_ip.list)を提供する
2)監視リンクアドレス(http://www.apelearn.com/test.php)
3)ノードとソース局のアクセス結果が一致するかどうかを比較する(ソースノードIPは:88.88.88)
4)あるノードに問題が発生した場合、警告メールを送る必要がある[email protected]
5)1分間に1回のスクリプトを実行し、警告を収束させる必要があります.つまり、ノードに障害があることを発見したら、すぐに警告し、障害がずっとある場合、次の警告は30分後に行う必要があります.
6)このスクリプトは、ソース局が正常でない場合、つまりソース局が正常であることを考慮する必要はありません.
知識点1:curlコマンド
curlはhttpリソースにアクセスするコマンドラインツールで、Webサーバをテストするのによく使います.curlコマンドの後に直接Webサイトにリンクすると、アクセスしたコンテンツが現在の端末の下に表示され、次のように使用されます.
# curl www.baidu.com
curlコマンドは非常に実用的で、多くの使い方があります.以下はcurlの一般的な使い方です.
1)curlでファイルをダウンロードする:
# curl -O http://www.apelearn.com/src/logo.png
-Oを使用すると、logo.pngを現在のディレクトリに直接ダウンロードすることもできます.-oを使用してダウンロードしたファイルの名前を変更することもできます.
# curl -o a.png http://www.apelearn.com/src/logo.png
2)ヘッダー情報の表示
# curl -l http://www.apelearn.com/src/logo.png // ,200 , URL 。
HTTP/1.1 200 OK
3)プロキシサーバーの指定
# curl -x127.0.0.1:80 http://www.apelearn.com/src/logo.png
説明:-xの後に続くのはプロキシサーバーのIP:portで、あるサーバーの上のウェブサイトをテストするために、-xでそのサーバーのIPを指定することができて、つまりこのIPは必ずしもプロキシサーバーではありませんて、webサーバー自身で、その作用はDNSの中でこのドメイン名をこのIPに解析したのと似ています.-xオプションに加えて、類似の効果を実現する方法もあります.例:
# curl -H "Host:www.apelearn.com" http://127.0.0.1/test.php
これで127.0.0.1という機械にアクセスしましたhttp://www.apelearn.com/test.php.
4)カスタムrefer
# curl -e "http://www.baidu.com/1.txt" http://www.apelearn.com/test.php
5)カスタムuser_agent
# curl -A "This is a test user_agent" http://www.apelearn.com/test.php
6)タイムアウト時間の指定
# curl --connect-timeout 2 http://aaa.com/123.html // 2 ,
このケースのリファレンススクリプト
#!/bin/bash
# CDN
# :
# :
url="http://www.aminglinux.com/test.php"
s_ip="88.88.88.88"
ipf="/data/cdn_ip.list"
[email protected]
# curl
if ! which curl &>/dev/null
then
yum install -y curl
fi
mycurl()
{
curl --connect-timeout 2 -x$1:80 $url 2>/dev/null
}
# ( mail.py )
m_mail() {
log=$1
t_s=`date +%s`
t_s2=`date -d "1 hours ago" +%s`
if [ ! -f /tmp/$log ]
then
# $log
touch /tmp/$log
# a , ,
chattr +a /tmp/$log
# , 1
echo $t_s2 >> /tmp/$log
fi
# $log ,
t_s2=`tail -1 /tmp/$log|awk '{print $1}'`
# ,
echo $t_s>>/tmp/$log
#
v=$[$t_s-$t_s2]
# 1800,
if [ $v -gt 1800 ]
then
# , $2 mail ,
python mail.py $mail_user " $1 " "`cat $2`" 2>/dev/null
# , 0
echo "0" > /tmp/$log.count
else
# , 0
if [ ! -f /tmp/$log.count ]
then
echo "0" > /tmp/$log.count
fi
nu=`cat /tmp/$log.count`
#30 1 , 1
nu2=$[$nu+1]
echo $nu2>/tmp/$log.count
# 30 ,
if [ $nu2 -gt 30 ]
then
python mail.py $mail_user " $1 30 " "`cat $2`" 2>/dev/null
# , 0
echo "0" > /tmp/$log.count
fi
fi
}
mycurl $s_ip >/tmp/s.html
for ip in `cat $ipf`
do
mycurl $ip >/tmp/$ip.html
# CDN
diff /tmp/s.html /tmp/$ip.html > /tmp/$ip.diff 2>/dev/null
n=`wc -l /tmp/$ip.diff|awk '{print $1}'`
# , 0
if [ $n -gt 0 ]
then
m_mail $ip /tmp/$ip.diff
fi
done
需要の拡張
指定したページのステータスコードが200であるかどうかを監視します.スクリプトは次のとおりです.
#/bin/bash
# 200
# :
# :
url="http://www.test.com/test.html"
[email protected]
# curl
if ! which curl &>/dev/null
then
yum install -y curl
fi
# ( mail.py )
m_mail() {
log=$1
t_s=`date +%s`
t_s2=`date -d "1 hours ago" +%s`
if [ ! -f /tmp/$log ]
then
# $log
touch /tmp/$log
# a , ,
chattr +a /tmp/$log
# , 1
echo $t_s2 >> /tmp/$log
fi
# $log ,
t_s2=`tail -1 /tmp/$log|awk '{print $1}'`
# ,
echo $t_s>>/tmp/$log
#
v=$[$t_s-$t_s2]
# 1800,
if [ $v -gt 1800 ]
then
# , $2 mail ,
python mail.py $mail_user "$url " "`cat $2`" 2>/dev/null
# , 0
echo "0" > /tmp/$log.count
else
# , 0
if [ ! -f /tmp/$log.count ]
then
echo "0" > /tmp/$log.count
fi
nu=`cat /tmp/$log.count`
#30 1 , 1
nu2=$[$nu+1]
echo $nu2>/tmp/$log.count
# 30 ,
if [ $nu2 -gt 30 ]
then
python mail.py $mail_user "$url 30 " "`cat $2`" 2>/dev/null
# , 0
echo "0" > /tmp/$log.count
fi
fi
}
curl -I $url &>/tmp/curl.txt
code=`grep '^HTTP/1.1' /tmp/curl.txt|awk '{print $2}'`
if [ -z "$code" ] || [ $code -ne 200 ]
then
m_mail webcode /tmp/curl.txt
fi