Содержимое конфигурационного файла rsyslog.conf Создание правил в системе Другие варианты написания правил Отправка лог-сообщений на удаленный сервер
Окружение
Rsyslog — это очень быстрый, расширяемый сервис для управления логами с огромным количеством возможностей. Среди его возможностей можно отметить поддержку фильтрации контента, а также передачу логов по сетям. Основные возможности:
Вы можете подробнее ознакомиться с работой сервиса управления логами Rsyslog, просмотрев наши обучающие видео:
на RuTube — Rsyslog - сервис управления логами;
в Яндекс.Дзен — Rsyslog - сервис управления логами;
в VK Видео — Rsyslog - сервис управления логами.
На наших каналах вы также сможете найти много другой полезной информации.
Каталогом по умолчанию для хранения логов является каталог /var/log, в файлы которого записывается вся информация о состоянии системы и используемых программ, а также информация об ошибках. Лог-файлы можно просмотреть, выполнив команду:
ls -l /var/log/
Главным конфигурационным файлом сервиса rsyslog является rsyslog.conf. Для просмотра содержимого конфигурационного файла можно воспользоваться командой:
nano /etc/rsyslog.conf
Файл разделен на 3 основных секции:
Modules — содержит параметры, предназначенные для настройки методов работы сервиса с лог-сообщениями;
Modules
Global directives — содержит глобальные параметры работы службы rsyslog;
Global directives
Rules — содержит правила сортировки логов.
Rules
В секции Modules загружаются все необходимые модули программы. Секция имеет следующим вид:
#### MODULES #### module(load="imuxsock" # provides support for local system logging (e.g. via logger command) SysSock.Use="off") # Turn off message reception via local log socket; # local messages are retrieved through imjournal now. module(load="imjournal" # provides access to the systemd journal StateFile="imjournal.state") # File to store the position in the journal #module(load="imklog") # reads kernel messages (the same are read from journald) #module(load"immark") # provides --MARK-- message capability # Provides UDP syslog reception # for parameters see http://www.rsyslog.com/doc/imudp.html #module(load="imudp") # needs to be done just once #input(type="imudp" port="514") # Provides TCP syslog reception # for parameters see http://www.rsyslog.com/doc/imtcp.html #module(load="imtcp") # needs to be done just once #input(type="imtcp" port="514")
Существует четыре типа модулей:
Модули ввода — можно рассматривать, как способ сбора информации из различных источников, начинаются с im;
Модули вывода — позволяют отправлять сообщения в файлы, по сети или в базу данных, начинаются с om;
Модули фильтрации — позволяют отфильтровывать сообщения по разным параметрам, начинаются с fm;
Модули парсинга — предоставляют расширенные возможности для синтаксического анализа сообщения, начинаются с pm.
Модуль imuxsock позволяет сервису получать сообщения от приложений, работающих в локальной системе. По умолчанию отключено прослушивание сокета /dev/log из-за параметра SysSock.Use="off".
SysSock.Use="off"
Модуль imjournal предоставляет возможность импорта сообщений структурированного журнала из журнала systemd в системный журнал. Обратите внимание, что этот модуль читает базу данных журнала, что считается относительно интенсивной операцией. Таким образом, производительность конфигурации с использованием этого модуля может быть заметно ниже, чем при использовании imuxsock. По умолчанию ограничение скорости активировано и позволяет обрабатывать 20 000 сообщений в течение 10 минут, чего должно быть достаточно для большинства случаев использования. Если импорт структурированных данных необходим, используйте imjournal, в противном случае следует задействовать модуль imuxsock.
Модуль imklog предназначен для получения сообщений ядра.
Модуль mark позволяет маркировать соединения или выводить сообщения о том, что syslog все еще работает.
Глобальные директивы используются для настройки службы rsyslog. Как правило, они указывают значение для конкретной предопределенной переменной, которая влияет на функциональность правил или самой службы rsyslog.
Секция Global directives имеет следующий вид:
#### GLOBAL DIRECTIVES #### # Where to place auxiliary files global(workDirectory="/var/lib/rsyslog") # Use default timestamp format module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat") # Include all config files in /etc/rsyslog.d/ include(file="/etc/rsyslog.d/*.conf" mode="optional")
Описание переменных:
global(workDirectory="/var/lib/rsyslog") — задает директорию, которая будет использоваться для рабочих файлов службы rsyslog;
global(workDirectory="/var/lib/rsyslog")
module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat") — задает стандартный формат хранения времени, в секундах с 1970 года;
module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat")
include(file="/etc/rsyslog.d/*.conf" mode="optional") — задает директорию, которая будет использоваться для дополнительных файлов конфигурации.
include(file="/etc/rsyslog.d/*.conf" mode="optional")
Данный раздел содержит правила сортировки логов. Каждое правило имеет свой синтаксис: сначала идет источник и приоритет, затем действие. Если источник и приоритет совпадают, сообщение отправляется в указанный файл. Источников и приоритетов может быть несколько, их можно разделять точкой с запятой.
Содержимое секции имеет следующий вид:
#### RULES #### # 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 :omusrmsg:* # 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
Источниками являются места, откуда поступают сообщения.
Источники могут принимать следующие значения:
auth — все, что связано с авторизацией пользователей, например, login и su (безопасность/права доступа);
auth
authpriv — то же самое, что и auth, однако сообщения этой категории записываются в файл, который могут читать лишь некоторые пользователи (категория выделена, потому что принадлежащие ей сообщения могут содержать открытые пароли пользователей, которые не должны попадать на глаза посторонним людям, и, следовательно, файлы протоколов должны иметь соответствующие права доступа);
authpriv
cron — сообщения от системного планировщика;
cron
daemon — сообщения от системных служб, которые в отличие от FTP или LPR не имеют специально-выделенных категорий;
daemon
kern — сообщения ядра;
kern
lpr — сообщения от системы печати;
lpr
mail — сообщения от почтовой системы;
mail
mark — присваивается отдельным сообщениям, формируемым службой syslog;
mark
security — эквивалентно auth;
security
syslog — система протоколирования может протоколировать сообщения от самой себя;
syslog
uucp — копирование файлов между компьютерами (Unix-to-Unix CoPy);
uucp
user — сообщения пользовательских программ;
user
local0 … local7 — зарезервированные категории для использования администратором системы. Категория local7 обычно используется для сообщений, генерируемых на этапе загрузки системы;
local0
local7
* — Выбор всех источников.
*
Приоритетом является степень важности сообщения.
Приоритеты могут принимать следующие значения:
emerg (раньше panic) — чрезвычайная ситуация, система неработоспособна;
emerg
alert — тревога, требуется немедленное вмешательство;
alert
crit — критическая ошибка (критическое состояние);
crit
error (раньше err) — сообщение об ошибке;
error
warn (раньше warning) — предупреждение;
warn
notice — информация о каком-либо нормальном, но важном событии;
notice
info — информационное сообщение;
info
debug — сообщения, формируемые в процессе отладки;
debug
* — выбор всех приоритетов;
none — сообщения от источника с любым приоритетом будут исключены для действия.
none
Действием является отправка сообщений, которые подходят под заданные ранее параметры в заданное место.
Действия могут принимать следующие значения:
/путь/к/файлу — отправка сообщений в обычный файл;
/путь/к/файлу
/dev/console — отправка сообщений в терминал или консоль;
/dev/console
@xx.xx.xx.xx:514 — отправка сообщений на удаленную машину с помощью UDP;
@xx.xx.xx.xx:514
@@xx.xx.xx.xx:514 — отправка сообщений на удаленную машину с помощью TCP;
@@xx.xx.xx.xx:514
user,user2,root — отправка сообщений пользователям на терминал (разделенный запятыми список пользователей, получающих сообщения).
user,user2,root
В общем случае синтаксис правил выглядит следующим образом:
<источник>.<приоритет> <действие>
В качестве примера разберем правило:
*.info;mail.none;authpriv.none;cron.none /var/log/messages
Первым источником событий являются все сообщения с приоритетом info. Также к источникам добавляются и другие сообщения, разделенные между собой точкой с запятой. Из правил следует, что источники mail, authpriv, cron будут исключены, так как имеют приоритет none. Действием для данного правила является отправка сообщений в файл /var/log/messages.
Фильтрация данного вида имеет следующий синтаксис:
:<переменная>, <операция_сравнения>, "<искомое_значение>" <действие>
Переменные могут принимать значение:
msg — тело сообщения;
msg
hostname — имя хоста/IP-адреса из сообщения;
hostname
fromhost — имя хоста, от которого пришло сообщение;
fromhost
fromhost-ip — адрес хоста, от которого пришло сообщение (127.0.0.1 для локальных сообщений);
fromhost-ip
syslogtag — имя и номер процесса ("rsyslogd[12125]:"), который выдал сообщение (извлекается из сообщения);
syslogtag
"rsyslogd[12125]:"
programname — имя процесса, который выдал сообщение (извлекается из сообщения);
programname
pri — источник и приоритет, в виде числа;
pri
pri-text — декодированные источник и приоритет (facility.priority, например syslog.emer);
pri-text
facility.priority
syslog.emer
syslogfacility — только источник в виде числа;
syslogfacility
syslogfacility-text — только декодированный источник ("local0");
syslogfacility-text
syslogseverity — только приоритет в виде числа;
syslogseverity
syslogseverity-text — только декодированный уровень ("debug");
syslogseverity-text
timegenerated — время получения (с высоким разрешением);
timegenerated
timereported — время, извлечённое из сообщения;
timereported
inputname — имя входного модуля;
inputname
$hour, $minute — текущее время;
$hour, $minute
$myhostname — имя хоста обработки.
$myhostname
Операция сравнения может принимать значение:
contains — проверяет соответствие <искомое_значение> с любой частью строки в переменная;
contains
<искомое_значение>
isequal — проверяет, совпадает (целиком) ли <искомое_значение> с переменной;
isequal
isempty — проверяет, является ли переменная пустой;
isempty
startswith — проверяет, начинается ли переменная с <искомое_значение>;
startswith
regex — сравнивает поле с регулярным выражением.
regex
Искомое значение может принимать значение имени программы, службы или источника (источники были рассмотрены ранее в данной статье).
Действие принимает значения, рассмотренные ранее в статье.
Теперь можно составить правило для логирования приложения. Пример составления правила:
:syslogtag, isequal, "wireguard:" /var/log/wireguard.log &stop
& stop необходим для того, чтобы остановить регистрацию сообщения после его совпадения.
& stop
if $<переменная> <операция_сравнения> "<искомое_значение>" then <действие>
Операция сравнения может принимать значения:
== — равно;
!= — не равно.
Пример правила для логирования приложения будет выглядеть следующим образом:
if $syslogtag == "wireguard" then /var/log/wireguard.log
Если на сервере используется брандмауэр, необходимо открыть порты TCP/UDP 514. На примере iptables открытие портов производится командами:
iptables -A INPUT -p tcp --dport 514 -j ACCEPT iptables -A INPUT -p udp --dport 514 -j ACCEPT
Затем настройте SELinux, если он используется:
semanage port -m -t syslogd_port_t -p tcp 514 semanage port -m -t syslogd_port_t -p udp 514
Для разрешения серверу принимать соединение по TCP и UDP в конфигурационном файле /etc/rsyslog.conf раскомментируйте строки в секции Modules:
module(load="imudp") # needs to be done just once input(type="imudp" port="514") module(load="imtcp") # needs to be done just once input(type="imtcp" port="514")
Не обязательно открывать соединение по обоим протоколам, можно выбрать только тот, который необходим именно вам.
В эту же секцию после модулей для TCP- и UDP-соединения необходимо добавить следующее:
template(name="RemoteLogs" type="string" string="/var/log/rsyslog/%HOSTNAME%/%PROGRAMNAME%.log") *.* { action(type="omfile" dynaFile="RemoteLogs") stop }
Таким образом создается шаблон, по которому лог-сообщения от любого источника с любым уровнем будут сохраняться в каталог сервера /var/log/rsyslog/<имя_компьютера-отправителя_лога>/<приложение-отправитель_лога>.log.
После проделанных настроек необходимо перезагрузить службу rsyslog командой:
systemctl restart rsyslog.service
Настройка сервера на этом закончена. Для проверки открытия порта выполните команду:
netstat -pnltu
Для создания правила на клиенте воспользуйтесь директорией rsyslog.d, которая является дополнительной для конфигурационных файлов.
Создайте конфигурационный файл, который будет отправлять на сервер сообщения от источника auth с любым приоритетом. Для этого выполните команду:
nano /etc/rsyslog.d/auth.conf
И добавьте правило:
auth.* @@xx.xx.xx.xx:514
где @@xx.xx.xx.xx:514 — адрес сервера и его порт для протокола TCP. Для протокола UDP нужно указывать действие в виде @xx.xx.xx.xx:514.
Сохраните изменения и перезагрузите службу rsyslog командой:
При корректной настройке на сервере в каталоге /var/log/rsyslog должна появиться директория с именем (hostname) ПК, который отправляет лог-файлы, и, непосредственно, лог-файлы.
Дата последнего изменения: 24.10.2025
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.
Нажимая «Отправить запрос», вы соглашаетесь с условиями обработки персональных данных.
Вы будете получать только актуальную информацию по обновлению безопасности
Подписываясь на уведомления, вы соглашаетесь с условиями обработки персональных данных.
На ваш почтовый адрес отправлено письмо с подтверждением подписки.