Когда я просматриваю журналы на сервере, я хочу получить краткий обзор тех проблем, с которыми я столкнулся, прежде чем я углубился. Обычно я использую нижний однострочный слой, который уменьшает количество строк журнала, которые мне нужно пересмотреть, делая каждую строку более общей и сохраняя только те, которые уникальны.
Один лайнер
cat /var/log/apache2/error.log | sed 's/.*] \(.*\)/\1/' | sed 's/[0-9]*//g' | sort | uniq
объяснение
| sed 's/.*] \(.*\)/\1/'
| sed 's/.*] \(.*\)/\1/'
: удаляет все, что содержится внутри и до последней группы скобок, которая обычно соответствует клиентской/системной информации, такой как [Mon Dec 05 12:01:03 2011] [error] [client abcd]
| sed 's/[0-9]*//g'
| sed 's/[0-9]*//g'
: удаляет числа
| sort | uniq
| sort | uniq
: только поддерживает разные строки.
Чтобы дать вам представление, в /var/log/apache2/error.log
который содержит около 500 строк, это фильтрует до 25 строк. Если вы используете более общие или похожие записи в журнале, тем больше эффективнее однострочный.
Теперь я ищу сценарий (может быть, bash
, perl
, python
или что-то еще на самом деле), которые могли бы сделать то же самое, но немного более продвинутые, чтобы быть еще более эффективными (например, обфускать пути к файлам, алфавитные идентификаторы...) и полезно (укажите количество вхождений каждого сообщения,% по сравнению с общим количеством журналов...).
Вы знаете сценарии, которые это делают?
взгляните на журнал. он отправляет вам ежедневный обзор общих лог файлов. Я использовал его только для почтовых журналов, но afaik также может обрабатывать журналы apache.