0

タイトルに書いてあるのか

サーバーのロード時間を測定する必要があり、この値がしきい値よりも高い場合は、Web サーバーを自動的に再起動します。

単純な GNU bash を使用して http サーバーの応答を計る方法は?

4

2 に答える 2

1

abまたはapacheベンチマークの出力をスクリプト化してアクションを実行できます。また、ログ形式として%Dが有効になっていることを確認してください。したがって、テストのスクリプトを作成するのではなく、ログファイルの末尾にスクリプトを作成し、しきい値を超えて再起動するのに時間がかかる場合は、スクリプトを作成できます。

スクリプトは次のとおりです。

    #!/bin/bash

    # alert threshold  - amount of times to go over limit before capturing it as an issue;
    ALERT_THRESHOLD=3

    # alert time in seconds
    # so this is the time it takes to load the page anything exceeding set seconds
    ALERT_LIMIT=60;
    ALERT_LIMIT_MILI=$(echo $ALERT_LIMIT|awk '{$3=$1*1000; print $3}')

    TAIL_LIMIT=10;
    LOG_FILE="/var/log/apache2/access.log"

      RESULT=$(tail -n $TAIL_LIMIT $LOG_FILE|awk -v alimit=$ALERT_LIMIT_MILI -v athreshold=$ALERT_THRESHOLD 'BEGIN{QUERY=""; i=0; SENDALERT=0} {
    if  ($1 > alimit) { 
            i++; QUERY=QUERY" TIME_TAKEN:"($1/1000)"seconds,"$1"ms|DATE:"$5"|STATUS:"$10"|URL:"$12"\n"; 
            if (i >= athreshold){ 
                    SENDALERT++; 
            }; 
    } 
} END { print "QUERY:"QUERY"\nSENDALERT:"SENDALERT; }')

    SENDALERT=$(echo -e $RESULT|awk -F"SENDALERT:" '{print $2}')
    echo  $SENDALERT

    if [[ $SENDALERT >=1 ]]; then
        echo "restaring apache"
        content=$(echo -e $RESULT|awk -F"QUERY:" '{print $2}')
        (for lines in $(echo $content); do echo $lines; done;)
        #(for lines in $(echo $content); do echo $lines; done;)| mail -s "REstarting apache $(date) "  root@localhost
    fi

私のテストでは、アラート時間(秒)が0に設定されました。アラートレベル8が表示されます。これらの時間値を持つ行は10行あるため、変数iが制限値の3に達すると、sendalert変数が増加し始めます。これが理由です。最初の2つがしきい値の一部として渡されたため、8として報告されます。

それを実行する:

./script.sh 
ALERT LEVEL:  8
restaring apache
TIME_TAKEN:0.108seconds,108ms|DATE:[07/Mar/2013:22:12:51|STATUS:304|URL:"http://localhost/"
TIME_TAKEN:0.299seconds,299ms|DATE:[07/Mar/2013:22:12:51|STATUS:304|URL:"http://localhost/"
TIME_TAKEN:3.432seconds,3432ms|DATE:[07/Mar/2013:22:12:58|STATUS:200|URL:"-"
TIME_TAKEN:0.217seconds,217ms|DATE:[07/Mar/2013:22:12:58|STATUS:304|URL:"http://localhost/"
TIME_TAKEN:0.117seconds,117ms|DATE:[07/Mar/2013:22:12:58|STATUS:304|URL:"http://localhost/"
TIME_TAKEN:0.101seconds,101ms|DATE:[07/Mar/2013:22:12:58|STATUS:304|URL:"http://localhost/"
TIME_TAKEN:3.255seconds,3255ms|DATE:[07/Mar/2013:22:13:03|STATUS:200|URL:"-"
TIME_TAKEN:0.351seconds,351ms|DATE:[07/Mar/2013:22:13:03|STATUS:304|URL:"http://localhost/"
TIME_TAKEN:0.242seconds,242ms|DATE:[07/Mar/2013:22:13:03|STATUS:304|URL:"http://localhost/"
TIME_TAKEN:0.112seconds,112ms|DATE:[07/Mar/2013:22:13:03|STATUS:304|URL:"http://localhost/"
SENDALERT:8

---- Apacheアクセスログ:

108 127.0.0.1 -  - [07/Mar/2013:22:12:51 +0000] "GET /icons/folder.gif HTTP/1.1" 304 186 "http://localhost/" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0"
299 127.0.0.1 -  - [07/Mar/2013:22:12:51 +0000] "GET /icons/compressed.gif HTTP/1.1" 304 188 "http://localhost/" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0"
3432 127.0.0.1 -  - [07/Mar/2013:22:12:58 +0000] "GET / HTTP/1.1" 200 783 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0"
217 127.0.0.1 -  - [07/Mar/2013:22:12:58 +0000] "GET /icons/blank.gif HTTP/1.1" 304 186 "http://localhost/" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0"
117 127.0.0.1 -  - [07/Mar/2013:22:12:58 +0000] "GET /icons/folder.gif HTTP/1.1" 304 186 "http://localhost/" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0"
101 127.0.0.1 -  - [07/Mar/2013:22:12:58 +0000] "GET /icons/compressed.gif HTTP/1.1" 304 187 "http://localhost/" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0"
3255 127.0.0.1 -  - [07/Mar/2013:22:13:03 +0000] "GET / HTTP/1.1" 200 782 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0"
351 127.0.0.1 -  - [07/Mar/2013:22:13:03 +0000] "GET /icons/folder.gif HTTP/1.1" 304 187 "http://localhost/" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0"
242 127.0.0.1 -  - [07/Mar/2013:22:13:03 +0000] "GET /icons/compressed.gif HTTP/1.1" 304 188 "http://localhost/" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0"
112 127.0.0.1 -  - [07/Mar/2013:22:13:03 +0000] "GET /icons/blank.gif HTTP/1.1" 304 186 "http://localhost/" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0"

ここで、%Dを最初の列の出力として配置し、スクリプトのawkステートメントで$1の値をlimitと比較しています。残りの$10などは、ログのどこに表示されるかによって異なります。

次に、それをスクリプトフォルダーに配置し、冗長性を削除するか、oututをdev nullにポンプして、10分ごとにcronの一部として実行します。

楽しい

于 2013-03-06T08:13:26.740 に答える
0

これは問題を解決するワンライナーです

(time wget -p --no-cache --delete-after www.example.com -q) 2>&1 >/dev/null | grep real | awk -F"[m\t]" '{ printf "%s\n", $2*60+$3 }'

ドットセパレーターを使用して、ページ読み込みの読み込み時間を秒単位で返します。

  • 時間(5)
  • wget
  • おかしい
于 2013-03-06T04:14:22.773 に答える