Главная

Tuesday, 17 November 2020

Читаем журналы Linux #4 - rsyslog.


Всем привет.

Центром механизма журналирования является демон Rsyslog:  (R)ocket-fast (Sys)tem for (log) processing. Данный сервис отвечает за прослушивание зарегистрированных сообщений различных частей системы Linux и маршрутизацию сообщения к соответствующему журналу в каталоге /var/log. Он также может передавать зарегистрированные сообщения другому серверу Linux. Весьма подробно настройка rsyslog показана здесь.

Особенности Rsyslog:

-многопоточный

-TCP, SSL, TLS, RELP, etc.

-сохранение логов в базы данных (MySQL, PostgreSQL, Oracle, etc.)

-фильтрация по любой части лога

-полностью настраиваемый формат вывода.


Конфигурационный файл rsyslog.

Демон rsyslog получает конфигурации из файла «rsyslog.conf», который находится в каталоге /etc.

В основном, файл rsyslog.conf говорит демону, где хранить сообщения. Данная информация имеет вид серии строк, состоящих из двух частей. Под двумя частями строк подразумеваются селектор и действие (selector и action). Они разделяются пробельным символом. Селектор указывает на  источник и важность сообщения, а действие говорит, что нужно сделать с данным сообщением. Сам селектор также разделен на 2 части символом точки (.). Часть перед символом точки называется объектом (источник сообщения), а часть за символом называется приоритетом (степень важности сообщения). Комбинация объекта-приоритета и действия говорит rsyslog, что делать, если сообщение соответствует указанным параметрам.

Вот отрывок из файла rsyslog.conf на CentOS:

# rsyslog v5 configuration file

...

# Include all config files in /etc/rsyslog.d/

