运维命令——查看日志journalctl详解
1 什么是 journalctl?
journalctl 是 systemd 的一部分,用于查看由 systemd-journald 收集的日志数据。systemd-journald 会收集内核、服务、标准输出、标准错误以及应用程序的日志信息,并统一管理、存储。
相比传统的 syslog + tail 方式,journalctl 提供了更强大的过滤、格式控制和时间跳转能力。
2 基础用法
2.1 查看所有日志
# 打印所有级别的日志
journalctl
默认按时间顺序输出所有日志,可能非常长。
2.2 实时查看日志(相当于 tail -f)
journalctl -f
适合监控服务运行状态,实时滚动显示最新日志。
2.3 查看系统启动日志
journalctl -b
-b 参数表示查看当前启动周期的日志。-x参数显示详细信息:
journalctl -xb
# 过滤报错信息
journalctl -xb |grep -i error
2.4 按时间范围过滤日志
journalctl --since "2025-04-20 09:00" --until "2025-04-23 12:00"
journalctl --since "2 hours ago"
3 强大的过滤机制
3.1 按服务过滤日志
journalctl -u docker.service
journalctl -u nginx.service
可以看到 nginx 服务的所有日志。
3.2 查看特定 PID 的日志
journalctl _PID=1234
3.3 按用户 ID 过滤
journalctl _UID=1000
3.4 查看内核日志(类似 dmesg)
journalctl -k
4 日志持久化配置
4.1 默认日志是临时的吗?
journal产生的日志默认是临时,有些 Linux 发行版默认日志存储在 /run/log/journal/,属于非持久化,重启就没了。
4.2 如何开启日志持久化?
sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald
重启后日志就会存储在 /var/log/journal/,永久保存。
5 管理日志空间
修改 /etc/systemd/journald.conf,添加如下配置:
SystemMaxUse=500M # 日志文件最大空间
SystemKeepFree=100M # 至少保留这么多磁盘空间
SystemMaxFileSize=100M # 单个日志文件最大大小
SystemMaxFiles=10 # 最多保留几个文件
配置后重启服务生效:
sudo systemctl restart systemd-journald
6 按日志级别过滤
journalctl -p err # 显示错误及以上级别日志
journalctl -p warning # 显示警告及以上级别日志
日志级别一览(数字/名称):
数值 | 名称 | 说明 |
0 | emerg | 紧急,系统不可用 |
1 | alert | 需立刻处理 |
2 | crit | 严重 |
3 | err | 错误 |
4 | warning | 警告 |
5 | notice | 正常但重要信息 |
6 | info | 一般信息 |
7 | debug | 调试信息 |
journalctl 是一个功能强大的工具,用于查询和管理系统日志。通过合理使用其选项,你可以方便地查看、过滤和分析日志信息。