HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>Теги: rsyslog, централизованный сбор логов, syslog, правило для пересылки, правило для чтения файлов, суффикс из имени лога, /etc/rsyslog.conf, unix socket, journald, модуль для сбора данных по сети, динамическая запись в папку с именем хоста</p>
1 <p>Теги: rsyslog, централизованный сбор логов, syslog, правило для пересылки, правило для чтения файлов, суффикс из имени лога, /etc/rsyslog.conf, unix socket, journald, модуль для сбора данных по сети, динамическая запись в папку с именем хоста</p>
2 <p><strong>Задача:</strong>есть несколько серверов, на которых крутятся программы, которые сохраняют логи в свои каталоги. Необходимо централизовано сохранять все эти логи в подкаталогах по имени серверов, сохраняя названия файлов. Возможности перенастроить программы для записи логов сразу в syslog нет.</p>
2 <p><strong>Задача:</strong>есть несколько серверов, на которых крутятся программы, которые сохраняют логи в свои каталоги. Необходимо централизовано сохранять все эти логи в подкаталогах по имени серверов, сохраняя названия файлов. Возможности перенастроить программы для записи логов сразу в syslog нет.</p>
3 <h2>Окружение</h2>
3 <h2>Окружение</h2>
4 <ul><li>server - centos7</li>
4 <ul><li>server - centos7</li>
5 <li>client - centos6</li>
5 <li>client - centos6</li>
6 </ul><p>И на клиенте и на сервере необходимо обновить rsyslog до последней версии.</p>
6 </ul><p>И на клиенте и на сервере необходимо обновить rsyslog до последней версии.</p>
7 cd /etc/yum.repos.d/ wget http://rpms.adiscon.com/v8-stable/rsyslog.repo yum update rsyslog<h2>Решение</h2>
7 cd /etc/yum.repos.d/ wget http://rpms.adiscon.com/v8-stable/rsyslog.repo yum update rsyslog<h2>Решение</h2>
8 <p>Rsyslog имеет следующие стандартные модули:</p>
8 <p>Rsyslog имеет следующие стандартные модули:</p>
9 <ul><li>imfile - чтение из файла</li>
9 <ul><li>imfile - чтение из файла</li>
10 <li>omfwd - перенаправление (например, в сеть)</li>
10 <li>omfwd - перенаправление (например, в сеть)</li>
11 <li>imtcp - чтение из сети по tcp</li>
11 <li>imtcp - чтение из сети по tcp</li>
12 <li>omfile - запись в файл, встроенный модуль</li>
12 <li>omfile - запись в файл, встроенный модуль</li>
13 </ul><p>С помощью них произведём настройку на клиентских машинах и сервере:</p>
13 </ul><p>С помощью них произведём настройку на клиентских машинах и сервере:</p>
14 <p><strong>На клиенте</strong></p>
14 <p><strong>На клиенте</strong></p>
15 module(load="imfile" mode="inotify") # настраиваем темплейт для строки лога: template (name="LongTagForwardFormat" type="string" string="&lt;%PRI%&gt;%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%$.suffix%%msg:::sp-if-no-1st-sp%%msg%") # настраиваем правило для пересылки: ruleset(name="sendToLogserver") { action(type="omfwd" Target="192.168.1.1" Port="514" protocol="tcp" Template="LongTagForwardFormat") } # правило для чтения файлов (обязательно наличие тэга): input(type="imfile" File="/your_app_path_logs/log/*.log" tag="apptag__" ruleset="app_logs" addMetadata="on") # установка суффикса из имени лога, имя лога: ruleset(name="app_logs") { set $.suffix=re_extract($!metadata!filename, "(.*)/([^/]*)", 0, 2, "app.log"); call sendToLogserver }<h2>На сервере</h2>
15 module(load="imfile" mode="inotify") # настраиваем темплейт для строки лога: template (name="LongTagForwardFormat" type="string" string="&lt;%PRI%&gt;%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%$.suffix%%msg:::sp-if-no-1st-sp%%msg%") # настраиваем правило для пересылки: ruleset(name="sendToLogserver") { action(type="omfwd" Target="192.168.1.1" Port="514" protocol="tcp" Template="LongTagForwardFormat") } # правило для чтения файлов (обязательно наличие тэга): input(type="imfile" File="/your_app_path_logs/log/*.log" tag="apptag__" ruleset="app_logs" addMetadata="on") # установка суффикса из имени лога, имя лога: ruleset(name="app_logs") { set $.suffix=re_extract($!metadata!filename, "(.*)/([^/]*)", 0, 2, "app.log"); call sendToLogserver }<h2>На сервере</h2>
16 <p>На сервере я конфигурил непосредственно /etc/rsyslog.conf:</p>
16 <p>На сервере я конфигурил непосредственно /etc/rsyslog.conf:</p>
17 # модуль работы с unix socket: module(load="imuxsock") # модуль работы с journald: module(load="imjournal") # наш модуль для сбора данных по сети: module(load="imtcp" MaxSessions="500") # активация модуля с назначением правил: input(type="imtcp" port="514" ruleset="remote") # темплейт для динамической записи в папку с именем хоста и с именем файла, соответствующему имени файла на клиенте: template(name="RemoteHost" type="string" string="/opt/pabkss/%HOSTNAME%/%$.logpath%") # темплейт для записи изначального текста: template(name="OnlyMsg" type="string" string="%msg:::drop-last-lf%\n") # непосредственно правила обработки: ruleset(name="remote") { # разбираем наши логи, выстраиваем правильный путь: set $.logpath = replace($programname, "__", "/"); action(type="omfile" dynaFile="RemoteHost" template="OnlyMsg") }<h2>Используемые материалы</h2>
17 # модуль работы с unix socket: module(load="imuxsock") # модуль работы с journald: module(load="imjournal") # наш модуль для сбора данных по сети: module(load="imtcp" MaxSessions="500") # активация модуля с назначением правил: input(type="imtcp" port="514" ruleset="remote") # темплейт для динамической записи в папку с именем хоста и с именем файла, соответствующему имени файла на клиенте: template(name="RemoteHost" type="string" string="/opt/pabkss/%HOSTNAME%/%$.logpath%") # темплейт для записи изначального текста: template(name="OnlyMsg" type="string" string="%msg:::drop-last-lf%\n") # непосредственно правила обработки: ruleset(name="remote") { # разбираем наши логи, выстраиваем правильный путь: set $.logpath = replace($programname, "__", "/"); action(type="omfile" dynaFile="RemoteHost" template="OnlyMsg") }<h2>Используемые материалы</h2>
18 <ul><li><a>Хабр</a></li>
18 <ul><li><a>Хабр</a></li>
19 <li><a>Дока</a></li>
19 <li><a>Дока</a></li>
20 </ul><h2>Возникающие проблемы</h2>
20 </ul><h2>Возникающие проблемы</h2>
21 <ul><li>использование одинарных кавычек;</li>
21 <ul><li>использование одинарных кавычек;</li>
22 <li>при наличие каких-то ошибок в синтаксисе при перезапуске на сервере отображает корректный статус, но по факту не работает; будьте внимательны, портит много нервов;</li>
22 <li>при наличие каких-то ошибок в синтаксисе при перезапуске на сервере отображает корректный статус, но по факту не работает; будьте внимательны, портит много нервов;</li>
23 </ul>systemctl restart rsyslog
23 </ul>systemctl restart rsyslog