URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8493
[ Назад ]

Исходное сообщение
"Анализ больших логов apache(nginx) access"

Отправлено sumaster , 28-Окт-09 16:13 

Появилась необходимость получить статистику самых частых ошибок на основе анализа apache(nginx) access логов.
Размер логов > 5 Гб за сутки.

Пример желаемого отчета:
<кол-во повторов ошибки> <код (404,503 ...)> <запрос> <domain> <reffer>
<кол-во повторов ошибки> <код (404,503 ...)> <запрос> <domain> <reffer>
...

AWStats - не получается использовать т.к. процесс анализа умирает из-за огромного размера лога

Анализатор visitors (http://www.hping.org/visitors/) - не показывает рефферы 404 ошибок, без реффера невозможно определить адрес страницы на которой находится битая ссылка

Написал простенький анализатор на основе awk

awk '($9 !~ /200|304/)' $log | awk '{print $9,$7,$11}' | sort | uniq -c | sort -r -n | head -n 70

В результате его работы получаю отчет вида
<кол-во повторов ошибки> <код (404,503 ...)> <запрос> <reffer>

Вопрос: существуют ли другие решения которые могут предоставить расширенную статистику ошибок на основе access логов?


Содержание

Сообщения в этом обсуждении
"Анализ больших логов apache(nginx) access"
Отправлено xyz , 28-Окт-09 17:29 
ротация лога раз в несколько часов + австатс на более мелких кусках
>[оверквотинг удален]
>Написал простенький анализатор на основе awk
>
>awk '($9 !~ /200|304/)' $log | awk '{print $9,$7,$11}' | sort |
>uniq -c | sort -r -n | head -n 70
>
>В результате его работы получаю отчет вида
><кол-во повторов ошибки> <код (404,503 ...)> <запрос> <reffer>
>
>Вопрос: существуют ли другие решения которые могут предоставить расширенную статистику ошибок на
>основе access логов?


"Анализ больших логов apache(nginx) access"
Отправлено McLeod095 , 28-Окт-09 17:51 
>[оверквотинг удален]
>>Написал простенький анализатор на основе awk
>>
>>awk '($9 !~ /200|304/)' $log | awk '{print $9,$7,$11}' | sort |
>>uniq -c | sort -r -n | head -n 70
>>
>>В результате его работы получаю отчет вида
>><кол-во повторов ошибки> <код (404,503 ...)> <запрос> <reffer>
>>
>>Вопрос: существуют ли другие решения которые могут предоставить расширенную статистику ошибок на
>>основе access логов?

От себя ничего полезного посоветовать не могу, но пока в качестве временных мер хочу предложить вместо awk использовать perl. сам на себе проверил что на больших файлах perl работает заметно шустрее чем awk, правда у меня файлы были от 100 мегбайт.

и кстати
awk '($9 !~ /200|304/ {print $9,$7,$11})' $log должно работать быстрее :-)

СОРРИ за флуд


"Анализ больших логов apache(nginx) access"
Отправлено angra , 29-Окт-09 08:50 
Во первых perl быстрее, во вторых больше возможностей. Обрабатывались им и куда большие объемы. Правильно написанный вариант на perl справится с таким объемом за несколько минут. При желании можно его вообще сделать работающим по принципу tail -f да еще и  интерактивным.
Если с perl не дружите, то опишите _детально_ задачу, как будет время займусь.

"Анализ больших логов apache(nginx) access"
Отправлено sumaster , 29-Окт-09 10:03 
>Во первых perl быстрее, во вторых больше возможностей. Обрабатывались им и куда
>большие объемы. Правильно написанный вариант на perl справится с таким объемом
>за несколько минут. При желании можно его вообще сделать работающим по
>принципу tail -f да еще и  интерактивным.
>Если с perl не дружите, то опишите _детально_ задачу, как будет время
>займусь.

спасибо
понял
1. готовых решений для анализа больших логов (вроде awstats) нет
2. нужно изучать perl


"Анализ больших логов apache(nginx) access"
Отправлено Pahanivo , 29-Окт-09 10:13 
3. частая ротация

"Анализ больших логов apache(nginx) access"
Отправлено greenwar , 10-Ноя-09 11:02 
>Пример желаемого отчета:
><кол-во повторов ошибки> <код (404,503 ...)> <запрос> <domain> <reffer>
><кол-во повторов ошибки> <код (404,503 ...)> <запрос> <domain> <reffer>

нужен визуальный пример строки, которую нужно зацепить
ну и также не помешает пример строки, которую цеплять не нужно

ну а на основе пока имеющихся данных будет как-то так:

#!/usr/bin/perl

use warnings;

my$from="/path/to/logfile"; # откуда брать данные для обработки
my$to="/report/file"; # куда скидывать обработанный вывод

open(FH,"$from");
open(TO,">$to");
while(<FH>){
next if !/код (404,503)/g;
$total++;
print TO "$_"; # не ставлю \n, потому что строки в исходном файле уже с ним
}
print TO "\nвсего ошибок: $total\n";

получите список ошибок 404,503 и общее их кол-во в файл /report/file


"Анализ больших логов apache(nginx) access"
Отправлено greenwar , 10-Ноя-09 13:16 
попался мне тут лог httpd_access на глаза. соот-но, код меняем на этот:

#!/usr/bin/perl

use warnings;

$from="httpd_access.log";
$to="httpd_parsed";
$total403=$total404=0;

open(FH,"$from")or die"не открывается $from: $!\n";
open(NEW,">$to");

while(<FH>){
    next if !/" (?:403|404) \d/;

    if(/" 403 \d/){print NEW "$_";$total403++}
    if(/" 404 \d/){print NEW "$_";$total404++}
}
print NEW "\nвсего ошибок 403: $total403
всего ошибок 404: $total404\n";


"Анализ больших логов apache(nginx) access"
Отправлено Leo , 08-Май-12 01:31 
Народ, помогите плиз?
Нужно написать скрипт на перл а у меня с ним опыта вобще никакого.
Задача:
Есть 4 папки в папке /weblogs
в каждой из них лежит немерянное количество архивированных логов апача.
Теперь есть файлик с 80тью IP адресами, и надо получить отчет какой адрес в каком файле встречается.

Человек который поставил задачу посоветовал применить перл хэши.
Вот сижу теперь ломаю голову что это такое и с чем его едят :(

Заранее благодарен за помощь.