journalctl¶
journalctl是一个从systemd日志服务journald查询和显示日志的工具。由于journald使用二进制格式存储日志取代了传统的文本格式,journalctl是标准的读取journald的日志消息的方法。
快速检查服务日志¶
要检查某个服务相关日志,请使用参数
-u
(--unit
)journalctl -u service-name.service
不过,上述 -u
参数会显示这个服务相关的所有日志,但是我们往往关注最近一次操作系统启动以后的服务日志,所以我们往往还会加上 -b
参数 ( --boot
)
journalctl -u service-name.service -b
其他类型的units ( sockets, targets, timers 等等 ),也是需要使用明确的单元类型,例如:
journalctl -u socket-name.socket -b
默认情况情况下
journactl
展示日志是分页的,所以需要不停滚动来查看。但是有时候我们想一次打印出所有日志,就需要使用--no-pager
参数:journalctl -u service-name.service -b --no-pager
需要持续观察日志,则使用
-f
参数,类似tail -f
journalctl -u service-name.service -f
查看服务故障的方法通常是:
systemctl status etcd.service journalctl -xe
不过, journalctl
输出的日志行是不回行的,所以日志太长会被截断。那么怎么能够看到完整的日志呢? 参考 journalctl: how to prevent text from truncating in terminal ,方法就是输出到 less
查看:
journalctl -xe | less
清理日志¶
systemd日志通过journalctl管理,可以检查使用磁盘量和清理:
检查当前journal使用磁盘量:
journalctl --disk-usage
显示输出类似:
Archived and active journals take up 3.9G in the file system.
清理方法可以采用按照日期清理,或者按照允许保留的容量清理 - 关键字是
vacuum
(吸尘):journalctl --vacuum-time=2d journalctl --vacuum-size=500M
如果要手工删除日志文件,一定要在删除前轮转一次journal日志:
systemctl kill --kill-who=main --signal=SIGUSR2 systemd-journald.service
如果要限制journal日志的持久化容量,可以调整
/etc/systemd/journald.conf
SystemMaxUse=500M ForwardToSyslog=no
然后重启服务:
systemctl restart systemd-journald.service
检查journal是否正常运行以及日志文件是否完整无损坏:
journalctl --verify
参考¶
还有一些比较好的文档可以学习:
Repairing CENTOS 7 Journal Corruption 提供了修复案例参考,但是该文章
journalctl --verify
是显示哪些文件损坏了,而我的实践没有输出具体文件(也可能只有正常日志文件才是added状态,其他文件都要清理?)