This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
|
logrep [2013/06/01 08:20] kyxap создано |
logrep [2013/12/15 16:53] (current) kyxap |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Анализ логов nginx / apache с помощью скриптов wtop и logrep ====== | + | {{tag>nginx apache logs wtop logrep}}====== Анализ логов nginx / apache с помощью скриптов wtop и logrep ====== |
| Фантастически полезная вещь для анализа логов вебсервера. \\ | Фантастически полезная вещь для анализа логов вебсервера. \\ | ||
| Line 5: | Line 5: | ||
| Очень быстро позволяют отловить медленные выполняющиеся запросы, найти использованную уязвимость, определить файлы с самым большим количеством трафика, отфильтровать ддос-ботов, выбрать самые популярные файлы для перемещения на SSD-кеш, собирать гео-статистику в live режиме, а так же железным аргументом дерзко попячить гордое щячло любителей денвера. \\ | Очень быстро позволяют отловить медленные выполняющиеся запросы, найти использованную уязвимость, определить файлы с самым большим количеством трафика, отфильтровать ддос-ботов, выбрать самые популярные файлы для перемещения на SSD-кеш, собирать гео-статистику в live режиме, а так же железным аргументом дерзко попячить гордое щячло любителей денвера. \\ | ||
| - | Скрипты написаны на python, соответственно, работать должны везде. | + | Скрипты написаны на python, соответственно, работать должны везде. \\ |
| - | http://code.google.com/p/wtop/ | + | Брать по адресу 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. \\ | ||
| + | |||
| + | ===== Формирование списка наиболее востребованных файлов для выноса на SSD-диск (для Nginx) ===== | ||
| + | |||
| + | Т.к. изначально скрипт создавался для работы с //CustomLog// типа //combined// вебсервера [[http://httpd.apache.org|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 | ||