journald 的默认行为
systemd-journald 负责收集内核、服务与标准输出日志,在很多发行版上默认使用易失存储:日志放在内存中,重启后就没了。这在家用或调试场景够用,但用于审计与留存时不满足要求。生产环境需要开启持久化、设置容量上限,并把关键日志转发到集中平台做长期留存与关联分析。
基本信息
| 适用平台 | 使用 systemd 的 Linux 发行版(RHEL、Debian、Ubuntu 等) |
|---|---|
| 配置文件 | /etc/systemd/journald.conf |
| 默认行为 | 易失存储,重启后历史日志丢失 |
| 关键参数 | Storage、SystemMaxUse、ForwardToSyslog |
| 查询工具 | journalctl,支持按服务、优先级与时间过滤 |
典型使用场景
- 等保留存整改:把系统日志持久化并保留足够时长
- 故障排查:按服务与时间窗口快速定位启动或崩溃日志
- 审计取证:导出结构化日志作为事件时间线证据
- 容量治理:限制日志占用,避免写满根分区
- 集中汇聚:转发到 rsyslog 或日志平台统一留存
持久化配置(/etc/systemd/journald.conf)
持久化配置(/etc/systemd/journald.conf)
Storage=persistent # 持久化到 /var/log/journal
SystemMaxUse=2G # 限制系统日志占用上限
RuntimeMaxUse=256M # 限制内存中日志占用
MaxRetentionSec=180day # 最长保留时间(按需设置)
ForwardToSyslog=yes # 同时转发给 rsyslog 统一归档查询与维护
查询与维护
journalctl -u sshd --since "1 hour ago" # 按服务与时间过滤
journalctl -p err --since today # 只看错误级别
journalctl _PID=1234 -o json-pretty | head # 结构化输出,便于解析
journalctl --disk-usage # 查看当前占用
journalctl --vacuum-size=500M # 按大小清理旧日志
systemctl restart systemd-journald # 改配置后重载参数速查
| 参数 | 作用 | 建议 |
|---|---|---|
| Storage | 存储方式 | 生产设为 persistent |
| SystemMaxUse | 磁盘日志上限 | 按磁盘容量设置 |
| MaxRetentionSec | 最长保留时间 | 与留存要求对齐 |
| ForwardToSyslog | 是否转发 syslog | 需要集中归档时开启 |
运维要点
- 开启持久化:确认 /var/log/journal 目录存在并有足够空间
- 设置容量上限:同时限制内存与磁盘占用,避免影响业务分区
- 权限收紧:日志目录只允许管理员与指定组访问
- 转发归档:关键日志转发到集中平台,本地只做过渡缓存
- 定期核对:检查日志时间范围是否覆盖留存要求,发现断档及时排查
journald 与 rsyslog 同时采集同一批日志时会出现重复条目,建议明确分工:一端作为主存储,另一端只做转发,并在查询侧做去重。