Разбор error.log Apache за 15 минут

Встала довольно простая задача: посчитать количество одинаковых ошибок в error.log файлах сервера Apache за месяц. Другими словами нужно было понять, сколько однотипных ошибок было за месяц и сделать соответствующие выводы. На первый взгляд задача простая. Любой программист особо не парясь напишет какой-то свой парсер и получит результаты вывода. Но зачем идти таким путем?

Первоначально я, как любой другой ленивый человек, попытался найти программу, которая сделает за меня все манипуляции и выдаст готовый результат или хотя бы данные, которые в итоге можно будет свести в единую таблицу. Поскольку решил я всем этим делом заняться в пятницу, после трудового дня, то никаких других решений в голове у меня просто не рождалось. Да и не верилось в то, что нет на свете простых и, главное, бесплатных программ, которые могли бы проанализировать error.log сервера. Вот платные аналоги я нашел, но они были или очень крутыми и результат, выданный ими в силу триальности программы, был весьма скуп или выдавали мне любую информацию, но только не то, что мне нужно. В итоге я плюнул на это дело.

На следующий день решение как-то само созрело в голове. Парсить стопку файлов я не хотел – посчитал, что «не барское это дело». Но я знал программу, которая сможет за меня разобрать данные, а потом еще и все посчитать. Я говорю о phpMyAdmin, который, очень полезен при работе с MySQL. Идея простая: из error.log файлов я должен получить CSV файлы, которые я смогу без проблем запихнуть в таблицу, а уж написать запрос по подсчету одинаковых записей дело минутное.

Первое, что я решил сделать, так это объединить все лог-файлы в один. Так мне показалось будет проще. Найти бесплатную программу, которая объединит кучу файлов в один не проблема. Через пару минут я нашел «Easy File Joiner»: она мала и проста и кроме объединения файлов ничего делать не умеет. Т.е. идеально подходит для конкретной задачи. Устанавливаем, запускаем, выбираем нужные файлы,

Easy File Joiner

потом говорим в какой файл все сохранить и все.

Easy File Joiner

На выходе я получил файл из 54622 строки. Не плохо. Однако эти данные не запихнуть в MySQL, поскольку поля в файле никак не определить. И кто же это у нас умеет в текстовом файле создать эти самые поля? Конечно же, Microsoft Excel. Скармливаем ему полученный файл, указав количество полей, которые должны у нас получиться.

На миг показалось, что все готово для загрузки данных в базу. Но, увы, нужно было еще кое-что подправить.

Как видно из рисунка, импорт не был идеальным и на выходе мы получаем несколько некорректные данные. Здесь большого шаманства не нужно. Я просто запустил Notepad++ и самым примитивным Search and Replace заменил куски текста, которые выбивались из нужного формата. Вот теперь был порядок и все что оставалось сделать, так это зайти в phpMyAdmin, создать небольшую таблицу:

CREATE TABLE `errors` (`dates` VARCHAR(36) NOT NULL, `ips` VARCHAR(128) NOT NULL, `error` TEXT NOT NULL)

и загрузить в нее CSV файл. После чего был написан тот самый небольшой SQL запрос, который мне все посчитал. А выведенные данные были экспортированы в Excel, чтобы придать им более презентабельный вид для лучшего понимания.