journalctl
journalctl
journalctl 是用于查询和显示 Systemd 日志守护进程 (journald) 收集的日志的工具。是 systemd 系统中的核心日志管理工具,它和传统的 syslog、/var/log/messages 不同,采用 二进制日志数据库,配合 systemd 的服务管理,日志管理更强大
属于
systemd-journald服务的前端工具,用来 查询、过滤、管理 systemd 日志。日志来源:
- 内核(
dmesg替代品) - systemd 服务单元(unit)
- 标准输出 / 标准错误(systemd 管理的服务自动收集)
- Syslog API(兼容传统应用日志)
- 内核(
基础用法
journalctl: 显示所有收集到的日志(从最旧到最新)。journalctl -r: 倒序显示所有日志(从最新到最旧)。journalctl -f: 实时跟踪新生成的日志。journalctl -e跳到日志末尾(类似 tail -f)journalctl -n 50查看最近 50 行
按时间过滤
-b或--boot: 显示本次系统启动以来的所有日志。- 示例:
journalctl -b
- 示例:
-b -1: 显示上一次系统启动的日志。-b -2倒数第2次启动--since/--until: 按绝对时间或相对时间过滤。- 示例:
--since "2 hours ago" - 示例:
--since "2025-10-26 10:00:00" - 示例:
--since yesterday --until today(可使用yesterday、2 hours ago等相对时间)
- 示例:
按单元和服务过滤
-u [UNIT]: 按 Systemd 单元名称过滤(最常用,用于查看服务日志)。- 示例:
journalctl -u sing-box.service
- 示例:
-u [UNIT] -f: 实时跟踪特定服务的日志。-t [TAG]: 按日志标签(Tag)过滤。- 示例:
journalctl -t sshd
- 示例:
_PID=[PID]: 按进程 ID 过滤。- 示例:
journalctl _PID=1234
- 示例:
_UID=[UID]: 按用户uid过滤- journalctl _UID=1000
按重要性(级别)过滤
使用 -p [LEVEL] 参数,显示该级别或更高级别的日志。
- 重要性级别(从最高到最低):
emerg(0): 系统不可用alert(1): 需要立即采取行动crit(2): 严重错误err(3): 错误情况warn(4): 警告info(6): 普通信息debug(7): 调试信息
- 示例:
journalctl -p err(显示级别为 Error 及更紧急的所有日志)
输出控制
-n [LINES]: 限制输出行数。- 示例:
journalctl -n 20(只显示最新的 20 行)
- 示例:
-o [FORMAT]: 更改输出格式。- 常用格式:
short(默认),json,json-pretty(美化 JSON)。
- 常用格式:
--no-full: 避免截断长行。
1 | journalctl -o short # 默认 |
实用组合示例
journalctl -xe: 扩展 (-x) 显示当前 Systemd 日志,常用于查看最近的错误信息。journalctl -u sshd -r --since "01:00" -n 50: 倒序显示 SSHD 服务从今天凌晨 1 点以来的最新 50 条日志。journalctl -b -p 3: 显示本次系统启动中所有级别为 错误 (err) 或更高级别的日志。
管理与维护
systemd 日志默认存储在:
- **/run/log/journal/**(内存,重启丢失)
- **/var/log/journal/**(磁盘,持久化)
要启用持久化日志:
1 | mkdir -p /var/log/journal |
日志大小控制
配置文件:/etc/systemd/journald.conf
关键参数:
1 | [Journal] |
清理日志
1 | journalctl --disk-usage # 查看日志占用 |
实际运维场景
排查服务启动失败
1
2systemctl status nginx
journalctl -u nginx -xe排查内核错误(OOM、panic、驱动)
1
journalctl -k -b -1
安全审计(登录失败、sudo 使用情况)
1
2journalctl _COMM=sshd
journalctl _UID=0
对比传统 syslog
| 特性 | syslog | journalctl (systemd) |
|---|---|---|
| 日志格式 | 纯文本 | 二进制,可索引 |
| 过滤 | 基于 grep/awk | 内建多维度过滤 |
| 查询速度 | 依赖文本搜索 | 快速索引,按字段过滤 |
| 持久化 | 默认磁盘文件 | 可选内存/磁盘 |
| 集中管理 | 需 rsyslog/syslog-ng | 内建 API,可结合 ELK/Prometheus |
journalctl 是 systemd 世界里的统一日志接口,它比传统 tail /var/log/messages 更强大,能按 服务、时间、PID、UID、级别 多维度过滤,还能控制存储策略。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 满杯是幸福 空杯是自由!
评论
