如何使用 journalctl 导出 systemd 日志

如何使用 journalctl 导出 systemd 日志

SOC Prime Team
SOC Prime Team linkedin icon 关注

使用时间范围和 -o json 运行 journalctl,每行获得一个 JSON 对象,其中包含日志中存储的每个字段:

sudo journalctl --since "2026-10-19 00:00" --until "2026-10-20 00:00" -o json --no-pager > web-03_journal.jsonl

对于一种类syslog的文本文件,使用 -o short-iso。没有 sudo 或系统日志组成员资格(如 systemd-journal、adm 或 wheel),您只能看到自己的用户日志,而不是系统日志。

在大多数现代发行版中,日志是所有信息首先集中之处:服务、内核、sudo、cron、登录。在 Debian 12 及之后版本、Fedora 和 Arch 中,它通常是 唯一的 地方,因为rsyslog没有安装。Prime Core 拥有所述 Linux 系统日志的 {N} 个检测规则,与 {M} 个 MITRE ATT&CK 技术相映射,其中包括 cron 持久性 (T1053.003)、恶意系统d服务 (T1543.002) 及 sudo 滥用 (T1548.003)。

免费开始

在您开始之前

权限。 与任何系统日志相同的规则:root 或上面的组。我们的[Linux 日志权限指南]提供详细信息。

日志能在重启后保留吗? 如果 /var/log/journal 不存在,日志将存储在 /run/log/journal 下的内存中,重启后消失。 journalctl –list-boots 显示您实际上有多少次启动。如果只列出当前启动,则旧历史已消失。

有多少? journalctl –disk-usage 告诉你在你把所有东西导入文件之前。默认情况下,持久日志最多可以增长到其文件系统的10%,上限为4 GB。这远远超过了你想一次性上传的量。

时区。 日志存储时间戳为 UTC,但 journalctl 打印本地时间,除非您添加 –utc。无论如何,JSON 输出都携带原始 UTC 微秒时间戳 (__REALTIME_TIMESTAMP)。

步骤1:缩小范围

选择与你的问题匹配的过滤器。它们可以组合:

过滤器它的作用
–since / –until时间窗口;接受”2026-10-19 14:00″、昨天或”2小时前”
-b, -b -1当前启动,上次启动
-u nginx -u ssh一个或多个 systemd 单元
-p warning此优先级及更严重的消息
-k仅内核消息
_COMM=sudo, _UID=0精确匹配任何日志字段

步骤2:选择输出格式

  • -o json:每行一个 JSON 对象,包含每个字段。这是 LogTotal 的默认选择,因为没有任何信息丢失。
  • -o json –output-fields=MESSAGE,_HOSTNAME,_COMM,_PID,SYSLOG_IDENTIFIER,PRIORITY:相同,但被精简。少数字段,如时间戳和引导 ID,总是包含。这极大地减少了文件大小。
  • -o short-iso:带有完整 ISO 时间戳的 syslog 风格文本。较小且易于人工阅读。

不要使用 -o export。虽然它的名字如此,但它是用于在 systemd 机器之间传输日志的序列化格式,而不是用于分析。

我们建议您进行典型的范围导出:

sudo journalctl -b -1 -p info -u ssh -u cron 

  -o json --no-pager > web-03_prevboot.jsonl

步骤3(可选):从其他机器读取日志文件

在事件处理中,您通常有一个磁盘映像或一个已复制的 /var/log/journal 文件夹,而不是一个实时系统。journalctl 可以直接读取这些文件:

journalctl -D /mnt/evidence/var/log/journal -o json --no-pager > evidence_journal.jsonl

使用 –file 指向单个 .journal 文件。从崩溃或未彻底关闭的系统中导出的日志可能会打印损坏警告。但大多数条目通常仍会输出。

在 LogTotal 中上传、清理和审核

  1. 上传。 打开 logtotal.com 并将 .jsonl 文件拖入。
  2. 清理。
  3. 审核。

当出错时

症状可能原因Fix
提示没有看到其他用户的消息不是 root,并且不在日志组中使用 sudo,或将帐户添加到 systemd-journal
— 没有条目 —时间窗口或单元名称不匹配;本地与 UTC 混淆扩大窗口;尝试 –utc;检查 systemctl list-units
只有当前启动存在易失性日志旧日志不见了;检查您的日志转发器或 SIEM
输出看起来像二进制或乱码使用了 -o export使用 -o json
文件是数千兆字节没有过滤器添加单元,优先级,–output-fields

FAQ

JSON 或文本?

分析用 JSON,因为它保持 PID、单元、启动 ID 和精确时间戳为单独字段。在人类阅读时或者大小重要时使用文本。

日志与 /var/log/syslog 相同吗?

不。当 rsyslog 已安装时,它从日志中复制消息到文本文件,因此您可能同时拥有两者。当未安装时,只有日志。

加入 SOC Prime 的 Detection as Code 平台 以提高对与您的业务最相关的威胁的可见性。为了帮助您开始并带来即时价值,现在与 SOC Prime 专家预约会议。