在运维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
网友评论