一、journalctl 核心概念
journalctl 用于查看systemd-journald 服务收集的所有系统日志,包括:
- 系统启动日志、内核日志、服务运行日志(如 docker、sshd);
- 日志按时间戳有序存储,支持按服务、时间、优先级等多维度过滤;
- 日志默认持久化存储在
/var/log/journal/(CentOS 7 默认开启)。
二、journalctl 基础用法(必掌握)
1. 查看所有日志(默认按时间倒序)
bash
运行
# 查看全部日志(从旧到新,按End键翻页,q退出)
journalctl
# 查看最新日志(从新到旧,更常用)
journalctl -r
2. 实时跟踪日志(类似 tail -f)
bash
运行
# 实时查看所有日志(排查服务运行中报错时用)
journalctl -f
# 结合你刚装的Docker,实时跟踪Docker日志(核心用法)
journalctl -u docker -f
3. 按服务过滤日志(最常用)
-u(unit)参数指定服务名,精准查看某个服务的日志,是管理服务时的核心用法:
bash
运行
# 查看Docker服务的所有日志
journalctl -u docker
# 查看sshd服务日志(排查远程连接问题)
journalctl -u sshd
# 查看网络服务日志
journalctl -u network
4. 按时间过滤日志(精准定位问题)
bash
运行
# 查看最近1小时的日志
journalctl --since "1 hour ago"
# 查看指定时间段的Docker日志(示例:2026-02-12 10点到11点)
journalctl -u docker --since "2026-02-12 10:00:00" --until "2026-02-12 11:00:00"
# 查看今天的所有日志
journalctl --since today
# 查看昨天的日志
journalctl --since yesterday --until today
5. 按日志优先级过滤(筛选错误)
日志优先级从高到低:0(emerg) > 1(alert) > 2(crit) > 3(err) > 4(warning) > 5(notice) > 6(info) > 7(debug)
bash
运行
# 只查看Docker服务的错误日志(优先级3及以上)
journalctl -u docker -p err
# 查看系统所有紧急/严重错误(优先级0-2)
journalctl -p crit
三、journalctl 高级用法(排错必备)
1. 查看日志并显示时间戳(精确到秒)
默认日志的时间戳格式不直观,加-o short-iso可显示标准时间:
bash
运行
# 查看Docker日志,显示精确时间戳
journalctl -u docker -o short-iso
# 显示更详细的时间(精确到毫秒)
journalctl -u docker -o short-precise
2. 查看日志并显示进程 ID(PID)
bash
运行
# 查看Docker日志,同时显示进程ID
journalctl -u docker _PID=12345 # 指定PID
# 或
journalctl -u docker -o verbose # 显示所有详细字段(含PID、UID等)
3. 查看系统启动日志(排查开机问题)
bash
运行
# 查看本次启动的所有日志
journalctl -b
# 查看上一次启动的日志(系统崩溃/重启后排查)
journalctl -b -1
4. 导出日志到文件(便于分析 / 分享)
bash
运行
# 将Docker日志导出到文件
journalctl -u docker > /tmp/docker-logs.txt
# 导出最近1小时的Docker错误日志
journalctl -u docker --since "1 hour ago" -p err > /tmp/docker-err-logs.txt
5. 清理日志(释放磁盘空间)
日志默认会占用磁盘空间,可按需清理:
bash
运行
# 查看日志占用空间
journalctl --disk-usage
# 保留最近7天的日志,删除更早的
journalctl --vacuum-time=7d
# 限制日志总大小为100M,超出自动清理
journalctl --vacuum-size=100M
四、结合 Docker 的实战示例
bash
运行
# 1. 排查Docker启动失败:查看Docker服务的最新错误日志
journalctl -u docker -r -p err
# 2. 实时跟踪Docker运行日志,同时显示精确时间
journalctl -u docker -f -o short-iso
# 3. 查看今天Docker启动阶段的日志(定位启动慢/失败问题)
journalctl -u docker --since today | grep -i "start"
# 4. 导出Docker最近2小时的完整日志,用于离线分析
journalctl -u docker --since "2 hours ago" > /tmp/docker-recent-logs.txt
五、常见问题解决
-
日志显示乱码 / 中文不显示:
bash
运行
# 临时设置字符编码 LC_ALL=en_US.UTF-8 journalctl -u docker -
提示 “No journal files were found” :说明 systemd-journald 未启用持久化,执行以下命令开启:
bash
运行
mkdir -p /var/log/journal systemctl restart systemd-journald
总结
- 核心用法:
journalctl -u 服务名(按服务过滤)、-f(实时跟踪)、--since/--until(按时间过滤)、-p(按优先级过滤)是日常排错的高频组合。 - Docker 排错重点:
journalctl -u docker -f -p err可实时查看 Docker 错误日志,是定位 Docker 启动 / 运行问题的首选命令。 - 实用技巧:导出日志到文件(
>)便于离线分析,清理日志(--vacuum)可避免磁盘空间被占满。