Слияние нескольких логов Apache в один (Натолкните на мысль пожалуйста)

Модератор: Модераторы разделов

Devon
Сообщения: 101
ОС: Debian, Mac, SlackHat :)

Слияние нескольких логов Apache в один

Сообщение Devon »

Исходные данные:
имеется n-ое (от 10 и больше) количество стандартныйх combined логов за один период времени (сутки). Суммарный размер логов под гиг, может больше.

Задача:
слить эти логи в один в отсортированном по времени виде, т.е. мне нужно получить такой файл, как будто бы этот лог писался одним единственным Апачем.

Мысли есть, но все какие-то костыльно-кривые и маловразумительные. Пока двигаются в напралении выдергивания даты, преобразования ее в таймштап, сортировки по таймштампу, преобразования таймштампа назад и записи, но как и на чем это сделать не могу придумать. Особено смущает, что придется гиг, а то и больше, загонять в операч. Был у меня уже такой чудо-скрипт, пришлось на Питоне переписать. И почему-то мне кажется, что решение не сложное, просто я что-то очевидное упускаю.
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: Слияние нескольких логов Apache в один

Сообщение rm_ »

Приведите пример записи в логе.
Спасибо сказали:
Devon
Сообщения: 101
ОС: Debian, Mac, SlackHat :)

Re: Слияние нескольких логов Apache в один

Сообщение Devon »

Вот пример, обычный комбинированный лог.

Код:

95.78.138.178 - - [16/Jan/2009:00:49:38 +0300] "GET /favicon.ico HTTP/1.1" 200 0 "http://site.ru/" "Opera/9.62 (Windows NT 5.1; U; ru) Presto/2.1.1" 95.78.138.178 - - [16/Jan/2009:00:50:10 +0300] "GET /img/magic/ HTTP/1.1" 200 16732 "http://site.ru/" "Opera/9.62 (Windows NT 5.1; U; ru) Presto/2.1.1" 89.207.177.7 - - [16/Jan/2009:00:51:43 +0300] "GET / HTTP/1.0" 200 54083 "-" "check_http/v1759 (nagios-plugins 1.4.10)"


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

З.Ы. Перл практически не знаю, тут я пасс, если что.
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: Слияние нескольких логов Apache в один

Сообщение rm_ »

Devon
Мне видится решение из двух частей:
1) Сконвертировать дату "16/Jan/2009:00:49:38 +0300" в формат UNIX Timestamp, представляющий из себя кол-во секунд с 1970-го года; добавить это число в самое начало каждой записи. Это можно сделать на питоне, построчно. Грузить и держать всё в оперативке - не обязательно.
2) Шелл-скриптом слить все файлы в один, после чего с помощью программы sort (ключ -n) отсортировать записи. Они окажутся отсортированными по timestamp'у (который мы добавили в их начало), а значит - по дате.
Почему две части - чтоб не слишком уж активно ворочать гигабайтными файлами на питоне. Есть мнение, что простые cat и sort с этим управятся гораздо быстрее.
Спасибо сказали:
Devon
Сообщения: 101
ОС: Debian, Mac, SlackHat :)

Re: Слияние нескольких логов Apache в один

Сообщение Devon »

rm_
благодарю! Идея впихнуть таймштамп в начало строки и прогнать sort-ом мне в голову не приходила. Из адекватных пришла после небольшого совещания только считывать из каждого из конфигов одну строку, сравнивать с остальными строками из других конфигов, и если она меньшая по дате, то писать ее в общий лог и читать следующую, и снова круговое сравнение. Попробую реализовать оба варианта, посмотрим какой будет более быстрым и менее ресурсоемким, в Вашем ведь еще придется потом питоном или awk отрезать таймштамп, что еще прибавляет время обработки.
Спасибо сказали:
Devon
Сообщения: 101
ОС: Debian, Mac, SlackHat :)

Re: Слияние нескольких логов Apache в один

Сообщение Devon »

Написал по варианту rm_ - питон обрабатывает логи построчно, потом они сортируются уже sort -n и вырезается таймштамп sed-ом. При обработке самого злого набора логов в 1,4 гига sort сожрал около 256 Мб оперативки, что в общем для сервера, где ведется обрабока, приемлемо. В свободное от неотложных дел время попробую переписать на питоне полностью, пока пусть так живет. Всем спасибо!
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: Слияние нескольких логов Apache в один

Сообщение rm_ »

Devon
Отлично. :)
Если Вы поправите Питоновский добавляющий таймстемпы скрипт таким образом, чтобы он всегда добавлял фиксированное кол-во символов (с запасом, к примеру пятнадцать: 000001234567890), вырезать эти таймстемпы можно будет даже не sed'ом, а программой colrm, что, вероятно, быстрее.
Спасибо сказали:
Devon
Сообщения: 101
ОС: Debian, Mac, SlackHat :)

Re: Слияние нескольких логов Apache в один

Сообщение Devon »

Спасибо, поэксперементирую по-разному. Главное пока работает приемлемо, созданные этим способом логи парсятся во всю сейчас, без ошибок.
Спасибо сказали: