Демон rsyslog в Linux
Сердцем механизма логирования является демон rsyslog. Эта служба отвечает за прослушивание сообщений из различных частей системы Linux и маршрутизацию сообщений в соответствующий лог-файл в каталоге /var/log. Он также может перенаправлять сообщения на другой сервер Linux.
Например, в Ubuntu правила маршрутизации сообщений по разным лог-файлам Linux содержатся в конфигурационном файле /etc/rsyslog.d/50-default.conf, который подключается внутри /etc/rsyslog.conf.
В файле 50-default.conf для демона rsyslog задаются правила, в какие лог-файлы сохранять различные сообщения.
Каждое правило записывается на отдельной строке и состоит из двух частей — селектора и действия. Селектор и действие разделены пробелом. В селекторе указывается источник и приоритет сообщения, а в действии указывается, что делать с этим сообщением.
Сам селектор состоит из двух частей, разделенных точкой (.). Первая часть называется facility или типом сообщения, вторая часть (после точки) называется priority или приоритетом сообщения.
Вместе пара селектор и действие указывают rsyslog, что делать, когда генерируется сообщение, соответствующее критериям.
Вы можете посмотреть содержимое файла 50-default.conf в Ubuntu с помощью команды:
cat /etc/rsyslog.d/50-default.conf
Результат выполнения будет следующим:
# Default rules for rsyslog.
# For more information see rsyslog.conf(5) and /etc/rsyslog.conf
# First some standard log files. Log by facility.
#
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
#cron.* /var/log/cron.log
#daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
#lpr.* -/var/log/lpr.log
mail.* -/var/log/mail.log
#user.* -/var/log/user.log
#
# Logging for the mail system. Split it up so that
# it is easy to write scripts to parse these files.
#
#mail.info -/var/log/mail.info
#mail.warn -/var/log/mail.warn
mail.err /var/log/mail.err
Чтобы понять, что всё это значит, давайте рассмотрим различные типы сообщений, которые распознает Linux по умолчанию:
authилиauthprivсообщения о событиях, связанных с авторизацией и безопасностьюkernсообщения, генерируемые ядром Linuxmailсообщения, генерируемые почтовой подсистемойcronсообщения, генерируемые демоном crondaemonсообщения, генерируемые различными демонамиnewsсообщения, генерируемые подсистемой сетевых новостейlprсообщения, генерируемые подсистемой вывода на печатьuserсообщения, генерируемые пользовательскими программами- С
local0поlocal7зарезервированы для локального использования
Также рассмотрим список приоритетов в порядке уменьшения приоритета:
emergаварийные ситуацииalertсерьезные ситуации, на которые необходимо срочно отреагироватьcritкритические проблемы, требующие решенияerrразличные ошибки, возникающие во время работыwarnпредупреждения, которые означают, что что-то произошлоnoticeоповещения, на которые стоит обратить вниманиеinfoразличные информационные сообщения, возникающие в процессе работыdebugотладочные сообщения, которые могут быть полезны при решении проблем.
Теперь рассмотрим следующую строку из файла:
cron.* /var/log/cron.log
Это правило указывает демону rsyslog записывать все сообщения, поступающие от демона cron, в файл /var/log/cron.log. Звездочка * после точки означает, что в лог-файл Linux будут записываться сообщения любой приоритетности. Аналогично если тип сообщения указан как звездочка, то это значит, что все типы сообщений будут записываться в указанный файл.
Типы сообщений и приоритеты могут быть связаны по-разному. По умолчанию когда после точки указан только один приоритет, это означает, что все сообщения, равные или выше по приоритету, будут записываться в указанный лог-файл. Следующее правило указывает демону rsyslog записывать все сообщения с приоритетом warn или выше в указанный файл в директории /var/log:
mail.warn /var/log/mail.warn
Это правило значит, что сообщения от почтовой подсистемы с приоритетом warn, err, crit, alert и emerg будут записаны в файл /var/log/mail.warn.
Использование знака равенства = после точки приведет к тому, что в лог-файл будут записываться сообщения только с указанным приоритетом. Поэтому если необходимо записывать только информационные сообщения от почтовой подсистемы, правило необходимо указать с использованием знака равенства:
mail.=info /var/log/mail.info
Также есть возможность записывать сообщения всех приоритетов, кроме указанного. В этом случае в файл mail.info будут записываться все сообщения с приоритетом ниже info:
mail.!info /var/log/mail.info
Во этом случае в файл mail.info будут записываться все сообщения с приоритетом выше info:
mail.!=info /var/log/mail.info
Есть возможность указать несколько типов сообщений в одном правиле, для этого их необходимо разделить запятой:
cron,mail.* /var/log/cronanmail.log
Также в одном правиле возможно указать несколько селекторов, для этого необходимо разделить их точкой с запятой ;:
cron.warn;mail.info /var/log/cronandmail.log
Создание собственных правил логирования
Теперь рассмотрим, как настроить логирование сообщений в отдельные лог-файлы, для этого:
- Добавим правила в отдельный файл
custom.conf - Перезапустим демон
rsyslog - Проверим настроенные правила логирования
Добавлять правила будем в отдельный файл, для разделения стандартных правил и кастомных, чтобы случайно не сломать стандартные правила. Благодаря тому, что в конфигурации rsyslog указано включать все файлы с правилами из директории /etc/rsyslog.d/ мы можем просто создать в нем файл с правилами и дополнительно ничего не настраивать.
Для внесения новых правил откройте файл custom.conf в любом удобном текстовом редакторе, например, vim:
nano /etc/rsyslog.d/custom.conf
Добавьте в файл следующие строки и сохраните изменения:
local4.crit /var/log/local4crit.log
local4.=info /var/log/local4info.log
Затем перезапустите демон rsyslog командой:
systemctl restart rsyslog
Для проверки добавленных правил сгенерируйте новое сообщение с помощью утилиты logger:
logger -p local4.info "Это информационное сообщение от local4"
Проверьте директорию /var/log, в ней появится новый файл:
ll /var/log
Выведите сообщение на экран:
cat /var/log/local4info.log
Увидите сгенерированное нами сообщение:
Dec 26 05:19:21 yoemmxvrxy root: Это информационное сообщение от local4