Полный цикл в digital

Демон 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 сообщения, генерируемые ядром Linux
  • mail сообщения, генерируемые почтовой подсистемой
  • cron сообщения, генерируемые демоном cron
  • daemon сообщения, генерируемые различными демонами
  • 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

Создание собственных правил логирования

Теперь рассмотрим, как настроить логирование сообщений в отдельные лог-файлы, для этого:

  1. Добавим правила в отдельный файл custom.conf
  2. Перезапустим демон rsyslog
  3. Проверим настроенные правила логирования

Добавлять правила будем в отдельный файл, для разделения стандартных правил и кастомных, чтобы случайно не сломать стандартные правила. Благодаря тому, что в конфигурации 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
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг