centOS 常用命令之journalctl

8 阅读4分钟

一、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

五、常见问题解决

  1. 日志显示乱码 / 中文不显示

    bash

    运行

    # 临时设置字符编码
    LC_ALL=en_US.UTF-8 journalctl -u docker
    
  2. 提示 “No journal files were found” :说明 systemd-journald 未启用持久化,执行以下命令开启:

    bash

    运行

    mkdir -p /var/log/journal
    systemctl restart systemd-journald
    

总结

  1. 核心用法journalctl -u 服务名(按服务过滤)、-f(实时跟踪)、--since/--until(按时间过滤)、-p(按优先级过滤)是日常排错的高频组合。
  2. Docker 排错重点journalctl -u docker -f -p err 可实时查看 Docker 错误日志,是定位 Docker 启动 / 运行问题的首选命令。
  3. 实用技巧:导出日志到文件(>)便于离线分析,清理日志(--vacuum)可避免磁盘空间被占满。