如何通过分析 Apache 日志来测量请求/秒

如何通过分析 Apache 日志来测量请求/秒

我想测量生产环境中合理的压力测试结果。

如何通过分析 apache 日志来测量 req/sec?

Apache2.2

LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\" %D" combined

我可以使用 %t 和 %D 参数吗?

答案1

你可以实时使用mod_status。您还可以计算给定时间段内 access.log 中的行数,然后计算出速率。类似这样的

#!/bin/bash
LOGFILE=/var/log/apache2/access.log
STATFILE=/var/tmp/apachestats
START=$(wc -l "$LOGFILE" | awk '{print $1}')
PERIOD=10
PRECISION=2
sleep "$PERIOD"
while true
do
    HITSPERSECOND=0
    HITS=$(wc -l "$LOGFILE" | awk '{print $1}')
    NEWHITS=$(( HITS - START ))
    if [[ "$NEWHITS" > 0 ]]
    then
        START=$HITS
        HITSPERSECOND=$(echo -e "scale=$PRECISION\n$NEWHITS / $PERIOD" | bc -l )
    fi
    echo "$(date) rate was $HITSPERSECOND" >>"$STATFILE"
    sleep "$PERIOD"
done

答案2

这篇精彩的文章对我帮助很大...

http://www.inmotionhosting.com/support/website/server-usage/view-level-of-traffic-with-apache-access-log

我已经创建了一组用于分析 Apache 日志的预置命令:

每小时请求数
cat access.log | cut -d[ -f2 | cut -d] -f1 | awk -F: '{print $2":00"}' | sort -n | uniq -c

按日期每小时请求
grep "23/Jan" access.log | cut -d[ -f2 | cut -d] -f1 | awk -F: '{print $2":00"}' | sort -n | uniq -c

每小时请求数(按 IP)
grep "XX.XX.XX.XX" access.log | cut -d[ -f2 | cut -d] -f1 | awk -F: '{print $2":00"}' | sort -n | uniq -c

每分钟请求数:
cat access.log | cut -d[ -f2 | cut -d] -f1 | awk -F: '{print $2":"$3}' | sort -nk1 -nk2 | uniq -c

每分钟的日期请求数:
grep "02/Nov/2017" access.log | cut -d[ -f2 | cut -d] -f1 | awk -F: '{print $2":"$3}' | sort -nk1 -nk2 | uniq -c

URL 每分钟请求数:
grep "[url]" access.log | cut -d[ -f2 | cut -d] -f1 | awk -F: '{print $2":"$3}' | sort -nk1 -nk2 | uniq -c

每 IP 每分钟
grep "XX.XX.XX.XX" access.log | cut -d[ -f2 | cut -d] -f1 | awk -F: '{print $2":"$3}' | sort -nk1 -nk2 | uniq -c

希望它能够帮助任何寻找它的人......

答案3

如何使用类似统计分析

要手动执行,您可以计算日志条目(请求),然后将其除以第一个和最后一个请求之间的秒数。这样,​​您就得到了平均请求/秒。

答案4

我使用 gawk 这样做了:

#!/usr/bin/awk -f
{
        date_hour=gensub(/^\[([^:]*:[0-2][0-9]):.*/,"\\1",1,$4)
        count[date_hour]++
}
END {
        for(i in count) {
                printf("%s %.2f%s\n",i":00",count[i]/3600,"qps")
        }
}

相关内容