journald 日志的导出与离线分析
journald 把日志以二进制形式写入 /var/log/journal,若未启用持久化则只存在于 /run/log/journal,重启即丢失。这类文件用文本工具看不到内容,需要通过 journalctl 读取。导出为 export 格式可以保留完整字段,并能在分析机上用 journalctl --file 继续检索;导出为 json 适合脚本处理与字段提取。主机即将关机、需要跨机分析或需要长期归档时,先把目标时间段导出成文件是常规做法。
基本信息
| 日志目录 | /var/log/journal(持久)或 /run/log/journal(易失) |
|---|---|
| 读取命令 | journalctl,支持 --since / --until / -u 过滤 |
| 导出格式 | -o export 保留字段,-o json 便于脚本处理 |
| 离线分析 | journalctl --file <导出文件> 继续检索 |
典型使用场景
- 主机即将关机或重建,需要先把日志带出
- 分析机与目标主机环境不同,无法直接读取原始 journal 目录
- 需要按时间段抽取日志做时间线,避免整机日志过于庞大
- 把日志交给脚本做字段统计,例如按进程或来源聚合
- 为报告留存可复算的证据副本,而不是截图
导出与离线检索
导出与离线检索
ls -l /var/log/journal/ 2>/dev/null | head # 确认是否启用持久化
journalctl --since '2026-01-01' --until '2026-01-02' -o export > /mnt/ev/journal.export
journalctl -u ssh -o json --since today > /mnt/ev/ssh.json # 单服务导出,便于脚本处理
journalctl -o short-iso --since '-2h' | tail -20 # 人读格式,现场快速查看
journalctl --file /mnt/ev/journal.export --since '-1h' | tail -20 # 在分析机上继续检索
sha256sum /mnt/ev/journal.export > /mnt/ev/journal.export.sha256 # 导出即记录哈希输出格式读法
| 格式 | 内容特点 | 适用场景 |
|---|---|---|
| short-iso | 带 ISO 时间戳的单行文本 | 现场快速浏览与人工阅读 |
| export | 保留完整字段的二进制文本流 | 跨机分析、作为证据归档 |
| json | 每条一行 JSON | 脚本提取字段与统计 |
| verbose | 打印全部字段与优先级 | 定位字段含义与来源 |
export 与 json 格式的体积通常明显大于纯文本,导出前先确认目标分区空间,日志量大的主机建议按时间段分批导出并逐批记录哈希。
未启用持久化的系统只在内存环形缓冲中保留日志,容量有限且重启即失,遇到这类主机应优先导出再考虑其他分析工作。
导出动作不会修改日志内容,但会更新文件访问时间;在严格保全要求下,应先对原始目录做镜像或只读挂载,再在副本上执行导出。