Любой метод для прохождения больших файлов журнала? - PullRequest
1 голос
/ 02 сентября 2010

// Java-программисты, когда я имею в виду метод, я имею в виду «способ делать вещи» ...

Привет всем,

Я пишу скрипт для анализа различных файлов журналов в моей компании. Он написан на Perl, хотя у меня есть доступ к Python и, если мне ДЕЙСТВИТЕЛЬНО, C, (хотя моя компания не любит двоичные файлы). Он должен быть в состоянии пройти через последние 24 часа, взять код журнала и проверить его, если мы должны игнорировать или отправить по электронной почте соответствующим людям (мне). Сценарий будет выполняться как задание cron на серверах Solaris. Теперь вот что я имел в виду (это всего лишь псевдо-иш ... и плохо написанное песо)

main()
{
    $today = Get_Current_Date();
    $yesterday = Subtract_One_Day($today);
    `grep $yesterday '/path/to/log' > /tmp/log`    # Get logs from previous day
    `awk '{print $X}' > /tmp/log_codes`;           # Get Log Code
    SubRoutine_to_Compare_Log_Codes('/tmp/log_codes');
}

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

  1. Эти серверы являются производственными и обслуживают пару миллионов клиентов ...
  2. Файлы журналов в среднем имеют размер 3,3 ГБ (это журналы в течение примерно двух дней)

Таким образом, grep не только потребует некоторое время для просмотра каждого файла, но и из-за использования ЦП и памяти в процессе, который необходимо использовать в другом месте. И загрузка в память файла 3.3 ГБ - не самая мудрая идея. (Хотя бы ИМХО). Теперь у меня появилась сумасшедшая идея, связанная с ассемблерным кодом и областями памяти, но я не знаю, что SPARC-сборка ооочень сбрасывает эту идею.

У кого-нибудь есть предложения?

Спасибо, что прочитали это далеко =)

1 Ответ

2 голосов
/ 02 сентября 2010

Возможные решения: 1) заставить систему запускать новый файл журнала каждую полночь - таким образом, вы можете получить файл журнала конечного размера предыдущего дня с пониженным приоритетом;и 2) изменить систему ведения журнала, чтобы она автоматически извлекала определенные сообщения для дальнейшей обработки на лету.

...