journalctlを使用してLinuxでログを表示および分析する方法

ログメッセージは、正常なLinuxシステムを監査および維持するために重要です。すべてのLinuxコンピューターは、さまざまなサービスまたはジョブのログメッセージを保存します。このガイドでは、 journaldによって書き込まれたログメッセージを読み取るためのコマンドラインツールであるjournalctlを使用して、ログメッセージを読み取って分析する方法について説明します。

ジャーナルとは何ですか?

Journaldは、ログメッセージをジャーナルに集約するシステムロギングサービスです。これは、Linuxでのイベントロギングを担当するsystemdデーモンの一部です。ジャーナルは、journaldによって生成されたログメッセージを格納するために使用される単なるバイナリファイルです。

ジャーナルログメッセージは、揮発性のストレージ形式であるRAMに保存されるため、永続的ではありません。デフォルトでは、PCが再起動するか電源が切れると、ジャーナルログは失われるか消去されます。 Linuxは、システムのメモリを詰まらせないように、ジャーナルログに一定量のRAMを割り当てます。

journalctlコマンドの使用方法

journalctlを使用して、systemdジャーナルまたはjournaldログを照会できます。システムは、ジャーナルからログメッセージを読み取る際の効率を向上させるために、すべてのジャーナルログにインデックスを付けます。

:このガイドでは、 sudoを使用して、昇格された特権を使用してコマンドを実行します。これは、journalctlコマンドを通常のLinuxユーザーとして実行すると、すべてのログメッセージが一覧表示されないためです。

すべてのログメッセージを表示

すべてのジャーナルログを表示するには、引数なしでjournalctlコマンドを実行するだけです。

 sudo journalctl

journalctlコマンドは、システム上のすべてのジャーナルログを時系列で一覧表示します。このコマンドはバックグラウンドでlessを使用するため、lessコマンドで通常使用するのと同じナビゲーション機能が得られます。たとえば、キーボードのFキーとBキーを使用してログをナビゲートできます。

システムがログを出力する順序を変更する場合、つまり最新のログを最初に表示する場合は、コマンドで-rフラグを使用できます。 -rフラグはReverseを表します。

 sudo journalctl -r

カーネルジャーナルログの表示

Linuxでは、起動時からシステムに関連する情報が含まれているため、カーネルログは非常に重要です。カーネルログのみを表示するには、journalctlコマンドで-kフラグを指定します。

 sudo journalctl -k

出力には、カーネルのバージョンや名前など、いくつかのカーネル情報も一覧表示されます。

関連: Linuxのカーネルとは何ですか?バージョンをどのように確認しますか?

特定のプログラムでジャーナルログをフィルタリングする

journalctlを使用して、特定のプログラムまたはサービスに関連するログを表示することもできます。たとえば、 cronサービスに関連付けられているログを表示するには、次のコマンドを実行します。

 sudo journalctl -u cron

ログメッセージをリアルタイムで表示

ログが記録されているときに、ログをリアルタイムで表示したい場合があります。そのためには、次のコマンドを発行します。

 sudo journalctl -f

Ctrl + Cキーボードショートカットを使用して、リアルタイムビューを終了します。

日付でログメッセージを取得する

journalctlを使用すると、タイムスタンプを使用してログをフィルタリングおよび分析できます。たとえば、昨日から現在までのログを表示するには、次のようにします。

 sudo journalctl --since=yesterday

次のように、詳細な「since」および「until」タイムスタンプを使用して、より具体的にすることができます。

 sudo journalctl --since="2021-07-17 12:00:00" --until="2021-07-17 15:00:00"

Journalctlは、指定された期間のログメッセージのみを表示します。

UIDまたはPIDによるログメッセージの表示

ユーザーID(UID)またはプロセスID(PID)を使用してジャーナルログをフィルターに掛けることもできます。基本的な構文は次のとおりです。

 sudo journalctl _UID=0

…ここで、0はrootアカウントのUIDです。前述のコマンドのUIDをPIDまたはGID(グループID)に置き換えることもできます。

journalctl出力のフォーマット

特定の出力形式を使用してjournalctlログを表示するには、 journalctl-oコマンドに続けて希望の形式を使用する必要があります。たとえば、ログをきれいなJSON形式で表示するには、次のコマンドを実行します。

 sudo journalctl -o json-pretty

出力:

関連: Linuxでのシステムロギング入門

Linuxでのジャーナルの構成

このガイドでは、journalctlコマンドを使用してLinuxでジャーナルログメッセージを表示および分析する方法を説明しました。 / var / log / journalディレクトリには、すべてのジャーナルログが格納されます。すべてのLinuxディストリビューションがデフォルトでジャーナルを有効にしているわけではないことに注意してください。

/etc/systemd/journald.confファイルを使用して、PCのジャーナル構成を構成または変更できます。効果的なロギングサービスとは別に、Linuxサーバーのセキュリティを真剣に考えている場合に必須のツールがいくつかあります。