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 变量,这就是为什么它报告为 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 的值与限制进行比较。其余的 $10 等是根据我的日志中出现的位置。

然后,您可以将其放在某个脚本文件夹中,删除冗长或将输出抽到 dev null 并作为 cron 的一部分每 10 分钟运行一次或其他什么

请享用

于 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
  • awk
于 2013-03-06T04:14:22.773 回答