使用rsyslog为不同的进程创build不同的日志文件

场景:我正在运行一组机器。 每台机器运行各种独特的Python程序(跨群集),但dynamic设置ID。

现在,他们都在本地进行日志logging。 所以,我可能有这样的日志:

process_5.log process_6.log 

对于ID为5和6的进程。

另一台机器可能有:

 process_20.log process_25.log 

我希望将这些日志转发到运行rsyslogd的日志服务器。 Python的日志logging工具有一个很好的系统日志处理程序,所以我知道如何连接到远程服务器。 我没有想到的是如何使用模板/ 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% 。 您可以根据Property Replacer文档将此部分replace为其他各种属性。

每台机器运行各种独特的Python程序(跨群集),但dynamic设置ID。

process_$ID是否也是程序名? 如果是的话,试试这个:

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

如果需要,可以将其放在带有%HOSTNAME%单独文件夹中。

PS:我没有testing过。 请让我知道这对你有没有用。