時間枠と -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)、悪意のある systemd サービス (T1543.002)、sudo の濫用 (T1548.003) があります。
始める前に
権限。 いかなるシステムログでも同じルールが適用されます: ルート、または上記のグループ。詳細は、[Linux ログ権限ガイド] にあります。
ジャーナルは再起動後も残りますか? /var/log/journal が存在しない場合、ログは /run/log/journal にメモリ上に存在し、再起動すると消えます。journalctl –list-boots は実際に何回起動したかを示します。それが現在のものだけを示している場合、過去の履歴はありません。
どれだけありますか? journalctl –disk-usage は、すべてをファイルにダンプする前にそれを教えてくれます。デフォルトでは、永続的なジャーナルはファイルシステムの10%まで成長し、最大 4GB に制限されます。それは一度にアップロードしたくない量です。
タイムゾーン。 ジャーナルはタイムスタンプを UTC で保存しますが、journalctl は –utc を追加しない限りローカル時間を表示します。JSON 出力は生の UTC マイクロ秒タイムスタンプ (__REALTIME_TIMESTAMP) をいずれにしても持っています。
ステップ1:絞り込む
あなたの質問に合ったフィルターを選びます。それらは組み合わせ可能です。
| フィルター | 何をするか |
|---|---|
| –since / –until | 時間枠; “2026-10-19 14:00″、昨日、または “2時間前” を受け入れる |
| -b, -b -1 | 現在のブート、前のブート |
| -u nginx -u ssh | 1つ以上の 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 スタイルのテキスト。小さく、人間の目でも読みやすい。[PROOF: LogTotal が short-iso を解析できることを確認]
-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 ファイルをドロップします。[PROOF: アップロード画面, サイズ制限]
- サニタイズ。 [PROOF: what gets masked in journal JSON: hostnames, usernames, IPs, machine and boot IDs]. Look it over before you continue.
- レビュー。 [PROOF: what the results screen shows]
実データでどのように見えるか。 [PROOF: サンプルソース、例えばcronジョブを追加した後の捨てる用テストVM、新しいユーザー及び疑わしいsystemdサービス] から 1 日分のジャーナルをエクスポートしました。LogTotalは[PROOF: 実際の発見]をフラグ付けしました。[PROOF: サンプルファイルへのリンク]
問題が発生したとき
| 症状 | 可能性のある原因 | Fix |
|---|---|---|
| 他のユーザーのメッセージが見えないヒント | root ではなく、ジャーナルグループに属していない | sudo、またはアカウントを systemd-journal に追加する |
| — エントリなし — | 時間枠またはユニット名が一致しない; ローカル vs. UTC の混乱 | ウィンドウを広げる; –utc を試す; systemctl list-units を確認する |
| 現在のブートのみ存在する | 揮発性ジャーナル | 古いログはなくなっています; ログフォワーダまたはSIEMを確認 |
| 出力がバイナリまたは乱雑に見える | -o export が使用された | -o json を使用する |
| ファイルがギガバイト単位 | フィルタなし | ユニット、優先度、–output-fields を追加 |
FAQ
JSON またはテキスト?
分析には JSON を使用します。これは PID、ユニット、ブートID、正確なタイムスタンプを個別のフィールドとして保持するためです。サイズが問題の場合や人間が読む場合はテキストを使用します。
ジャーナルは /var/log/syslog と同じですか?
いいえ。rsyslog がインストールされている場合、ジャーナルからテキストファイルにメッセージをコピーするため、両方あるかもしれません。そうでない場合は、ジャーナルだけです。