Сценарий: у меня работает кластер машин. На каждой машине выполняются различные программы 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: Я не тестировал. Сообщите мне, работает ли это для вас.