journalctl 是 systemd 的日志查询工具,支持按服务、时间、优先级等字段过滤;journald 自身实现配额驱动的日志轮转,无需 logrotate,并需手动启用持久化存储。

Linux系统中,journalctl 是 systemd 日志子系统的命令行接口,用于查看、过滤和管理由 journald 服务收集的结构化日志。它比传统 syslog 更灵活,支持时间戳、服务名、优先级、进程ID等元数据查询。而日志轮转(log rotation)在 journald 中并非通过 logrotate 工具实现,而是由 journald 自身的配置机制控制——这是很多用户容易混淆的关键点。
journalctl 基础用法与高效过滤技巧
journalctl 默认输出全部日志(从上次启动开始),但实际运维中需精准定位问题:
- 按服务查日志:`journalctl -u sshd.service` 查 SSH 服务;可加 `-f` 实时跟踪,`-n 50` 只看最近50行
- 按时间范围筛选:`journalctl --since "2024-05-20 14:00:00"` 或 `--since "2 hours ago"`
- 按优先级过滤:`journalctl -p err`(只看错误)、`-p warning..err`(警告到错误之间)
- 按进程或用户查:`journalctl _PID=1234` 或 `_UID=1001`(下划线开头表示匹配字段)
- 导出为 JSON 格式:`journalctl -o json -u nginx.service > nginx.log.json`,便于脚本解析
journald 的日志存储路径与持久化配置
默认情况下,journald 日志是 易失性 的,存于 /run/log/journal/(内存文件系统,重启即丢)。要永久保存,必须启用持久化:
- 创建目录:
sudo mkdir -p /var/log/journal - 触发配置重载:
sudo systemd-tmpfiles --create --prefix /var/log/journal - 确认生效:
ls /var/log/journal/*/system.journal应有文件生成 - 验证是否启用:
journalctl --disk-usage显示已用磁盘空间,非零即表示持久化开启
注意:修改 /etc/systemd/journald.conf 后需运行 sudo systemctl restart systemd-journald 才会生效。
journald 内置轮转机制:不是 logrotate,而是配额驱动
journald 不依赖外部工具做轮转,而是通过 空间配额 + 时间保留 + 文件数量限制 自动清理旧日志:
标签: linux js json go nginx 工具 linux系统 持久化存储
还木有评论哦,快来抢沙发吧~