.. _journalctl: ================= 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 参考 ===== - `How to see full log from systemctl status service? `_ - `Using journalctl `_ - `Ultimate Guide to Logging `_ - `How to clear journalctl `_ - `Is it safe to delete /var/log/journal log files? `_ 还有一些比较好的文档可以学习: - `Using systemd journals to troubleshoot transient problems `_ - `Repairing CENTOS 7 Journal Corruption `_ 提供了修复案例参考,但是该文章 ``journalctl --verify`` 是显示哪些文件损坏了,而我的实践没有输出具体文件(也可能只有正常日志文件才是added状态,其他文件都要清理?)