跳转到内容
搜索 RunEntLinux 文档

仅搜索 RunEntLinux 通用文档,各发行版文档使用各自的搜索入口。

    浏览当前文档目录

    Journal 日志

    systemd 内置的日志系统 journald 负责收集和存储所有系统日志,包括内核消息、服务输出和系统事件。journalctl 是查询这些日志的命令行工具,提供了比传统 /var/log/messages 更强大的过滤和检索能力。

    查看全部系统日志(从最早到最新)
    sudo journalctl

    日志默认通过分页器(pager)显示,可以使用方向键滚动,按 q 退出。

    查看最近 20 条日志
    sudo journalctl -n 20

    类似于 tail -f,实时显示新产生的日志:

    实时跟踪系统日志输出
    sudo journalctl -f
    从最新的日志开始查看
    sudo journalctl -r

    当需要将日志通过管道传递给其他工具时:

    输出日志到标准输出(不分页)
    sudo journalctl --no-pager -n 100
    以 JSON 格式输出日志
    sudo journalctl -o json-pretty -n 5

    常用的输出格式:

    格式说明
    short(默认)类似传统 syslog 格式
    short-iso使用 ISO 8601 时间戳
    verbose显示所有字段
    jsonJSON 格式(每条一行)
    json-pretty格式化的 JSON
    cat只显示消息内容,不含时间戳等元数据
    查看 Nginx 服务的日志
    sudo journalctl -u nginx.service

    -u 参数可以省略 .service 后缀:

    简写形式
    sudo journalctl -u nginx
    同时查看 Nginx 和 PHP-FPM 的日志
    sudo journalctl -u nginx -u php-fpm
    实时跟踪 sshd 服务日志
    sudo journalctl -u sshd -f
    查看今天的日志
    sudo journalctl --since today
    查看昨天的日志
    sudo journalctl --since yesterday --until today
    查看指定时间范围的日志
    sudo journalctl --since "2026-03-24 08:00:00" --until "2026-03-24 12:00:00"
    查看最近 1 小时的日志
    sudo journalctl --since "1 hour ago"
    查看最近 30 分钟的日志
    sudo journalctl --since "30 min ago"
    只查看当前启动以来的日志
    sudo journalctl -b
    查看上一次启动的日志(排查重启前的问题)
    sudo journalctl -b -1
    列出所有记录的启动会话
    journalctl --list-boots

    journald 的日志优先级与 syslog 保持一致:

    优先级数值说明
    emerg0系统不可用
    alert1必须立即处理
    crit2严重错误
    err3一般错误
    warning4警告信息
    notice5正常但值得注意
    info6普通信息
    debug7调试信息
    只查看错误及以上级别的日志
    sudo journalctl -p err
    查看警告到错误级别的日志
    sudo journalctl -p warning..err

    多个过滤条件可以自由组合:

    查看今天 sshd 的错误日志
    sudo journalctl -u sshd -p err --since today
    查看指定 PID 的日志
    sudo journalctl _PID=1234
    查看指定用户产生的日志
    sudo journalctl _UID=1000
    查看指定程序产生的日志
    sudo journalctl _EXE=/usr/sbin/sshd
    只查看内核消息(类似 dmesg)
    sudo journalctl -k

    默认情况下,部分 EL 系统的 journald 日志存储在内存中(/run/log/journal/),重启后丢失。要启用持久化存储,需要进行以下配置:

    创建 journal 持久化存储目录
    sudo mkdir -p /var/log/journal
    编辑 journald 配置文件
    sudo vim /etc/systemd/journald.conf

    找到 [Journal] 段,修改或添加以下配置:

    /etc/systemd/journald.conf 关键配置
    [Journal]
    Storage=persistent

    Storage= 的可选值:

    值说明
    auto(默认)如果 /var/log/journal/ 目录存在则持久化,否则存内存
    persistent始终持久化,自动创建目录
    volatile只存储在内存中
    none不存储日志
    重启 systemd-journald 服务
    sudo systemctl restart systemd-journald
    确认日志文件已写入磁盘
    ls -la /var/log/journal/

    随着时间推移,日志会占用大量磁盘空间。journald 提供了多种方式来控制日志大小。

    查看 journal 日志占用的磁盘空间
    sudo journalctl --disk-usage
    将日志文件缩减到 500MB 以内
    sudo journalctl --vacuum-size=500M
    删除 30 天前的日志
    sudo journalctl --vacuum-time=30d
    只保留最近 5 个日志文件
    sudo journalctl --vacuum-files=5

    编辑 /etc/systemd/journald.conf 来设置长期生效的限制:

    /etc/systemd/journald.conf 空间限制配置
    [Journal]
    Storage=persistent
    # 持久化日志最大占用空间
    SystemMaxUse=1G
    # 持久化日志保证预留的磁盘空间
    SystemKeepFree=2G
    # 单个日志文件的最大大小
    SystemMaxFileSize=100M
    # 内存中日志的最大占用空间
    RuntimeMaxUse=200M

    修改后重启 journald:

    重启 journald 使限制配置生效
    sudo systemctl restart systemd-journald
    在 Nginx 日志中搜索 502 错误
    sudo journalctl -u nginx --no-pager | grep "502"
    查看服务最近一次启动失败的完整日志
    sudo journalctl -u myapp.service -b --no-pager -n 50
    将今天的系统日志导出到文件
    sudo journalctl --since today --no-pager > /tmp/today-logs.txt

    查看日志字段(便于精确过滤)

    Section titled “查看日志字段(便于精确过滤)”
    列出日志中所有可用的过滤字段
    sudo journalctl -o verbose -n 1