systemd日志输出到文件

2022-08-29  本文已影响0人  Ballpenww

在运维etcd集群时,3.4版本可以制定--logger zap(3.5是默认参数是zap),然后通过--log-outputs 'etcd.log'的方式输出到制定文件,但在3.3或在3.4使用非zap的logger时,--log-outputs只支持default/stdout/stderr等3种方式。在使用systemd管理的情况下会输出到journalctl

那现在问题就是: 如何将systemd的日志输出到制定文件。

在/usr/lib/systemd/system/etcd.service中增加如下3行:

StandardOutput=syslog  # 主要是这3行
StandardError=syslog   #
SyslogIdentifier=etcd   #

/etc/rsyslog.d/目录下增加配置文件,如etcd.conf

$vim /etc/rsyslog.d/etcd.conf
if $programname == 'etcd' then /data/etcd.log
& stop

新建/data/etcd.log文件,并修改文件归属到etcd用户【应该是syslog用户,但我系统上没这个用户,暂时就用etcd,测试可以写入】
重启rsyslog和etcd

systemctl daemon-reload
systemctl restart etcd rsyslog

然后观察对应文件是否正常输出,如果不对,通过journalctl -f -u <promgramname>查看相关日志输出。

如果帮到你,辛苦点赞鼓励下吧!

遇到的问题:

我使用的系统版本是:Description: CentOS Linux release 7.6.1810 (Core)
systemd的版本:systemd 219
当配置如下:

if $programname == 'etcd' then /data/etcd.log
& stop

报错如下:

invalid character in selector line - ';template' expected [v8.24.0-34.el7]
error during parsing file /etc/rsyslog.d/etcd.conf, on or before line 1: errors occured in file '/etc/rsyslog.d/etcd.conf' around line 1 [v8.24.0-34.el7 try http://www.rsyslog.com/e/2207 ]

根据他提供的bug地址,我架构stop修改为stopp,结果新的报错和提示如下:

action 'stopp' treated as ':omusrmsg:stopp' - please use ':omusrmsg:stopp' syntax instead, 'stopp' will not be supported in the future [v8.24.0-34.el7 try http://www.rsyslog.com/e/2184 ]
error during parsing file /etc/rsyslog.d/etcd.conf, on or before line 2: warnings occured in file '/etc/rsyslog.d/etcd.conf' around line 2 [v8.24.0-34.el7 try http://www.rsyslog.com/e/2207 ]

按照提示我们将stopp修改为':omusrmsg:stopp'
最终/etc/rsyslog.d/etcd.conf内容如下:

if $programname == 'etcd' then /data/etcd.log
& :omusrmsg:stopp
上一篇 下一篇

猜你喜欢

热点阅读