ubuntu的日志管理journalctl
本文最后更新于:2025年11月19日 下午
在 Linux 系统中,目前主流使用的systemd管理系统,journalctl 是systemd管理和查看系统日志的主要工具,提供了许多用于处理日志的选项。以下是一些 journalctl 的常用命令。
查看日志
- 查看所有日志:
journalctl - 查看特定服务日志:
journalctl -u [服务名],例如journalctl -u ssh - 逆序查看日志:
journalctl -r - 查看实时日志输出:
journalctl -f,这将类似于传统的tail -f命令,实时显示最新的日志消息。 - 显示原始日志:
journalctl -o cat,这将显示原始的输入日志,不会显示journalctl添加的时间戳等信息。 - 显示详细的日志:
journalctl -o verbose,这将详细显示journalctl记录的所有字段。方便知道字段名,可以配置字段过滤。
过滤日志
- 按时间查看日志:
- 查看某天的日志:
journalctl --since "2022-01-01" --until "2022-01-02" - 查看最近一个小时的日志:
journalctl --since "1 hour ago" - 显示10:05之后的日志:
journalctl -S 10:05 - 显示10:05之前的日志
journalctl -U 10:05 - 查看系统本次启动的日志:
journalctl -b,journalctl -b -0 - 查看上一次启动的日志:
journalctl -b -1
- 查看某天的日志:
- 查看内核日志
journalctl -k - grep过滤日志:
journalctl -g "hello" - 按优先级查看日志:
journalctl -p [优先级],比如journalctl -p err将查看所有错误级别的日志。 - 按字段过滤日志:
journalctl [字段名]=[字段值],比如journalctl _COMM=sshd将查看所有来自 sshd 进程的日志。字段名可通过journalctl -o verbose得到 - 查看特定进程的日志:
journalctl _PID=[进程ID],例如journalctl _PID=1将查看 PID 为 1 的进程的所有日志。 - 按syslog标签过滤日志:
journalctl -t ddns,查看标签为ddns的日志,该标签为SYSLOG_IDENTIFIER字段,logger生成日志时可通过logger -t ddns添加。
磁盘管理
- 查看日志占用磁盘空间:
journalctl --disk-usage
清理日志
按时间清理
1 | |
按大小清理
1 | |
永久配置日志文件大小限制
编辑/etc/systemd/journald.conf
1 | |
配置完重启服务sudo systemctl restart systemd-journald
journalctl与rsyslogd的关系
在ubuntu上,他们二者是共存的。journalctl接收所有日志(内核和用户进程),进行自己的存储。然后也会把日志(通过syslog产生的)发送给rsyslogd,让rsyslogd根据自己的配置存储在/var/log/或是转发到其他远程服务器。
例如/var/log/auth.log里面的日志,在journalctl中也能找到。
其他
- 并不是所有日志都在journal中,标准调用syslog,进程的标准输出都在journal中。有一些进程会有自己的日志文件,就在journal中查不到。如/var/log/fail2ban.log等。
- 有些进程可能会疯狂写日志,如linux版迅雷,钉钉,微信。4G的日志,它们可能占3.5G。基本属于垃圾日志,它们可能会刷掉其他日志。journal目前并不支持配置丢弃掉某些特殊日志。需要自己找到他们的启动脚本把输出重定向到/dev/null。
ubuntu的日志管理journalctl
https://leon0625.github.io/2024/02/07/c818df9bd2ba/