我的 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