Назад | Перейти на главную страницу

Как измерить req / sec путем анализа журналов apache

Я хочу измерить обоснованный результат стресс-теста на производственной среде.

Как измерить req / sec, проанализировав логи apache?

apache2.2

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

Могу я сделать с параметрами% t и% D?

Эта замечательная статья мне очень помогла ...

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

надеется, что это поможет любому, кто его ищет ...

В реальном времени вы можете использовать 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

Как насчет использования такого инструмента, как awstat.

Чтобы сделать это вручную, вы можете подсчитать записи журнала (запросы), а затем разделить их на количество секунд между первым и последним запросом. Итак, вы получаете среднее количество запросов в секунду.

Если вы хотите запустить относительно короткие тесты производительности, вы можете следить за запросами или байтами в секунду в режиме реального времени с помощью Apachetop. Это как верхняя в Linux и Unix, но обеспечивает представление вашего Apache. Он работает, отслеживая файл журнала доступа.

Я не знаю, достаточно ли он точен для ваших целей, но он определенно дает вам неплохие приблизительные цифры.