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)、悪意のある 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 ssh1つ以上の 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 でアップロード、サニタイズ、レビュー

  1. アップロード。 開く logtotal.com そして .jsonl ファイルをドロップします。[PROOF: アップロード画面, サイズ制限]
  2. サニタイズ。 [PROOF: what gets masked in journal JSON: hostnames, usernames, IPs, machine and boot IDs]. Look it over before you continue.
  3. レビュー。 [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 がインストールされている場合、ジャーナルからテキストファイルにメッセージをコピーするため、両方あるかもしれません。そうでない場合は、ジャーナルだけです。

SOC PrimeのDetection as Codeプラットフォームに参加し ビジネスに最も関連性のある脅威に対する可視性を向上させましょう。開始して即座に価値をもたらすためには、今すぐSOC Primeの専門家とのミーティングを予約してください。