journal, journalctl, syslog

1
2
# -u 指定 unit
journalctl -u file-server

清理磁盘空间

1
2
3
4
5
6
7
8
9
# Check current disk usage of journal files
sudo journalctl --disk-usage

# Delete journal logs older than 5 days:
sudo journalctl --vacuum-time=5days
# Delete log files until the disk space taken falls below 200M:
sudo journalctl --vacuum-size=200M
# Delete old logs and limit file number to 10:
sudo journalctl --vacuum-files=10

Arch Linux 启用 systemd 后, 很多服务都被替换掉了, 当然 syslog 也不例外, 被 Systemd Journal 所替代。

systemd 拥有强大的处理与系统日志记录功能。在使用其它工具时,日志往往被分散在整套系统当中,由不同的守护进程及进程负责处理,这意味着我们很难跨越多种应用程序对其内容进行解读。

相比之下, systemd 尝试提供一套集中化管理方案, 从而统一处理全部内核及用户级进程的日志信息。这套系统能够收集并管理日志内容,而这也就是我们所熟知的 journal。

Journal的实现归功于journald守护进程,其负责处理由内核、initrd以及服务等产生的信息

journal config

/etc/systemd/journald.conf

SystemMaxUse=1024M

journald unit log, max size of journal log

1
sudo journalctl -b -u systemd-journald

customiz journal size

1
2
/etc/systemd/journald.conf
SystemMaxUse=50M
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# 最近一次重新引导后收集到的日志
journalctl -b

sudo journalctl /usr/lib/systemd/systemd -b

# 查看系统上全部来自 Nginx 单元的日志
journalctl -u nginx.service
journalctl -u nginx.service --since today
journalctl -u nginx.service --since "2018-06-11 12:00:00"
journalctl --since "2015-01-10" --until "2015-01-11 03:00"
journalctl --since "2020-11-02 00:00" --until "2020-11-02 10:00"
journalctl --since "2020-11-02 00:00" --until "2020-11-02 10:00" | grep -v write

# 检查当前journal使用磁盘量
journalctl --disk-usage

journalctl --vacuum-time=2d

#如果使用–vacuum-size 选项,则可硬性指定日志的总体体积,意味着其会不断删除旧有记录直到所占容量符合要求
sudo journalctl --vacuum-size=1G

# 修改配置文件之后需要重启
systemctl restart systemd-journald.service

#检查journal是否运行正常以及日志文件是否完整无损坏
journalctl --verify

# 显示特定时间区间内的日志
journalctl --since=yesterday
journalctl --since=2012-10-15 --until="2011-10-16 23:59:59"

显示特定程序的所有消息:

# journalctl /usr/lib/systemd/systemd
显示特定进程的所有消息:

# journalctl _PID=1
显示与指定用户相关的日志: 

# journalctl _UID=70
# journalctl _UID=70 _UID=71

# 指定日志文件占据的最大空间
sudo journalctl --vacuum-size=1G

# 指定日志文件保存多久
$ sudo journalctl --vacuum-time=1years

大家可以配置自己的服务器以限定journal所能占用的最高容量。要实现这一点,我们需要编辑/etc/systemd/journald.conf文件。

以下条目可用于限定journal体积的膨胀速度:

SystemMaxUse=: 指定journal所能使用的最高持久存储容量。

SystemKeepFree=: 指定journal在添加新条目时需要保留的剩余空间。

SystemMaxFileSize=: 控制单一journal文件大小,符合要求方可被转为持久存储。

RuntimeMaxUse=: 指定易失性存储中的最大可用磁盘容量 (/run文件系统之内) 。

RuntimeKeepFree=: 指定向易失性存储内写入数据时为其它应用保留的空间量 (/run文件系统之内) 。

RuntimeMaxFileSize=: 指定单一journal文件可占用的最大易失性存储容量 (/run文件系统之内) 。

分发

systemd journal本身未提供日志分发功能。

常见的解决方案,做好单机日志的存储配置之后,通过rsync、btsync等工具收集同步日志至某中心节点进行分析处理。

另外在systemd-193添加了systemd-journal-gatewayd.service,服务器开启此服务之后,将监听本地19531端口,其他机器可通过HTTP或JSON协议访问服务器得到后者日志,详细介绍(登录验证等)请查看systemd-journal-gatewayd.service。

注: systemd-212引入了 systemd-journal-remote >systemd-journal-remote is a command to receive serialized journal events and store them to the journal.

https://huataihuang.gitbooks.io/cloud-atlas/os/linux/redhat/system_administration/systemd/systemd_clear_journalctl.html

http://fangpeishi.com/systemd_chapter4.html

http://blog.csdn.net/zstack_org/article/details/56274966