IncludeConfig /etc/rsyslog.d/*.conf

#### RULES ####

# Log all kernel messages to the console.

# Logging much else clutters up the screen.

#kern.*  /dev/console

# Log anything (except mail) of level info or higher.

# Don't log private authentication messages!

*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# The authpriv file has restricted access.

authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.

mail.*                                                  -/var/log/maillog

# Log cron stuff

cron.*                                                  /var/log/cron

# Everybody gets emergency messages

*.emerg                                                 *

# Save news errors of level crit and higher in a special file.

uucp,news.crit                                          /var/log/spooler

# Save boot messages also to boot.log

local7.*                                                /var/log/boot.log

...


Чтобы понять, что все это значит, нужно рассмотреть типы объектов, которые распознает Linux:

auth or authpriv: Сообщения, поступающие от сервисов авторизации и безопасности;

kern: сообщения ядра Linux;

mail: сообщения подсистемы почты;

cron: сообщения демона Cron;

daemon: сообщения от демонов;

news: сообщения подсистемы новостей сети;

lpr: сообщения, связанные с печатью;

user: сообщения пользовательских программ;

local0 до local7:Зарезервировано для локального использования.

Ниже приведен список приоритетов по возрастанию:

Debug: Отладочная информация от программ;

info: простое информационное сообщение – никакого вмешательства не требуется;

notice: состояние, которое может потребовать внимания;

warn: Предупреждение;

err: ошибка;

crit: критическое состояние;

alert: состояние, требующее немедленного вмешательства;

emerg: аварийное состояние.

Изучите следующую строку из файла:

cron.*              /var/log/cron

Она говорит rsyslog сохранять все сообщения, приходящие от демона cron, в файле /var/log/cron. Звездочка (*) поле точки значит, что зарегистрированы будут сообщения всех приоритетов. Аналогичным образом, если объект был определен звездочкой, это объединяет все источники.

Объекты и приоритеты могут быть связаны в несколькими способами.

Вид по умолчанию, когда после точки указан только один приоритет, значит, что будут охвачены все сообщения с таким или высшим уровнем приоритета. Таким образом, данное указание регистрирует все сообщения, приходящие от почтовой подсистемы с приоритетом «warn» и выше в специальном файле в /var/log:

mail.warn           /var/log/mail.warn

Такие параметры будут регистрировать все сообщения с таким же или высшим, чем warn, приоритетом и пропускать все остальное. То есть, сообщения с приоритетом err, crit, alert и emerg также будут внесены в файл. Знак равности (=) после точки указывает регистрировать только сообщения с указанным приоритетом. То есть, если нужно регистрировать только сообщения от почтовой подсистемы с приоритетом info, указание будет таким:

mail.=info          /var/log/mail.info

Опять же, если нужно регистрировать все сообщения почтовой подсистемы, кроме сообщений с приоритетом  info, строка будет выглядеть так:

mail.!info          /var/log/mail.info

или так:

mail.!=info         /var/log/mail.info

В первом случае файл mail.info содержал бы все сообщения с приоритетом ниже info. Во втором случае он содержал бы все сообщения с приоритетом выше info.

Несколько объектов в одной строке нужно разделить запятой.

Несколько селекторов в одной строке также разделяются запятой.

Отмеченное звездочкой действие объединяет всех пользователей.

К примеру, об этом говорит запись в файле rsyslog.conf на CentOS:

# Everybody gets emergency messages

*.emerg                                                 *

По возможности проверьте, что говорит rsyslog.conf на других системах Linux. Вот отрывок из Debian:

#  /etc/rsyslog.conf    Configuration file for rsyslog.

#

#           For more information see

#           /usr/share/doc/rsyslog-doc/html/rsyslog_conf.html

...

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

#

# Logging for INN news system.

#

news.crit           /var/log/news/news.crit

news.err            /var/log/news/news.err

news.notice         -/var/log/news/news.notice

Как можно видеть, Debian сохраняет сообщения безопасности/авторизации всех уровней в /var/log/auth.log, в то время как CentOS делает это в /var/log/secure.

Конфигурации для rsyslog могут исходить также от других пользовательских файлов. Эти файлы пользовательских конфигураций, как правило, расположены в разных каталогах в /etc/rsyslog.d. Файл rsyslog.conf включает эти каталоги, используя директиву «$IncludeConfig».

Так это выглядит в Ubuntu:

#  Default logging rules can be found in /etc/rsyslog.d/50-default.conf

....

$IncludeConfig /etc/rsyslog.d/*.conf

Содержимое каталога /etc/rsyslog.d выглядит так:

-rw-r--r-- 1 root root  311 Mar 17  2012 20-ufw.conf

-rw-r--r-- 1 root root  252 Apr 11  2012 21-cloudinit.conf

-rw-r--r-- 1 root root 1655 Mar 30  2012 50-default.conf

Теперь сохранять сообщение в журнал необязательно; сообщение можно переслать консоли пользователя. В таком случае, поле действия будет содержать имя пользователя. Если сообщение нужно отправить нескольким пользователям, их имена нужно разделить запятыми. Если же сообщение нужно распространить между всеми пользователями, в поле действия вносится символ *.

Будучи частью сетевой операционной системы, демон rsyslog может не только хранить зарегистрированные сообщения локально, но и передавать их на другие серверы Linux, а также действовать как репозиторий для других систем. Демон прослушивает сообщения через UDP-порт 514. В приведенном ниже примере он пересылает критические сообщения ядра на сервер под названием «texas»:

kern.crit           @texas

Создание и тестирование сообщений.

Теперь попробуйте сами создать сообщение.

Для этого нужно будет сделать следующее:

Задать спецификацию в файле /etc/rsyslog.conf;

Перезапустить демон rsyslog;

Проверить конфигурацию с помощью утилиты «logger».

В следующем примере внесены две строки в файл rsyslog.conf на CentOS. Как видите, обе они исходят от объекта local4 и имеют разные приоритеты.

[root@TestLinux ~]# vi /etc/rsyslog.conf

....

# New lines added for testing log message generation

local4.crit                                             /var/log/local4crit.log

local4.=info                                            /var/log/local4info.log

Затем нужно перезапустить сервис, чтобы обновить данные файла:

[root@TestLinux ~]# /etc/init.d/rsyslog restart

Shutting down system logger:                               [  OK  ]

Starting system logger:                                    [  OK  ]

[root@TestLinux ~]#

Теперь нужно вызвать приложение logger, чтобы создать сообщение:

[root@TestLinux ~]# logger -p local4.info " This is a info message from local 4"

Каталог /var/log показывает два новых сообщения:

...

-rw-------  1 root root      0 Dec  9 11:21 local4crit.log

-rw-------  1 root root     72 Dec  9 11:22 local4info.log

Размер local4info.log не равен нулю, а это значит, что сообщение было записано:

[root@TestLinux ~]# cat /var/log/local4info.log

Dec  9 11:22:32 TestLinux root:  This is a info message from local 4


Надеюсь тут понятно. Далее привожу кратко справку по демону Rsyslog.

Rsyslog модули:

Модули ввода - начинаются с im, собирают информацию из различных источников.

Модули вывода - начинаются на om. Отправляют сообщения. Могут отправлять сообщения как в

файл так и по сети или складывать в базу.

Модули фильтрации - начинаются с fm. Фильтруют сообщения по разным параметрам.

Модули парсинга - начинаются с pm. Позволяют проводить синтаксический анализ.

Модули модификации сообщений - начинаются с mm. Меняют содержимое обрабатываемых сообщений.

Модули генерации строк - начинаются с sm. Позволяют генерировать строки на основе

обрабатываемых сообщений.


Примеры модулей:

Input Modules (imtcp, imjournal, imudp, imrelp, ...)

Output Modules (omelasticsearch, omfile, ommysql,)

Parser Modules (pmciscoios, pmlastmsg ...)

Message Modification Modules (mmcount, mmfelds ...)

String Generator Modules (smfile, smfwd, smtradfile, smfwd)


Rsyslog: Facility (категория) - принимает значения от 0 до 23, им соответствуют различные категории системных служб: 0 - kernel, 2 - mail, 7 - news. Последние 8 категорий - от local0 до local7 - определены для служб, не попадающих в предопределённые категории.


Rsyslog: Severity (важность) принимает значения от 0 (emergency, самая высокая) до 7 (debug, самая низкая).


Rsyslog: наборы правил

Набор правил (ruleset) - содержит список правил, которые состоят из фильтра и привязанных к

фильтру действий (Actions). Можно задавать несколько наборов правил, чтобы разделить обработку различных сообщений.


Rsyslog: фильтры позволяет фильтровать логи. В качестве объектов выступают категории. В качестве уровней - уровни важности сообщений.

Примеры фильтров:

объект.[!]операция_сравнения/уровень, действие

:переменная, [!]операция_сравнения, "искомое_значение" действие

kern.*  # все логи ядра

mail.crit  # все критические события от объекта mail

cron.!info,!debug # все от демона crond кроме уровней info и debug

*.=crit /var/log/somefile

& root

& /var/log/criticalmessages

# фильтруем сообщения

*.* /var/log/allmsgs-incl-informational.log

:msg, contains, "informational"  ~ 

*.* /var/log/allmsgs-no-informational.log


Rsyslog: очереди:

Direct queues

Disk queues

In-memory queues

Disk-Assisted Memory queues


Rsyslog: шаблоны

Templates - позволяют шаблонизировать динамические имена файлов, содержимого на входе и выходе, SQL для баз данных и т.д.

Типы шаблонов: list, subtree, string, plugin

В следующий раз покрутим журналы в logrotate.

No comments:

Post a Comment

А что вы думаете по этому поводу?