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