如何配置带有日志的单位日志存储策略?


14

我有一项特别的服务,它会记录罕见但重要的信息。我已经在几个月前进行了设置,而今天我journalctl -n 50 --unit=my-service只发现没有条目。

我对大多数单位的这种行为感到非常满意-我要么需要立即(或最多几天前)发生的事情,而且我不在乎已有数月历史的记录。

但是,有没有办法告诉journald您为单个特定单位的记录制定独立的存储和保留策略?我想将这些特殊的日志保存5年,无论它需要多大大小。其他单位的日志应不受此影响,并保留其现有行为。

我有点不了解journald.conf(5),无法确定每单位的配置是否可行。如果是的话(请看一个简短的具体示例),我应该编辑/创建哪个文件,我应该写什么。或者,如果您确定肯定不可行,那也是一个很好的答案。

注意:我的特殊情况涉及Arch Linux主机,但是我想这应该没多大关系。


我无法在上面的答案上发表评论,以将此链接添加到有关将此功能添加到日记中的问题的链接,因此,这里是另一个答案:github.com/systemd/systemd/issues/4751
swoop81 '18

Answers:


7

似乎我很可能没有日志记录。除非我想出一种方法来产生独立的“长期存储”期刊(例如当前有不同的每用户期刊),但是我不确定这是一种可行且理智的方法。我猜想,设置syslogd(和logrotate)会更容易。

Lennart本人证实,该功能于2014年底不存在

似乎还没有到。至少,“ journald:在轮换/抽真空时允许按优先级和按服务保留时间”行仍在TODO文件中(链接至2016-07-11的修订版)。


3
这似乎是一个很大的设计缺陷,几乎崩溃了。特别是如果要减少非常健谈的单元的保留或至少达到日志级别,这会阻塞日志。
Orion

1
对于任何在此问题上绊脚石的人,截至本评论(26.03.18)时,TODO中仍然存在引用的行:github.com/systemd/systemd/blob/…–
timss

1
为了使它更具吸引力,我将其作为项目-github.com/systemd/systemd/issues/9519提出来
slm

1

生成日志文件非常简单。默认情况下,所有记录到日志的日志也会进入syslog,并且此默认值必须存在。rsyslog.conf控制如何处理传递到syslog的条目。此外,SyslogFacility默认设置为,daemon因此任何服务的日志条目通常都位于的daemon.log文件中/var/log

在您的服务文件中,添加到[service]部分

SyslogFacility=local2

(数字可以在0到7之间)https://www.freedesktop.org/software/systemd/man/systemd.exec.html

修改/etc/rsyslog.conf(找到要修改的现有行),以便将local2记录到特定文件(第一行),并且理想情况下不通过添加local2.none所示记录到syslog (它已经存在于日志中)。

local2.*                        /var/log/your-service-name.log
*.*;auth,authpriv.none,local2.none          -/var/log/syslog

[编辑]您还需要修改所有内容

*.=info;*.=notice;*.=warn;\
        auth,authpriv.none;\
        cron,daemon.none;\
        mail,news.none,local2.none      -/var/log/messages

当然,实际保留需要通过logrotate完成。

高温超导

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.