Я ищу медленные страницы на большом настраиваемом веб-сайте PHP CMS.
Я не хочу копаться в существующем, плохо документированном коде и обнаружил, что журналы доступа apache могут отображать время, затраченное на обслуживание запроса, в секундах и миллисекундах.
Конф:
CustomLog /var/log/httpd/timed_access_log timed
LogFormat "%h %l %u %t \"%r\" %>s %b - %T/%D" timed
Вывод:
86.132.***.*** - - [22/Jun/2010:13:25:31 +0100] "GET /menu/topscript/ HTTP/1.1" 200 183 - 0/12418
86.132.***.*** - - [22/Jun/2010:13:25:31 +0100] "GET /search/script/ HTTP/1.1" 200 266 - 0/13173
86.132.***.*** - - [22/Jun/2010:13:25:31 +0100] "GET /subscribe/script/ HTTP/1.1" 200 279 - 0/12882
Есть ли простой способ найти максимальное среднее количество медленных запросов?
Интересуюсь программами анализа, такими как awstats или awk-скриптами (которые мне никогда не удавалось осмыслить).
Связанный: AWStats и время, затраченное на обслуживание запроса
Мое окончательное решение, основанное на ответе радиуса:
awk '{cnt[$7]+=substr($12,1+match($12,"/")); i[$7]+=1}END{for (x in cnt){if (i[x] > 5) print x,i[x],cnt[x]/i[x]}}' timed_access_log | sort -k3nr | head -20
Учитываются только те, у которых есть не менее 5 запросов, сортируются по убыванию среднего времени и возвращаются 20 лучших.
Вы можете попробовать это, я надеюсь, что это сработает, если вы дадите нам образец файла журнала, я могу проверить, работает ли он
awk '{cnt[$7]+=substr($12,1+match($12,"/")); i[$7]+=1}END{for (x in cnt){print x,cnt[x]/i[x]}}' access_log