MENU

journaldとは~Linuxのログ管理システムについて解説~

目次

はじめに

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デーモンについて紹介しました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

20代の組み込みソフトウェアエンジニア
主な使用言語はC++

---------------------資格---------------------
応用情報技術者
ネットワークスペシャリスト

目次