如何使用 rsyslog 模板根据通配符 syslog 工具编写日志文件?

如何使用 rsyslog 模板根据通配符 syslog 工具编写日志文件?

我的 systemd 目标/服务设计具有多个子服务,所有子服务均具有唯一标识。我 test.target需要 10 个[email protected]实例。结果是目标运行,并且有 10 个已识别的服务。例如,这是让目标控制一堆类似服务的常用方法。[email protected], [email protected], etc...

每个服务都将 Systemd SyslogIndentifer 设置为SyslogIdentifier=test-%i。因此,当它记录到 syslog/journald 时,设施名称为test-0,test-1, etc...

以下是 journald 日志的示例,请注意其功能test-0

Oct 29 03:32:35 black-node.local test-0[5015]: 1603942355636701,CON,192.168.10.151:57458,4,12,1,-,-,-,timeout expired; UDP connection assumed closed.

现在,我需要/想要将所有生成的test-*syslog 消息记录到单独的日志文件中。我尝试在 `/etc/rsyslog.d/test.conf 中添加以下内容:

$template TestFile,"/var/log/test-%syslogfacility-text%.log"
test-*.*   ?TestFile

但是在恢复 rsyslogd() 时我收到以下错误sudo systemctl restart rsyslog

Message from syslogd@black-node at Oct 29 03:19:22 ...
 rsyslogd:file './.* ? TestFile': open error: Permission denied [v8.24.0-52.el7 try http://www.rsyslog.com/e/2433 ]

Message from syslogd@black-node at Oct 29 03:19:22 ...
 rsyslogd:action 'action 2' resumed (module 'builtin:omfile') [v8.24.0-52.el7 try http://www.rsyslog.com/e/2359 ]

这不是文件权限问题,rsyslog 错误 2359 页面显示这可能与 selinux (!!!) 有关。因此,我尝试关闭 selinux ( sudo setenforce 0) 并再次重新启动 rsyslogd:

Message from syslogd@black-node at Oct 29 03:18:07 ...
 systemd:Started System Logging Service.

Message from syslogd@black-node at Oct 29 03:18:07 ...
 rsyslogd:error during parsing file /etc/rsyslog.d/test.conf, on or before line 7: warnings occured in file '/etc/rsyslog.d/transfers.conf' around line 7 [v8.24.0-52.el7 try http://www.rsyslog.com/e/2207 ]

Message from syslogd@black-node at Oct 29 03:18:07 ...
 rsyslogd:action '*' treated as ':omusrmsg:*' - please use ':omusrmsg:*' syntax instead, '*' will not be supported in the future [v8.24.0-52.el7 try http://www.rsyslog.com/e/2184 ]

这更令人鼓舞吗?我不知道该如何申请,或者是否应该申请 :omusrmsg: 但我试过了:

$template TestFile,"/var/log/test-%syslogfacility-text%.log"
test-:omusrmsg:*.*   ?TestFile

现在 rsyslog 重新启动正常,没有错误或投诉,但也没有新的日志文件。

这时我快要疯了,所以我隔离了第一个服务设施test-0

$template TestFile,"/var/log/test-%syslogfacility-text%.log"
test-0.*   ?TestFile

我看到了 messages/journald 中的日志,但是我的日志文件未创建,并且重新启动时没有任何 rsyslog 错误。

我如何才能简单地将多个日志工具聚合到一个日志文件中?我甚至似乎无法让一般的动态日志文件类型发挥作用?!任何提示都将不胜感激。谢谢。

答案1

SyslogIdentifier=test-0不是设施而是程序名称。替换%syslogfacility-text%%programname%并使用旧式属性过滤器选择器喜欢

:programname, startswith, "test-"  ?TestFile

相关内容