场景:我正在运行一个机器集群。每台机器都运行各种 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%
。
附言:我还没有测试过。如果它对你有用,请告诉我。