journal
journal 是 systemd 的日志系统,全名:systemd-journald
它替代(或配合)传统的 /var/log/*.log 文本日志。
journal = 结构化、索引化、统一入口的系统日志数据库
| 对比项 | journal | /var/log |
|---|---|---|
| 存储格式 | 二进制 | 纯文本 |
| 查询 | 索引、字段过滤 | grep |
| 元数据 | 丰富(PID/UID/UNIT) | 少 |
| 顺序 | 强一致 | 可能乱序 |
| 性能 | 高 | IO 密集 |
| 远程 | 需转发 | 原生支持 |
📌 RHEL 9 默认:journal + rsyslog 并存
journal 收集:
- 内核日志(dmesg)
- systemd 服务 stdout/stderr
- syslog
- audit
- 内核 ring buffer
统一写入:
/run/log/journal/ # 临时(内存)
/var/log/journal/ # 持久化
查看当前模式
journalctl --disk-usage
默认行为
| 情况 | 存储位置 |
|---|---|
| /var/log/journal 不存在 | 内存(重启即丢) |
| /var/log/journal 存在 | 持久化 |
开启持久化
mkdir -p /var/log/journal
systemctl restart systemd-journald
journalctl
journalctl -xe
journalctl -f
journalctl --since "2025-01-01 10:00"
journalctl --since yesterday
journalctl --until "1 hour ago"
journalctl -u sshd
journalctl -u NetworkManager --since today
journalctl -p err
journalctl -p warning..crit
journalctl --list-boots
journalctl -b
journalctl -b -1
journalctl -u docker -f
| 字段 | 含义 |
|---|---|
| _PID | 进程 ID |
| _UID | 用户 |
| _COMM | 进程名 |
| _SYSTEMD_UNIT | systemd unit |
| _BOOT_ID | 启动 ID |
| _HOSTNAME | 主机名 |
journalctl _PID=1234
journalctl _UID=0
journalctl _SYSTEMD_UNIT=sshd.service
journalctl -o verbose | head
journalctl -o short
journalctl -o short-iso
journalctl -o json
journalctl -o json-pretty
journalctl -o cat
📌 JSON 对接日志平台必用
| 级别 | 数值 |
|---|---|
| emerg | 0 |
| alert | 1 |
| crit | 2 |
| err | 3 |
| warning | 4 |
| notice | 5 |
| info | 6 |
| debug | 7 |
journalctl --disk-usage
journalctl --vacuum-size=500M # 500M
journalctl --vacuum-time=7d # 7 天
journalctl --vacuum-time=1w # 1 周
/etc/systemd/journald.conf
推荐配置:
Storage=persistent
SystemMaxUse=1G
SystemKeepFree=500M
MaxRetentionSec=7day
Compress=yes
journal -> rsyslog
- rsyslog 从 journal 读取
- 写入 /var/log/messages
module(load="imjournal")
📌 journal 是源,rsyslog 是分发
journalctl -b -p err
journalctl -u nginx -xe
journalctl -b -1
journalctl -k
journalctl -k -p crit
优点
- 强结构化
- 快速定位
- 支持索引
- 原生 systemd
缺点
- 二进制不直观
- 损坏难修复
- 必须用 journalctl
- 开启持久化
- 限制磁盘使用
- 重要日志转发到集中日志
- 禁止无限 debug
- 配合 rsyslog / ELK
journal 是 systemd 时代的“日志数据库”。
journalctl 是运维的“日志查询引擎”。