はじめに
Linuxシステムは、OSの核となるカーネルを中心に、システムライブラリ、システムユーティリティ、ユーザー空間、サービスやデーモンといった複数の層から構成されています。
この記事では、その中でもデーモンの一つであるjournaldについて解説します。
journaldとは
journaldは、Linuxで使用されるシステムおよびサービスマネージャーであるsystemdの一部です。具体的には、システムログとサービスログを収集、保存、管理するためのデーモン(バックグラウンドプロセス)です。
システムログとサービスログは、Linuxシステムにおけるイベントや操作の記録です。
システムログ
システムログは、システム全体の動作や状態に関する情報を記録します。具体的には、カーネルメッセージ、ハードウェアエラー、セキュリティイベント、システムの起動やシャットダウンに関するメッセージなどが該当します。
サービスログ
サービスログは、特定のサービスやデーモンの動作に関する情報を記録します。具体的には、Webサーバ、データベースサーバ、メールサーバ、システムデーモンなどのログが該当します。
systemdを使用する現代のLinuxディストリビューションでは、journaldデーモンがシステムログとサービスログを一元的に管理します。これにより、ログの収集、保存、表示が統一された方法で行えます。
journaldのソースコード
Linuxはオープンソースプロジェクトなので、journaldのソースコードも公開されています。興味があれば以下のリンクからソースコードを確認できます。
systemd/src/journal at main · systemd/systemd · GitHub
journaldのソースコードを取得する場合は以下のコマンドでGitHubからクローンしてください。
git clone https://github.com/systemd/systemd.git
journaldだけでもかなり量がありますが、主要な機能はざっくり以下のファイルに実装されていそうです。
- journald.c: journaldのメインの実装ファイル。
- journalctl.c: journalctlコマンドの実装ファイル。
- journal-file.c: ジャーナルファイルの操作に関連する機能の実装ファイル。
- journald-server.c: journaldサーバの実装に関する機能のファイル。
- journald-syslog.c: journaldのSyslogインターフェースに関連する機能のファイル。
journaldのログ表示例
journaldのログをコンソール上で確認するには、journalctl
コマンドを使用します。コマンドの使い方を以下にまとめます。
すべてのログを表示
journalctl
最新のログを表示
journalctl -e
リアルタイムでログを表示
journalctl -f
現在のブートからのログを表示
journalctl -b
前回のブートからのログを表示
journalctl -b -1
特定のブートからのログを表示
journalctl -b -<ブートID>
特定の日付以降のログを表示
journalctl --since "YYYY-MM-DD HH:MM:SS"
特定の日付以前のログを表示
journalctl --until "YYYY-MM-DD HH:MM:SS"
特定の期間内のログを表示
journalctl --since "YYYY-MM-DD HH:MM:SS" --until "YYYY-MM-DD HH:MM:SS"
特定のサービスのログを表示
journalctl -u <service_name>
特定のプロセスIDのログを表示
journalctl _PID=<pid>
特定のユニットのログを表示
journalctl _SYSTEMD_UNIT=<unit_name>
特定のメッセージIDのログを表示
journalctl MESSAGE_ID=<message_id>
特定のログレベル(エラーレベル)でフィルタリング
journalctl -p <priority_level>
ログレベルの例:
emerg
alert
crit
err
warning
notice
info
debug
ログサイズの制限を設定
sudo journalctl --vacuum-size=1G
特定の日付以前のログを削除
sudo journalctl --vacuum-time=10d
ログの出力形式を指定
json形式を指定する例
journalctl -o json
ログをファイルに保存
journalctl > /path/to/file
さいごに
今回はLinuxのログ管理を行っているjournaldデーモンについて紹介しました。