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

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

场景:我正在运行一个机器集群。每台机器都运行各种 Python 程序,这些程序具有一个唯一(跨集群)但动态设置的 ID。

目前,它们都在本地进行日志记录。因此,我可能会有如下日志:

process_5.log
process_6.log

对于 ID 为 5 和 6 的进程。

另一台机器可能有:

process_20.log
process_25.log

我希望将这些日志转发到运行 rsyslogd 的日志服务器。Python 的日志记录工具有一个很好的 syslog 处理程序,所以我知道如何连接到远程服务器。我还没弄清楚如何使用模板/DynFile 来保持日志分离。

例如在日志服务器上,我希望看到:

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

与发送机器上的同名日志相对应。

有没有办法使用 rsyslogd 模板来实现这一点?

答案1

正如用户 quanta 所说,他们的模板应该可以工作。这是我的模板:

$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%。您可以根据属性替换器文档。

答案2

每台机器运行各种 Python 程序,具有唯一(跨集群)但动态设置的 ID。

process_$ID也是程序名称吗?如果是,请尝试以下操作:

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

如果您愿意,可以将其放在单独的文件夹中%HOSTNAME%

附言:我还没有测试过。如果它对你有用,请告诉我。

相关内容