Фантастически полезная вещь для анализа логов вебсервера.
Очень быстро позволяют отловить медленные выполняющиеся запросы, найти использованную уязвимость, определить файлы с самым большим количеством трафика, отфильтровать ддос-ботов, выбрать самые популярные файлы для перемещения на SSD-кеш, собирать гео-статистику в live режиме, а так же железным аргументом дерзко попячить гордое щячло любителей денвера.
Скрипты написаны на python, соответственно, работать должны везде.
Брать по адресу http://code.google.com/p/wtop/
Главная утилита - logrep.
wtop лично мне не пригодился.
Руководство к logrep: http://code.google.com/p/wtop/wiki/UsingLogrep
Примеры использования: http://code.google.com/p/wtop/wiki/LogrepCookbook
Самое замечательное в logrep - это возможность применять к выводимым значениям операторы.
Т.е. мы можем полностью сформировать вывод скрипта, состоящий из заданных нами параметров и с примененными к ним необходимыми операторами.
Полный список выходных параметров, которыми мы можем оперировать, указан в руководстве под строкой AVAILABLE FIELDS.
Ключ -o позволяет указать используемые в output значения, разделенные табуляцией. К каждому выводимому зачению можно применить оператор.
count(*) avg(FIELD) mean average min(FIELD) lowest seen value max(FIELD) highest seen value sum(FIELD) summation of all values var(FIELD) population variance dev(FIELD) deviation (square root of variance)
Ключ -s позволяет нам сортировать список, используя параметры вида -s "LIMIT:FIELDS:DIRECTION",
где LIMIT - это общее количество выводимых строк, FIELDS - выводимые значения, а DIRECTION - направление сортировки: 'd' - descending (по умолчанию), 'a' - acending.
Т.к. изначально скрипт создавался для работы с CustomLog типа combined вебсервера Apache, нам необходимо добавить в формат лога nginx переменную $request_time.
Формат лога для nginx
log_format mp4 '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $request_time' ;
Сортировка по top10 URL:
# logrep -o 'url,count(*)' -s '10:2' /home/log/httpd/yziltz.com/access_log /videos/ztod.com/546fg/168nzrr/1.mp4 324 /videos/wtfpass/104ghd/560wyqe/1.mp4 259 /videos/evilangel/1004hf/457elux/1.mp4 205 /videos/ztod.com/546fg/84rqek/1.mp4 203 /videos/wtfpass/104ghd/505dtve/1.mp4 192 /videos/realitykings/986fk/314qiga/1.mp4 173 /videos/wtfpass/104ghd/18ifvr/1.mp4 153 /videos/brazzers/758gf/350ihij/1.mp4 143 /videos/wtfpass/104ghd/533jdzo/1.mp4 125 /videos/bangbros/754hj/100geoo/1.mp4 122
где параметрами -o являются
url - URL файла count(*) - количество всех уникальных вхождений URL,
а параметрами -s
10 - это количество выводимых файлов, 2 - сортировка по полю #2.
В нашем случае поле #2 - это count(*).
Тип сортировки не указан и по умолчанию это 'd' - descending.
Сортировка по top10 URL с отображением дополнительных параметров:
Добавим новые значения в список параметров:
# logrep -o 'url,count(*),avg(msec),sum(bytes)' -s '10:2' /home/log/httpd/yziltz.com/access_log /videos/evilangel/1004hf/457elux/1.mp4 800 63330.12 1265011232 /videos/wtfpass/104ghd/18ifvr/1.mp4 446 55150.93 199966883 /videos/naughty_america/634fs/6kryk/1.mp4 413 66149.11 422437989 /videos/naughty_america/634fs/83nbna/1.mp4 361 41608.23 284347235 /videos/wtfpass/104ghd/606pfgb/1.mp4 352 35669.83 129798205 /videos/wtfpass/104ghd/216pcko/1.mp4 330 50201.86 563510318 /videos/ztod.com/546fg/168nzrr/1.mp4 325 48295.78 238183106 /videos/wtfpass/104ghd/560wyqe/1.mp4 311 121607.30 4415056002 /videos/wtfpass/104ghd/387jkmy/1.mp4 309 52073.58 677026365 /videos/wtfpass/104ghd/505dtve/1.mp4 240 233122.70 1272250219
Дополнительными параметрами будут avg(msec) - среднее время отдачи файла и sum(bytes) - общий трафик, пришедшийся на этот файл.
А теперь добавим фильтр -f, в котором выведем результаты только за последний час (3600 секунд).
Для этого мы применим unixtime как самый простой способ.
# CUR_DATE=`date +"%s"`; HOUR_OFFSET=`echo "$CUR_DATE - 3600" | bc`; logrep -f "ts<$HOUR_OFFSET" -o 'url,count(*),avg(msec),sum(bytes)' -s '10:2' /home/log/httpd/yziltz.com/access_log /videos/ztod.com/546fg/168nzrr/1.mp4 325 48295.78 238183106 /videos/wtfpass/104ghd/560wyqe/1.mp4 267 117390.16 2869373722 /videos/evilangel/1004hf/457elux/1.mp4 225 152913.27 954288822 /videos/ztod.com/546fg/84rqek/1.mp4 203 55998.36 188930211 /videos/wtfpass/104ghd/505dtve/1.mp4 196 216440.77 1093232840 /videos/realitykings/986fk/314qiga/1.mp4 173 203926.49 973211068 /videos/wtfpass/104ghd/18ifvr/1.mp4 161 114550.71 145899888 /videos/wtfpass/104ghd/533jdzo/1.mp4 147 182660.09 1100896430 /videos/bangbros/754hj/100geoo/1.mp4 145 175528.83 609455138 /videos/brazzers/758gf/350ihij/1.mp4 143 213783.88 144107563