PHP скрипт анализа логов
Posted in PHP, Tips And Tricks on July 31st, 2009 by Yaroslav Vorozhko – Be the first to commentЗадача была написать скрипт анализа логов, включая:
- обработку повторяющихся ошибок
- подсчетом количества повторов ошибок
- хранение времени появления первого и последнего повтора ошибки
- отправка каждой ошибки на email
- хранение последней позиции курсора файла в первой строке лога
Формат лога представлял собой следующее:
PHP:
-
2009-07-23T10:25:11+00:00 DEBUG (7): Resource 'demo' not found
-
2009-07-24T17:10:20+00:00 DEBUG (7): Resource 'photos' not found
-
2009-07-24T17:11:22+00:00 DEBUG (7): Resource 'photos' not found
Т.е. одна ошибка в одну строку.
После обработки их скриптом, мы получали email с сообщением следующего формата, одна строка это одно сообщение:
PHP:
С помощью хранения последней позиции курсора в файле лога, я получал преимущества в скорости обработки лога, так как при каждом чтении файла, я начинал с последней позиции
Хранить последнюю позицию файла можно было и в базе и в памяти или в другом ресурсе, но мне показалось удобным хранить ее в том же лог-файле, который скрипт обрабатывал.
Вот собственно и сам log_analyzer.php:
PHP:
-
-
-
-
$grabLog = false;
-
$datetime = $matches[1];
-
} else {
-
continue;
-
}
-
$errors[$errorLine]['firsttime'] = $formattedTime;
-
$errors[$errorLine]['lasttime'] = $formattedTime;
-
$errors[$errorLine]['times'] = 1;
-
} else {
-
$errors[$errorLine]['lasttime'] = $formattedTime;
-
$errors[$errorLine]['times']++;
-
}
-
-
}
-
-
-
echo 'not working';
-
}
-
-
-
foreach ($errors as $text => $error){
-
if ($error['times']> 1){
-
$text, $error['times'], $error['firsttime'], $error['lasttime']);
-
} else {
-
$text, $error['times'], $error['firsttime']);
-
}
-
Mail_Notifications::notifyError($body);
-
}
-
}
Скрипт я запускаю с помощью cron каждые 7 минут.
Комментарии
