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

Linux系统中,journalctl 是 systemd 日志子系统的命令行接口,用于查看、过滤和管理由 journald 服务收集的结构化日志。它比传统 syslog 更灵活,支持时间戳、服务名、优先级、进程ID等元数据查询。而日志轮转(log rotation)在 journald 中并非通过 logrotate 工具实现,而是由 journald 自身的配置机制控制——这是很多用户容易混淆的关键点。
journalctl 默认输出全部日志(从上次启动开始),但实际运维中需精准定位问题:
默认情况下,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 不依赖外部工具做轮转,而是通过 空间配额 + 时间保留 + 文件数量限制 自动清理旧日志:
SystemMaxUse=1G(系统日志总上限),SystemKeepFree=500M(至少保留空闲空间)MaxRetentionSec=1month 表示最多保留一个月内的日志(即使空间充足)SystemMaxFileSize=100M 控制单个 journal 文件最大体积systemd-journald-dev-log.socket 相关)都会检查并执行清理手动清理可执行:journalctl --vacuum-size=200M(保留最新200MB)或 --vacuum-time=3d(删3天前日志)。
部分环境仍需将 journald 日志同步到 /var/log/messages 等传统位置,可通过以下方式桥接:
ForwardToSyslog=yes(在 /etc/systemd/journald.conf 中),journald 会将日志转发给 rsyslog/syslog-ngimjournal 模块,实现双向兼容journalctl -o json --all --no-pager > archive_$(date +%F).json 导出,并压缩存离线存储jq 过滤字段,如 journalctl -o json | jq 'del(.MESSAGE, ._CMDLINE)'
基本上就这些。掌握 journalctl 的字段过滤和 journald 的配额式轮转逻辑,比死记命令更重要。配置不复杂,但容易忽略持久化和空间阈值设置,导致排查时“日志不见了”。
以上就是Linux如何抓取日志信息_journalctl与日志轮转机制深入详解【指导】的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号