エレクトロニクス

Linuxでjournalctlを使ったログ解析の基礎

背景

Linuxシステムでは、サービスやアプリケーションのイベントが systemd のジャーナルに記録されます。従来は /var/log 下のテキストファイルを tail したり grep する方法が一般的でしたが、systemd 環境では journalctl コマンドを使うことで、時系列に整備されたログを効率的に閲覧・検索できます。本記事では、journalctl を用いた基本的なログ解析とフィルタリング手法を紹介します。

手順

1. **journalctl の基本的な使い方を覚える**
単に `journalctl` を実行すると、ジャーナル内のログが古い順に全て表示されます。大量の出力になるので、通常は `-n` オプションで直近の行数を制限したり、`-r` オプションで最新順に並べ替えて閲覧します。例えば `journalctl -n 100 -r` で最新100行を逆順に表示できます。

2. **サービス単位でログを絞り込む**
特定のサービスのログのみを確認したい場合は、`-u` オプションでユニット名を指定します。例えば nginx サービスのログを追跡するには `journalctl -u nginx.service -f` を実行し、リアルタイムでログを追跡します。複数ユニットをカンマ区切りで指定することもできます。

3. **期間やブート回数でフィルタリングする**
`--since` や `--until` オプションを使うと、日時範囲を指定してログを表示できます。例えば `journalctl --since "2025-10-20 00:00:00" --until "2025-10-20 23:59:59"` のように日付範囲を絞ることができます。また、`-b` オプションに数値を渡すと前回や任意のブート回のログを参照できます。`journalctl -b -1` は前回の起動時のログを表示します。

4. **フィールドベースのフィルタリング**
ジャーナルには、メッセージごとに識別子やプロセス ID などのメタデータが付与されています。これらをキー=値形式で指定すると、より細かい検索ができます。例えば特定のプロセスIDのログを確認するには `journalctl _PID=1234`、カーネルメッセージのみを表示するには `journalctl _TRANSPORT=kmsg` と指定します。

5. **永続化とログサイズの管理**
デフォルトではジャーナルは /run/log/journal に保存され、再起動すると失われます。永続的に保持したい場合は `/var/log/journal` ディレクトリを作成して systemd-journald を再起動します。また、`SystemMaxUse` や `SystemKeepFree` など journald.conf の設定でログサイズを制御できます。ログローテーションは不要ですが、ディスク容量を管理するために設定を確認しておきましょう。

まとめ

journalctl を利用することで、Linux のシステムログを柔軟に検索・解析できます。サービス単位や期間、各種フィールドで絞り込む方法を覚えると、問題発生時の原因特定が迅速になります。また、永続化やログ容量の調整を行うことで運用上の安心感も高まります。まずは日常的に journalctl コマンドでサービスの状態を確認し、ログの構造に慣れていくことが重要です。

  • この記事を書いた人

たけぞう

熊谷に住みながら都内のIT企業でエンジニアをしています。ガジェットやアウトドア用品についてレビューをしていきます。 趣味はスポーツジムでトレーニングやジョギングをすることです。

-エレクトロニクス