The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Анализ больших логов apache(nginx) access"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Анализ больших логов apache(nginx) access"  +/
Сообщение от sumaster (ok) on 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 логов?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Анализ больших логов apache(nginx) access"  +/
Сообщение от xyz on 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 логов?

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Анализ больших логов apache(nginx) access"  +/
Сообщение от McLeod095 (ok) on 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 должно работать быстрее :-)

СОРРИ за флуд

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

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

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

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

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Анализ больших логов apache(nginx) access"  +/
Сообщение от Pahanivo email(ok) on 29-Окт-09, 10:13 
3. частая ротация
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Анализ больших логов apache(nginx) access"  +/
Сообщение от greenwar (ok) on 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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

7. "Анализ больших логов apache(nginx) access"  +/
Сообщение от greenwar (ok) on 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";

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

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

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

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


Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру