Как фильтровать сообщения в RSyslog
Перевод: How To: Filter RSyslog Messages by String
RSyslog
Я наконец-то заканчиваю работать над проектом Центральный сервер RSyslog - практически всё работает так, как и задумывалось. Один из последних штрихов - фильтрация сообщений с перенаправлением в отдельные файлы, чтобы получались файлы с важными сообщениями и файлы со всеми остальными логами.
Зачем Может Понадобиться Фильтровать Логи
Большинство причин связаны с облегчением фокуса на истинно важных сообщениях и ошибках.
ВАЖНО: хочу подчеркнуть, что бывает два типа фильтрации. Первый тип - сообщения отбрасываются и больше нигде не хранятся. Второй тип - сообщения отбрасываются, но сохраняются в отдельный файл - вы их не видите, но они всегда доступны для более глубокого расследования. Я считаю, что вы не должны выбрасывать никакие логи - так что следуйте фильтрации второго типа. Риск пропустить (и навсегда потерять) какие-то важные сообщения в фильтрации первого типа слишком велик.
Так что собирайте и храните все логи, но фильтруйте их в различные файлы и просматривайте только важные и наиболее полезные элементы. А всё остальное хранится в других файлах и даже может подвергаться ротации (регулярной чистке). Но если вдруг случится серьёзная проблема или инцидент - вы с лёгкостью сможете просмотреть полный объём логов, а не только файл с важными сообщениями.
Конкретные Причины Фильтровать Логи
- У вас есть несколько команд или участников команды с различными обязанностями – кто-то следит за логами приложений, кто-то за логами операционной системы
- У вас есть процессы и задачи, нуждающиеся в особо внимательном мониторинге – например, авто-деплои или cron-задачи - часто их логи находятся среди других логов такого же формата - HTTPS, SSH или SUDO логи - так что приходится фильтровать по каким-то ключевым словам
- Часть ваших логов предоставляет слишком много информации – для каждодневного использования эти логи и отладочная информация могут и не понадобиться. Например, при логине на удалённый SSH сервер вам могут быть не нужны логи pam_unix, но при именно отладке PAM модулей это будет полезная информация. Важно знать, чьи попытки логинов были неудачны (это может быть атака), тогда как следить за тем, когда и кто закончил сессию - уже второстепенно.
Как Фильтровать Логи по Строке/Выражению
Сравнительно новый подход - использование так называемых expression-based filters в RSyslog – это лёгкие для чтения и понимания конструкции типа if-then (если-то):
Как Фильтровать Сообщения Syslog по Имени Приложения или Сервиса
Очень полезная фильтрация - можно указать имя программы или процесса.
Например, в этом сообщении sudo - это название процесса, а не текст сообщения, так что фильтрация по примеру выше не сработала бы:
А вот пример совместного использования фильтров: нас интересует сервис sudo, и только те его сообщения, которые имеют элемент COMMAND - в них будут записаны команды, выполненные с повышенными привилениями:
Ссылки
- Проект: централизованный сервер логов на базе RSyslog
- RSyslog – пишем логи каждого клиента в отдельный файл
- Ошибка запуска RSyslog: reading fork pipe
RSyslog Я наконец-то заканчиваю работать над проектом Центральный сервер RSyslog - практически всё работает так, как и задумывалось. Один из последних штрихов - фильтрация сообщений с перенаправлением в отдельные файлы, чтобы получались файлы с важными сообщениями и файлы со всеми остальными логами.
Зачем Может Понадобиться Фильтровать Логи
Большинство причин связаны с облегчением фокуса на истинно важных сообщениях и ошибках.
ВАЖНО: хочу подчеркнуть, что бывает два типа фильтрации. Первый тип - сообщения отбрасываются и больше нигде не хранятся. Второй тип - сообщения отбрасываются, но сохраняются в отдельный файл - вы их не видите, но они всегда доступны для более глубокого расследования. Я считаю, что вы не должны выбрасывать никакие логи - так что следуйте фильтрации второго типа. Риск пропустить (и навсегда потерять) какие-то важные сообщения в фильтрации первого типа слишком велик.
Так что собирайте и храните все логи, но фильтруйте их в различные файлы и просматривайте только важные и наиболее полезные элементы. А всё остальное хранится в других файлах и даже может подвергаться ротации (регулярной чистке). Но если вдруг случится серьёзная проблема или инцидент - вы с лёгкостью сможете просмотреть полный объём логов, а не только файл с важными сообщениями.
Конкретные Причины Фильтровать Логи
- У вас есть несколько команд или участников команды с различными обязанностями – кто-то следит за логами приложений, кто-то за логами операционной системы
- У вас есть процессы и задачи, нуждающиеся в особо внимательном мониторинге – например, авто-деплои или cron-задачи - часто их логи находятся среди других логов такого же формата - HTTPS, SSH или SUDO логи - так что приходится фильтровать по каким-то ключевым словам
- Часть ваших логов предоставляет слишком много информации – для каждодневного использования эти логи и отладочная информация могут и не понадобиться. Например, при логине на удалённый SSH сервер вам могут быть не нужны логи pam_unix, но при именно отладке PAM модулей это будет полезная информация. Важно знать, чьи попытки логинов были неудачны (это может быть атака), тогда как следить за тем, когда и кто закончил сессию - уже второстепенно.
Как Фильтровать Логи по Строке/Выражению
Сравнительно новый подход - использование так называемых expression-based filters в RSyslog – это лёгкие для чтения и понимания конструкции типа if-then (если-то):
Как Фильтровать Сообщения Syslog по Имени Приложения или Сервиса
Очень полезная фильтрация - можно указать имя программы или процесса.
Например, в этом сообщении sudo - это название процесса, а не текст сообщения, так что фильтрация по примеру выше не сработала бы:
А вот пример совместного использования фильтров: нас интересует сервис sudo, и только те его сообщения, которые имеют элемент COMMAND - в них будут записаны команды, выполненные с повышенными привилениями:
Ссылки
- Проект: централизованный сервер логов на базе RSyslog
- RSyslog – пишем логи каждого клиента в отдельный файл
- Ошибка запуска RSyslog: reading fork pipe