journalctl 是什么
journalctl 是 systemd 的日志查询工具,把系统与各服务的日志集中在 journal 里:可按服务、时间、优先级、启动顺序过滤,也能实时跟看、查看磁盘占用并做清理。它是 Linux 主机排障的起点——服务起不来先看它,磁盘告警先看它,重启前后对比也先看它。日志能否长期保留,取决于 /var/log/journal 目录是否存在。
基本信息
| 适用平台 | 使用 systemd 的 Linux,如 CentOS 7+、Ubuntu 16.04+ |
|---|---|
| 常用参数 | -u 服务名、-f 实时、--since/--until、-p 优先级、-b 启动序号、-k 内核 |
| 持久化条件 | /var/log/journal 目录存在时长期保留 |
| 存储位置 | 默认 /var/log/journal 或 /run/log/journal |
| 权限要求 | 完整读取通常需要 root 或加入 systemd-journal 组 |
典型使用场景
- 服务启动失败:用 -u 指定服务看报错堆栈,比翻文件日志更快定位
- 时间窗口排查:用 --since 与 --until 精确圈定故障时段
- 重启对比:-b 与 -b -1 对照本次与上次启动的日志差异
- 内核问题:-k 只看内核消息,排查内存不足、驱动与硬件报错
- 空间治理:--disk-usage 与 --vacuum 控制日志占用,避免撑满磁盘
排查要点
- 先用 -u 把范围收窄到目标服务,再叠加时间过滤,输出才读得完
- 与外部系统对齐时间时加 -o short-precise,能看到精确到微秒的时间
- 怀疑配置改动引入问题时,用 --since 定位到变更前后各一段窗口对照
- 告警频繁指向同一服务时,先确认日志级别设置是否过低导致噪声
- 清理前先记录当前占用与保留策略,避免下次复盘时无据可查
常用命令
常用命令
journalctl -u nginx -f # 实时跟看某服务
journalctl -u nginx --since "1 hour ago" # 时间过滤
journalctl -p err -b # 本次启动的错误级别
journalctl -b -1 -p err # 上一次启动的错误
journalctl -k # 仅内核消息
journalctl --disk-usage # 当前占用空间
journalctl --vacuum-time=7d # 只保留最近 7 天
journalctl -u nginx --since "10:00" --until "10:30" -o short-precise常用参数读法
| 参数 | 作用 | 备注 |
|---|---|---|
| -u 服务名 | 按服务过滤 | 服务名需与 systemctl 显示一致 |
| -f | 实时跟看 | 类似 tail -f,退出用 Ctrl+C |
| --since / --until | 限定时间范围 | 支持 1 hour ago 这类自然写法 |
| -p | 按优先级过滤 | err 及以上;数字越小越严重 |
| -b | 启动序号 | -b -1 表示上一次启动 |
journalctl 默认按时间正序输出,排查时配合 --no-pager 便于把结果重定向到文件,再交给他人分析。