Linux. Служба логирования rsyslog
26.11.2023
Теги: Linux • Конфигурация • Настройка • Сервер
Многие приложения Linux ведут лог путем отправки сообщений об ошибках или своем состоянии с помощью unix-сокета или просто записывая все сообщения в файл, который расположен в директории /var/log
. Служба rsyslog
умеет фильтровать сообщения от разных приложений и записывать их в разные файлы. Кроме того, rsyslog
можно настроить на запись в лог только важных сообщений, а остальные отбрасывать.
Файлы конфигурации
Все настройки rsyslog
находятся в файле /etc/rsyslog.conf
и других конфигурационных файлах из директории /etc/rsyslog.d
.
# /etc/rsyslog.conf configuration file for rsyslog # # For more information install rsyslog-doc and see # /usr/share/doc/rsyslog-doc/html/configuration/index.html # # Default logging rules can be found in /etc/rsyslog.d/50-default.conf ################# #### MODULES #### ################# module(load="imuxsock") # provides support for local system logging #module(load="immark") # provides --MARK-- message capability # provides UDP syslog reception #module(load="imudp") #input(type="imudp" port="514") # provides TCP syslog reception #module(load="imtcp") #input(type="imtcp" port="514") # provides kernel logging support and enable non-kernel klog messages module(load="imklog" permitnonkernelfacility="on") ########################### #### GLOBAL DIRECTIVES #### ########################### # # Use traditional timestamp format. # To enable high precision timestamps, comment out the following line. # $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat # Filter duplicated messages $RepeatedMsgReduction on # # Set the default permissions for all log files. # $FileOwner syslog $FileGroup adm $FileCreateMode 0640 $DirCreateMode 0755 $Umask 0022 $PrivDropToUser syslog $PrivDropToGroup syslog # # Where to place spool and state files # $WorkDirectory /var/spool/rsyslog # # Include all config files in /etc/rsyslog.d/ # $IncludeConfig /etc/rsyslog.d/*.conf
Здесь мы видим подключение всех файлов конфигурации из директории /etc/rsyslog.d
. Дефолтные правила логирования прописаны в файле /etc/rsyslog.d/50-default.con
.
# 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 # # Some "catch-all" log files. # #*.=debug;\ # auth,authpriv.none;\ # news.none;mail.none -/var/log/debug #*.=info;*.=notice;*.=warn;\ # auth,authpriv.none;\ # cron,daemon.none;\ # mail,news.none -/var/log/messages # # Emergencies are sent to everybody logged in. # *.emerg :omusrmsg:* # # I like to have messages displayed on the console, but only on a virtual # console I usually leave idle. # #daemon,mail.*;\ # news.=crit;news.=err;news.=notice;\ # *.=debug;*.=info;\ # *.=notice;*.=warn /dev/tty8
Три типа директив
Rsyslog одновременно поддерживает три различных типа директив конфигурации
basic
илиsyslogd
— старый формат, можно использовать, когда директива может быть написана в одну строкуlegacy
илиrsyslog
— старый формат, директива начинается доллара, не рекомендуется, но все еще поддерживаетсяadvanced
илиRainerScript
— новый формат, рекомендуется использовать, когда директива состоит из нескольких строк
Пример директив конфигурации в формате basic
mail.info /var/log/mail.log
mail.err @server.example.net
Пример директив конфигурации в формате legacy
$FileCreateMode 0640 $DirCreateMode 0755
Пример директив конфигурации в формате advanced
if ($msg contains "important") then { action(type="omfile" file="/var/log/important.log" template="outfmt") }
Это создает множество неудобств, когда в файле конфигурации перемешаны директивы трех разных стилей. При этом часть директив типа legacy
могут быть игнорированы при использовании с директивами advanced
.
# эта директива будет игнорирована для server1.example.net $actionResumeRetryCount 10 action(type="omfwd" target="server1.example.net") @@server2.example.net
Конфигурация по умолчанию
Файл /etc/rsyslog.conf
сначала загружает модули, которые необходимы для работы
- Модули ввода — можно рассматривать, как способ сбора информации из различных источников, начинаются с
im
- Модули вывода — позволяют отправлять сообщения в файлы, по сети или в базу данных, имя начинается на
om
- Модули фильтрации — позволяют фильтровать поступающие сообщения по различным критериям, начинаются с
fm
- Модули парсинга — предоставляют расширенные возможности для синтаксического анализа сообщения, начинаются с
pm
Модуль imuxsock
позволяет сервису получать сообщения от приложений, работающих в локальной системе. Раньше модуль прослушивал сокет /dev/log
, после появления Systemd — /dev/log
представляет собой символическую ссылку на /run/systemd/journal/dev-log
. Модуль imklog
позволяет получать сообщения от ядра. Настройка модуля permitnonkernelfacility
позволяет принимать сообщения от ядра, которые не относятся к ядру. По умолчанию включены только эти два модуля.
Модули imudp
и imtcp
позволяют получать сообщения по сети, по протоколу UDP/TCP на порту 514. Это значит, что один или несколько серверов будут отправлять сообщения в сеть, а этот сервер будет их принимать. Чтобы сервер отправлял сообщения в сеть — нужно соответствующим образом настроить на нем службу rsyslog
.
Дальше в файле конфигурации /etc/rsyslog.conf
идет секция глобальных директив
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
предписывает использовать форматМес ДД ЧЧ:ММ:СС
$RepeatedMsgReduction on
предписывает отбрасывать дубликаты сообщений$WorkDirectory /var/spool/rsyslog
— задает директорию для рабочих файлов службы$IncludeConfig /etc/rsyslog.d/*.conf
— задает директорию дополнительных файлов конфигурации
Директивы $FileOwner
, $FileGroup
и прочие — устанавливают права доступа, владельца и группу по умолчанию для лог-файлов.
Файл /etc/rsyslog.d/50-default.con
содержит правила — сообщения фильтруются и потом выполняется какое-то действие.
# сообщения от источников auth и authpriv с любым приоритетом записываются в файл /var/log/auth.log auth,authpriv.* /var/log/auth.log # сообщения от всех источников, кроме auth и authpriv, с любым приоритетом, записываются в файл /var/log/syslog *.*;auth,authpriv.none -/var/log/syslog # сообщения от источника cron с любым приоритетом записываются в файл /var/log/cron.log; таким образом, # сообщения от cron будут записаны в файлы /var/log/syslog и /var/log/cron.log cron.* /var/log/cron.log # сообщения от источника kern с любым приоритетом записываются в файл /var/log/kern.log; таким образом # сообщения от kern будут записаны в файлы /var/log/syslog и /var/log/kern.log kern.* -/var/log/kern.log # сообщения от источника mail с любым приоритетом записываются в файл /var/log/mail.log; таким образом # сообщения от mail будут записаны в файлы /var/log/syslog и /var/log/mail.log mail.* -/var/log/mail.log # сообщения от источника mail с приоритетом err и выше записываются в файл /var/log/mail.err; таким # образом эти сообщения будут записаны в файлы /var/log/syslog, /var/log/mail.log, /var/log/mail.err mail.err /var/log/mail.err # сообщения с приоритетом emerg из любого источника будут отправлены всем пользователям в системе *.emerg :omusrmsg:*
Правила
Каждое правило имеет фильтр (источник facility
и приоритет severity
) и действие. Если фильтр срабатывает — выполняется указанное действие. Источников и приоритетов может быть несколько, их можно разделять точкой с запятой. Каждый следующий фильтр может как сужать, так и расширять условия срабатывания.
источник.приоритет;источник.приоритет действие
Источник может принимать следующие значения
auth
— сообщения об авторизация пользователейauthpriv
— то же самое, что иauth
, но сообщения могут содержать паролиcron
— сообщения от системного планировщикаdaemon
— сообщения от системных служб, не выделенных в отдельную категориюkern
— сообщения от ядраlpr
— сообщения от службы печатиftp
— сообщения от службы FTPmail
— сообщения от почтовой службыmark
— проверочные сообщения, формируемые службойrsyslog
syslog
— сообщения от службыrsyslog
uucp
— копирование файлов между компьютерами (Unix-to-Unix CoPy)user
— сообщения пользовательских приложенийlocal0 … local7
— зарезервированы категории для использования администратором
Приоритет может принимать следующие значения
emerg
(раньшеpanic
) — система неработоспособнаalert
— требуется немедленное вмешательствоcrit
— критическая ошибкаerr
(раньшеerror
) — обычная ошибкаwarning
(раньшеwarn
) — предупреждениеnotice
— информация о событииinfo
— информационное сообщениеdebug
— сообщения отладки
Значения panic
, error
и warn
являются устаревшими и не должны использоваться. Но все еще поддерживаются в целях совместимости со старыми файлами конфигурации.
# сообщения от источников auth и authpriv с любым приоритетом записываются в файл /var/log/auth.log auth,authpriv.* /var/log/auth.log # сообщения от всех источников, кроме auth и authpriv, с любым приоритетом, записываются в файл /var/log/syslog *.*;auth,authpriv.none -/var/log/syslog
Действия
Обычно действие — это просто запись в файл, путь к файлу указывается от корня. Можно добавить дефис, чтобы повысить производительность (но понизить надежность). После имени файла можно указать шаблон, который задает формат одной строки файла лога.
cron.* -/var/log/cron.log;CronLogTemplate auth,authpriv.* /var/log/auth.log;AuthLogTemplate
Имя файла может быть статическим или динамическим. Динамические имена файлов позволяют записывать сообщения в разные файлы — в зависимости от хоста, который их отправил. С динамическими именами файлов все происходит автоматически и не нужны никакие фильтры.
# шаблон динамического имени файла лога $template LogFileName,"/var/log/%HOSTNAME%/%programname%.log" # шаблон отдельной записи в файле лога $template LogFileTemplate,"%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n" # знак вопроса — признак динамического имени *.* -?LogFileName;LogFileTemplate
Запись сообщения в файл — это самый простой вариант действия. Можно еще известить пользователей с помощью утилиты wall
, отправить на удаленный сервер по протоколу udp или tcp, записать в базу данных.
# известить пользователей с помощью утилиты wall
*.=emerg :omusrmsg:*
# известить пользователей root и evgeniy
*.alert :omusrmsg:root,evgeniy
# отправка сообщения по протоколу udp на другой хост cron.* @remote
# отправка сообщения по протоколу tcp на другой хост cron.* @@remote
Для одного фильтра можно задать несколько действий. Каждое действие должно находиться в отдельной строке, строка должна начинаться с символа амперсанда. Директива ниже предписывает отправить сообщение пользователям evgeniy
и root
+ записать сообщение в файл /var/log/crit.log
.
*.=crit :omusrmsg:evgeniy & root & /var/log/crit.log
Использование нескольких действий для каждого селектора удобно, а также дает выигрыш в производительности. Поскольку фильтр необходимо оценить только один раз, для обработки директивы требуется меньше вычислений по сравнению с приведенными ниже директивами конфигурации.
*.=crit :omusrmsg:evgeniy *.=crit :omusrmsg:root *.=crit /var/log/crit.log
Фильтры
Rsyslog поддерживает три типа фильтров
- «традиционные» фильтры
- фильтры на основе свойств
- фильтры на основе выражений
1. «Традиционные» фильтры
Фильтр типа mail.warning
срабатывает для сообщений с приоритетом warning
и выше. Фильтр типа mail.!warning
срабатывает для сообщений с приоритетом ниже warning
. Фильтр типа mail.=warning
срабатывает только для сообщений с приоритетом warning
. Фильтр типа mail.!=warning
срабатывает для сообщений с приоритетом, отличным от warning
. Фильтр типа mail.*
срабатывает для сообщений с любым приоритетом.
# все сообщения от mail, кроме notice и info записывать в файл /var/log/mail.err.log mail.*;mail.!=notice;mail.!=info /var/log/mail.err.log # сообщения от mail уровня notice и info записывать в файл /var/log/mail.info.log mail.=notice;mail.=info /var/log/mail.info.log
# все сообщения от mail, кроме notice и info записывать в файл /var/log/mail.err.log mail.warning /var/log/mail.err.log # сообщения от mail уровня notice и info записывать в файл /var/log/mail.info.log mail.!warning /var/log/mail.info.log
Фильтр может быть размещен на нескольких строках — для этого нужно добавить обратную косую черту.
*.=info;*.=notice;\ mail,ftp.none /var/log/messages
2. Фильтры на основе свойств
Позволяют фильтровать сообщения, используя свойства hostname
, fromhost
, fromhost-ip
, syslogtag
, programname
, msg
и еще множество других.
:свойство, [!]операция-сравнения, "значение"
Операция сравнения может принимать значения contains
— свойство содержит значение, isequal
— свойсто совпадает с значением, startswith
— свойсто начинается с значения, regex
— свойство соответствует регулярному выражению (BRE — базовые рег.выражения), ereregex
— свойство соответствует регулярному выражению (ERE — расширенные рег.выражения).
:msg, contains, "error" /var/log/errors.log :fromhost, regex, ".*ubuntu.*" /var/log/ubuntu-servers.log :msg, regex, "fatal .* error" /var/log/fatal-errors.log
Наиболее полезные свойства
msg
— тело сообщенияhostname
— имя хоста, отправившего сообщениеsource
— имя хоста, отправившего сообщение (алиас)fromhost
— имя хоста, от которого было получено сообщениеfromhost-ip
— ip-адрес хоста, от которого было получено сообщениеsyslogtag
— имя и номер процесса, напримерrsyslogd[12345]
programname
— имя приложенияsyslogfacility
— источник сообщения в виде цифрыsyslogfacility-text
— источник сообщения в виде текстаsyslogseverity
— приоритет сообщения в виде цифрыsyslogpriority
— приоритет сообщения в виде цифры (алиас)syslogseverity-text
— приоритет сообщения в виде текстаsyslogpriority-text
— приоритет сообщения в виде текста (алиас)pri
— источник и приоритет в виде числаpri-text
— источник и приоритет в виде текстаtimegenerated
— время, когда сообщение было получено
3. Фильтры на основе выражений
Позволяют фильтровать, используя сложные выражения, которые могут включать логические, арифметические и строковые операции.
if выражение then действие else действие
if $msg contains 'error' then /var/log/error.log
if $msg contains "555" then { action(type="omfile" file="/var/log/555.log") } else { action(type="omfile" file="/var/log/non-555.log") }
if ($msg contains "important") then { action(type="omfile" file="/var/log/important.log" template="outfmt") } else if ($msg startswith "slow-query:") then { action(type="omfile" file="/var/log/slow-log.log" template="outfmt") } else { action(type="omfile" file="/var/log/general.log" template="outfmt") }
Шаблоны
Шаблоны позволяют задавать формат выводимой информации (1) и использовать динамические имена файлов логов (2). Шаблоны должны быть заданы до использования в правилах. Шаблоны, совместимые со стандартными форматами syslogd
, жестко запрограммированы в rsyslogd
— можно использовать любой из них по имени, например RSYSLOG_FileFormat
.
# старый способ создания шаблона $template MyLogFormat,"%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
# новый способ создания шаблона (тип string) template(name="MyLogFormat" type="string" string="%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n" )
# новый способ создания шаблона (тип list) template(name="MyLogFormat" type="list") { property(name="timestamp" dateFormat="rfc3339") constant(value=" ") property(name="hostname") constant(value=" ") property(name="syslogtag") property(name="msg" spifno1stsp="on" ) property(name="msg" droplastlf="on" ) constant(value="\n") }
Жестко запрограммированные шаблоны, которые можно использовать
RSYSLOG_TraditionalFileFormat
—"%TIMESTAMP% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
RSYSLOG_FileFormat
—"%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
RSYSLOG_TraditionalForwardFormat
—"<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%"
RSYSLOG_SysklogdFileFormat
—"%TIMESTAMP% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg%\n"
RSYSLOG_ForwardFormat
—"<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%"
RSYSLOG_SyslogProtocol23Format
—"<%PRI%>1 %TIMESTAMP:::date-rfc3339% %HOSTNAME% %APP-NAME% %PROCID% %MSGID% %STRUCTURED-DATA% %msg%\n"
Шаблоны можно использовать для создания действий с динамическими именами файлов. Например, чтобы записывать сообщения с разных хостов в разные файлы — можно создать следующий шаблон.
# старый способ создания шаблона $template LogFileName,"/var/log/system-%HOSTNAME%.log"
# новый способ создания шаблона template(name="LogFileName" type="string" string="/var/log/system-%HOSTNAME%.log")
Наборы правил
Наборы правил — это контейнеры для правил. Один набор может содержать множество правил. По аналогии с языком программирования можно представить себе набор правил как программу. Набор правил может быть «привязан» к определенному входу. Это означает, что когда через этот вход поступает сообщение, привязанная к нему «программа» будет выполнена (но не будет выполнена для других входов).
module(load="imuxsock") module(load="imudp") ruleset(name="remote") { $template RemoteLogFile,"/var/log/remote/%fromhost%/%programname%.%syslogseverity-text%.log" *.* ?RemoteLogFile } ruleset(name="local") { $template LocalLogFile,"/var/log/local/%programname%.%syslogseverity-text%.log" *.* ?LocalLogFile } input(type="imudp" port="514" ruleset="remote") input(type="imuxsock" ruleset="local")
module(load="imuxsock") module(load="imtcp") # здесь глобальные директивы и правила для локальных сообщений ruleset(name="remote") { action(type="omfile" file="/var/log/remote/file.log") } input(type="imtcp" port="514" ruleset="remote")
module(load="imuxsock") module(load="imtcp") ruleset(name="remote10514") { action(type="omfile" file="/var/log/remote-10514") } ruleset(name="remote10515") { action(type="omfile" file="/var/log/remote-10515") } ruleset(name="remote10516") { if $syslogfacility-text == "mail" then { action(type="omfile" file="/var/log/mail-10516") # команда stop останавливает обработку сообщения и не # позволит записать его в файл /var/log/remote-10516 stop } action(type="omfile" file="/var/log/remote-10516") } input(type="imtcp" port="10514" ruleset="remote10514") input(type="imtcp" port="10515" ruleset="remote10515") input(type="imtcp" port="10516" ruleset="remote10516")
Из старого формата в новый
1. Конвертация правил
Пример старого формата правила — фильтр и действие
mail.info /var/log/mail.info.log
Примеры нового формата правила — фильтр и действие
mail.info action(type="omfile" file="/var/log/mail.info.log")
if $syslogfacility-text == "mail" and $syslogseverity-text == "info" then { action(type="omfile" file="/var/log/mail.info.log") }
2. Конвертация модулей
Пример старого формата загрузки модуля и установки для него параметров
$ModLoad imtcp $InputTCPMaxSession 500
Пример нового формата загрузки модуля и установки для него параметров
module(load="imtcp" maxSessions="500")
3. Конвертация действий
Примеры старого и нового формата действия
# старый формат, запись в файл cron.* /var/log/cron.log # новый формат, запись в файл cron.* action(type="omfile" file="/var/log/cron.log")
# старый формат, отправка по протоколу udp на другой хост cron.* @remote:514 # новый формат, отправка по протоколу udp на другой хост cron.* action(type="omfwd" target="remote" protocol="udp" port="514")
# старый формат, отправка по протоколу tcp на другой хост cron.* @@remote:514 # новый формат, отправка по протоколу tcp на другой хост cron.* action(type="omfwd" target="remote" protocol="tcp" port="514")
# старый формат, отправка сообщения пользователю username *.emerg :omusrmsg:username # новый формат, отправка сообщения пользователю username *.emerg action(type="omusrmsg" user="username")
4. Конвертация шаблонов
Примеры создания шаблона старым и новым способом
# старый способ создания шаблона $template MyLogFormat,"%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
# новый способ создания шаблона template(name="MyLogFormat" type="string" string="%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n" )
Проверка правил
Если сообщения не записываются в указанные файлы — была допущена ошибка в правилах и требуется отладка. Давайте напишем скрипт, который будет отправлять сообщения c разным приоритетом severity
. И создадим файл конфигурации /etc/rsyslog.d/10-test.conf
, который будет их записывать в разные файлы.
#!/bin/bash
logger -p mail.debug 'This is debug message'
logger -p mail.info 'This is info message'
logger -p mail.notice 'This is notice message'
logger -p mail.warning 'This is warning message'
logger -p mail.err 'This is err message'
logger -p mail.crit 'This is crit message'
logger -p mail.alert 'This is alert message'
logger -p mail.emerg 'This is emerg message'
# все сообщения от mail, кроме notice, info и debug записывать в файл /var/log/mail.err.log # здесь второй, третий и четвертый фильтры сужают действие первого фильтра mail.*;mail.!=notice;mail.!=info;mail.!=debug /var/log/mail.err.log # сообщения от mail уровня notice, info и debug записывать в файл /var/log/mail.info.log # здесь второй и третий фильтры расширяют действие первого фильтра mail.=notice;mail.=info;mail.=debug /var/log/mail.info.log
Перезапустим службу rsyslog.service
, чтобы применить новые настройки
$ sudo systemctl restart rsyslog.service
Запустим скрипт log.sh
, который отправит сообщения службе rsyslog
$ ./log.sh
И посмотрим содержимое файлов /var/log/mail.err.log
и /var/log/mail.info.log
$ cat /var/log/mail.err.log Nov 27 10:05:38 ubuntu-server evgeniy: This is warning message Nov 27 10:05:38 ubuntu-server evgeniy: This is err message Nov 27 10:05:38 ubuntu-server evgeniy: This is crit message Nov 27 10:05:38 ubuntu-server evgeniy: This is alert message Nov 27 10:05:38 ubuntu-server evgeniy: This is emerg message
$ cat /var/log/mail.info.log Nov 27 10:05:38 ubuntu-server evgeniy: This is debug message Nov 27 10:05:38 ubuntu-server evgeniy: This is info message Nov 27 10:05:38 ubuntu-server evgeniy: This is notice message
Когда все правила срабатывают, как и должны — удаляем файл конфигурации /etc/rsyslog.d/10-test.conf
и перезапускаем службу rsyslog.service
.
Отправка логов на удаленный сервер
Пусть у нас есть сервер для хранения логов и есть несколько клиентов, которые будут отправлять свои логи на этот сервер.
Для начала создаем файл /etc/rsyslog.d/10-remote.conf
на всех клиентах
# все логи отправляем на сервер 192.168.110.32 по протоколу tcp (basic формат) *.* @@192.168.110.32:514
# все логи отправляем на сервер 192.168.110.32 по протоколу tcp (advanced формат) *.* action(type="omfwd" target="192.168.110.32" protocol="tcp" port="514")
На сервере убираем комментарий для директив в файле /etc/rsyslog.conf
# разрешить прием логов с удаленных клиентов по протоколу tcp module(load="imtcp") input(type="imtcp" port="514")
Собственно, на этом настройку можно завершить, только нужно перезагрузить службу rsyslog.service
на сервере и клиенте.
$ sudo systemctl restart rsyslog.service
Но при этом все сообщения с клиентов будут записываться в файлы на log-сервере наравне с локальными сообщениями, с использованием правил для локальных сообщений. Это не слишком удобно для дальнейшего анализа логов. Поэтому создадим на сервере файл /etc/rsyslog.d/10-remote.conf
.
$template RemoteLogFile,"/var/log/remote/%fromhost%/%programname%.%syslogseverity-text%.log" *.* ?RemoteLogFile & stop
Мы записываем логи каждого клиента в отдельную директорию внутри /var/log/remote
. Каждая служба будет записывать сообщения в отдельный файл внутри этой директории. Кроме того, сообщения с разными severity будут записаны в разные файлы. После этого сообщение больше не обрабатывается.
Но в этом случае локальные сообщения сервера логов просто теряются — такой вариант нам не подходит. Давайте изменим файл 10-remote.conf
таким образом, чтобы останавливать обработку правил только для сообщений с клиентов. А если это локальное сообщение — пусть оно проходит дальше и будет обработано правилами в файле 50-default.conf
.
template(name="RemoteLogFile" type="string" string="/var/log/remote/%fromhost%/%programname%.%syslogseverity-text%.log" ) if $fromhost-ip contains "192.168.110." then { # модуль omfile встроенный, так что не нуждается в загрузке action(type="omfile" dynaFile="RemoteLogFile") stop }
Используя динамическое имя файла лога — мы разложили все сообщения по отдельным файлам. Представим теперь, что мы не хотим сохранять все сообщения — а только наиболее важные для нас.
template(name="RemoteAuthLogFile" type="string" string="/var/log/remote/%fromhost%/auth.log" ) template(name="RemoteSysLogFile" type="string" string="/var/log/remote/%fromhost%/sys.log" ) template(name="RemoteMailLogFile" type="string" string="/var/log/remote/%fromhost%/mail.log" ) if $fromhost-ip contains "192.168.110." then { if prifilt("auth,authpriv.*") then { action( type="omfile" dynaFile="RemoteAuthLogFile" template="RSYSLOG_TraditionalFileFormat" dirCreateMode="0755" ) stop } if prifilt("mail.warning") then { action( type="omfile" dynaFile="RemoteMailLogFile" template="RSYSLOG_TraditionalFileFormat" dirCreateMode="0755" ) stop } if prifilt("*.warning;auth,authpriv,mail.none") then { action( type="omfile" dynaFile="RemoteSysLogFile" template="RSYSLOG_TraditionalFileFormat" dirCreateMode="0755" ) } }
dirCreateMode="755"
. По умолчанию для объекта action
значение dirCreateMode
равно 0700
. Хотя вроде бы в файле /etc/rsyslog.conf
есть директива $DirCreateMode 0755
. Но это как раз тот случай, когда есть конфликт между старыми и новыми директивами. $DirCreateMode
действует глобально, если используется basic
формат правил. Но мы используем объект action
для создания действия — и глобальное значение игнорируется.
Кроме того, если мы не хотим на сервере логов хранить все сообщения — то и отправлять их с клиентов не нужно. Так что есть смысл отредактировать файлы конфигурации всех клиентов.
# сообщения warning и выше отправляем на сервер 192.168.110.32 по протоколу tcp (base формат) *.warning @@192.168.110.32:514
# сообщения warning и выше отправляем на сервер 192.168.110.32 по протоколу tcp (advanced формат) *.warning action(type="omfwd" target="192.168.110.32" protocol="tcp" port="514")
Службы rsyslog и journald
Служба rsyslogd
может работать вместе со службой journald
. Есть два способа настроить передачу сообщений в rsyslogd
в системе с Systemd.
- Традиционно, cлужба
rsyslogd
получает локальные сообщения через сокет/dev/log
— который сама и создает при запуске. Systemd заменяет/dev/log
символической ссылкой на сокет/run/systemd/journal/dev-log
. - Перенаправлять все сообщения Systemd в сокет
/run/systemd/journal/syslog
с помощью опцииForwardToSyslog
файла конфигурации/etc/systemd/journald.conf
.
В том и другом случае модуль imuxsock
не нуждается в дополнительной настройке. В первом случае — модуль будет получать сообщения из /dev/log
(который на самом деле /run/systemd/journal/dev-log
). Во втором случае — модуль будет получать сообщения из /run/systemd/journal/syslog
. При этом rsyslogd
не будет пытаться создать или удалить сокет при запуске и остановке, потому что теперь за это отвечает Systemd.
- PHP-FPM. Установка и настройка
- Apache2. Установка и настройка. Часть 1 из 2
- Dante. Установка и настройка прокси-сервера
- Установка WireGuard на Ubuntu 20.04 LTS. Часть вторая из двух
- Установка WireGuard на Ubuntu 20.04 LTS. Часть первая из двух
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 12 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 11 из 12
Поиск: Linux • Конфигурация • Настройка • Сервер • rsyslog • error • warning • notice