Демон 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