使用时间范围和 -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 中上传、清理和审核
- 上传。 打开 logtotal.com 并将 .jsonl 文件拖入。
- 清理。
- 审核。
当出错时
| 症状 | 可能原因 | 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 已安装时,它从日志中复制消息到文本文件,因此您可能同时拥有两者。当未安装时,只有日志。