Назад | Перейти на главную страницу

Использование rsyslog для создания разных файлов журналов для разных процессов

Сценарий: у меня работает кластер машин. На каждой машине выполняются различные программы Python с уникальным (в кластере), но динамически устанавливаемым идентификатором.

Прямо сейчас они все ведут локальный журнал. Итак, у меня могут быть журналы, которые выглядят так:

process_5.log
process_6.log

для процессов с идентификаторами 5 и 6.

Другая машина может иметь:

process_20.log
process_25.log

Я хочу переслать эти журналы на сервер журналов, на котором запущен rsyslogd. У средства ведения журнала Python есть хороший обработчик системного журнала, поэтому я понимаю, как я могу подключиться к удаленному серверу. Чего я не понял, так это того, как использовать templating / DynFile для разделения журналов.

например на сервере журнала я хочу увидеть:

process_5.log
process_6.log
process_20.log
process_25.log

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

Есть ли способ добиться этого с помощью шаблонов rsyslogd?

Как написал квант пользователя, их шаблон должен работать. Вот мой:

$template DynFile, "/var/log/syslog/%HOSTNAME%/%$YEAR%/%$MONTH%/%$DAY%/%syslogfacility-text%.log"
*.info;mail.none;authpriv.none;cron.none            ?DynFile
authpriv.*                                          ?DynFile
mail.*                                              ?DynFile
cron.*                                              ?DynFile
uucp,news.crit                                      ?DynFile

Это приведет к тому, что журналы для каждого приложения или объекта будут помещены в отдельный файл. Журнал каждого клиента на сервере будет выглядеть так же, как и на клиенте.

Обратите внимание на %syslogfacility-text%. Вы можете заменить эту часть на различные другие свойства в соответствии с Заменитель собственности документация.

На каждой машине выполняются различные программы Python с уникальным (в кластере), но динамически устанавливаемым идентификатором.

Есть ли process_$ID это тоже название программы? И если да, попробуйте это:

$template DynaFile,"/var/log/rsyslog/python_apps/%PROGRAMNAME%.log"
if $programname startswith 'process' then -?DynaFile

Вы можете положить его в отдельную папку с %HOSTNAME% если вы хотите.

PS: Я не тестировал. Сообщите мне, работает ли это для вас.