Поиск огромных файлов журнала - PullRequest
8 голосов
/ 28 октября 2010

Устранение неполадок, анализ и фильтрация файлов журналов - одно из самых трудоемких ежедневных заданий.Моя проблема заключается в поиске в файле журнала, размер которого может превышать 4 гигабайта.Простая загрузка файла занимает до 15 минут.У меня довольно быстрый процессор с 8 гигабайтами памяти.После загрузки файла у меня буквально есть роскошь grep и / или control + F для сканирования файла.Это становится еще хуже, когда я пытаюсь посмотреть файлы из нескольких систем, каждая из которых весит больше, чем концерт.Попытка разделения файлов на основе меток времени, чтобы сделать их меньше, но на самом деле не радость.

Есть ли инструмент или даже процесс, который я мог бы использовать, чтобы устранение неполадок занимало меньше времени (кроме обычного?)сначала исправьте ошибку ")?

Ваши комментарии приветствуются.

Ответы [ 4 ]

9 голосов
/ 28 октября 2010

Чем вы загружаете его?4 гигабайта - это довольно большой файл, но это не займет много времени для загрузки в память.

Для файлов такого размера я бы порекомендовал использовать grep напрямую, а если grep не делает этого для вас, SED и AWK - ваши друзья.Если вы хотите сделать это в реальном времени, узнайте об использовании этих инструментов в сочетании с конвейерами и tail -f.

Да, я знаю, SED поначалу очень пугает.Это также смехотворно мощно.Выучите это.

Если вы на окнах, вы мне симпатизируете.Могу ли я порекомендовать оболочку Unix?

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

1 голос
/ 28 октября 2010

Если вы хотите исключить строки вещей, которые вы не хотите видеть, вы можете grep -v 'I dont wanna see this' > logWithExcludedLines.log. Вы также можете использовать регулярные выражения grep -vE 'asdf|fdsa' > logWithNoASDForFDSA.log

Этот метод очень хорошо работает с журналами доступа Apache grep -v 'HTTP/1.1 200' > no200s.log (или что-то в этом роде, не помню точную строку).

1 голос
/ 28 октября 2010

Baretail - хороший инструмент. Попробуйте. Я не использовал его для файлов на 4 гигабайта, но мои файлы журналов также довольно большие, и он работает просто отлично. http://www.baremetalsoft.com/baretail/index.php

edit: я не видел, чтобы кто-то уже предлагал baretail.

0 голосов
/ 08 декабря 2010

В настоящее время я делаю такие вещи, используя инструменты командной строки Unix (f) grep, awk, cut, join и т. Д., Которые также доступны для окон с cygwin или UnxUtils и так далее, а также использовать некоторые Scala сценарии для более сложных вещей. Вы можете написать сценарии для поиска, которые охватывают записи файла журнала в нескольких файлах. Но мне также интересно, есть ли что-то лучше, чем - может быть импортирует их в базу данных (оба вопроса ТАК)?

Кстати: замените ваш жесткий диск на SSD. Это способ быстрее! Кроме того, стоит оставить журналы, сжатые gzip, на диске, поскольку при их поиске узким местом является диск. Если вы ищете, скажем, регулярное выражение в лог-файлах и хотите иметь 100 строк контекста для каждого вхождения, вы должны сделать:

zcat *.log.gz | grep -100 '{regexp}' > {outputfile}

и загрузите выходной файл в ваш любимый просмотрщик текстовых файлов. Если вы ищете фиксированные строки, используйте fgrep (аналогично grep с дополнительной опцией -F) - это намного быстрее.

...