Skip to main content
☘️ Septvean's Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

journal

一、journal 是什么?

journal 是 systemd 的日志系统,全名:systemd-journald

它替代(或配合)传统的 /var/log/*.log 文本日志。

journal = 结构化、索引化、统一入口的系统日志数据库

二、journal vs 传统 syslog

对比项 journal /var/log
存储格式 二进制 纯文本
查询 索引、字段过滤 grep
元数据 丰富(PID/UID/UNIT)
顺序 强一致 可能乱序
性能 IO 密集
远程 需转发 原生支持

📌 RHEL 9 默认:journal + rsyslog 并存

三、journal 的核心设计

1️⃣ 日志来源

journal 收集:

  • 内核日志(dmesg)
  • systemd 服务 stdout/stderr
  • syslog
  • audit
  • 内核 ring buffer

统一写入:

/run/log/journal/   # 临时(内存)
/var/log/journal/   # 持久化

2️⃣ 持久化策略(非常重要)

查看当前模式

journalctl --disk-usage

默认行为

情况 存储位置
/var/log/journal 不存在 内存(重启即丢)
/var/log/journal 存在 持久化

开启持久化

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

四、journalctl 常用查询(运维必会)

1️⃣ 基本查看

journalctl
journalctl -xe
journalctl -f

2️⃣ 按时间

journalctl --since "2025-01-01 10:00"
journalctl --since yesterday
journalctl --until "1 hour ago"

3️⃣ 按服务(最常用)

journalctl -u sshd
journalctl -u NetworkManager --since today

4️⃣ 按优先级

journalctl -p err
journalctl -p warning..crit

5️⃣ 按启动周期(非常重要)

journalctl --list-boots
journalctl -b
journalctl -b -1

6️⃣ 实时跟踪

journalctl -u docker -f

五、journal 的“结构化字段”(核心价值)

1️⃣ 常见字段

字段 含义
_PID 进程 ID
_UID 用户
_COMM 进程名
_SYSTEMD_UNIT systemd unit
_BOOT_ID 启动 ID
_HOSTNAME 主机名

2️⃣ 查询示例

journalctl _PID=1234
journalctl _UID=0
journalctl _SYSTEMD_UNIT=sshd.service

3️⃣ 查看字段列表

journalctl -o verbose | head

六、journalctl 输出格式(常被忽略)

journalctl -o short
journalctl -o short-iso
journalctl -o json
journalctl -o json-pretty
journalctl -o cat

📌 JSON 对接日志平台必用

七、journal 日志级别(RFC5424)

级别 数值
emerg 0
alert 1
crit 2
err 3
warning 4
notice 5
info 6
debug 7

八、journal 存储与清理(生产必配)

1️⃣ 查看占用

journalctl --disk-usage

2️⃣ 手动清理

journalctl --vacuum-size=500M   # 500M
journalctl --vacuum-time=7d     # 7 天
journalctl --vacuum-time=1w     # 1 周

3️⃣ 自动策略配置

/etc/systemd/journald.conf

推荐配置:

Storage=persistent
SystemMaxUse=1G
SystemKeepFree=500M
MaxRetentionSec=7day
Compress=yes

九、journal + rsyslog 协作关系

journal -> rsyslog

  • rsyslog 从 journal 读取
  • 写入 /var/log/messages
module(load="imjournal")

📌 journal 是源,rsyslog 是分发

十、journal 在排障中的核心用法

1️⃣ 启动失败排查

journalctl -b -p err

2️⃣ 某服务起不来

journalctl -u nginx -xe

3️⃣ 系统卡在 boot

journalctl -b -1

4️⃣ kernel panic / OOM

journalctl -k
journalctl -k -p crit

十一、journal 的优缺点(客观)

优点

  • 强结构化
  • 快速定位
  • 支持索引
  • 原生 systemd

缺点

  • 二进制不直观
  • 损坏难修复
  • 必须用 journalctl

十二、生产最佳实践(强烈建议)

  1. 开启持久化
  2. 限制磁盘使用
  3. 重要日志转发到集中日志
  4. 禁止无限 debug
  5. 配合 rsyslog / ELK

十三、总结

journal 是 systemd 时代的“日志数据库”。

journalctl 是运维的“日志查询引擎”。