Linuxシステムログを読み取るためのjournalctlの使用法

長年にわたり、システムおよびカーネルログはsyslogdというユーティリティによって扱われてきました。ほとんどのLinuxベースのオペレーティングシステムはsystemdに移行しており、これにはjournaldという別のログデーモンが付属しています。これらのログとやり取りするには、journalctlユーティリティを使用します。

システムログを読み取るためのユーザー権限を与える

「adm」または「systemd-journal」グループに属しているユーザーのみがsystemdログを読み取ることができます。Ubuntuなどのディストリビューションでは、既にユーザーをadmグループに追加しています。

ターミナルエミュレーターを開き、次のコマンドを入力します:

groups

journalctl-groups

出力に「adm」または「systemd-journal」が表示されていれば、このセクションの残りの手順をスキップできます。それ以外の場合は、自分を「adm」グループに追加してください。

sudo adduser $USER adm

この変更が有効になるには、ログインセッションを再起動する必要があります(ログアウトして再ログイン)。様々な理由でそれができない場合は、このコマンドを使用して、グラフィカルセッションを再起動せずに新しいグループにログインします。

newgrp adm

ターミナルウィンドウを閉じないでください。これで、あなたはadmグループの一員になりました - ターミナルセッション内ではそうですが、グラフィカルセッション内ではそうではありません。現在の時点で新しいターミナルを開くと、あなたのユーザーはもはやadmグループにログインしていません。

ジャーナルが永続的かどうかを確認する

systemdログは永続的であったり、揮発性であったりします。Ubuntuや他のディストロでは、デフォルトで永続的です。Debian 9では揮発性であり、メモリ内(ディスクではない)にのみ保持され、シャットダウンや再起動時に消えます。次のコマンドを入力してください。

journalctl --list-boots

journalctl-list-boots

ここに複数のエントリがあれば、他に何もする必要はありません。これはログがディスクに保存されている(永続的)ことを意味します。一つのエントリしか表示されない場合、ジャーナルは揮発性です。これを永続的に変更します。

sudo sed -i '/Storage/ c\Storage=persistent' /etc/systemd/journald.conf

どのブートエントリのジャーナルを表示するかを選択する

通常、現在のブートのログを見たいと思うでしょう。稀に、何かがうまくいかなかった前のブートのログを見たいと思うことがあります。例えば、システムクラッシュの後などです。

現在のブートのログを表示するには:

journalctl -b0

journalctl-view-current-boot

前のブートのログを見るには、「0」の代わりに「-1」を使い、二つ前のブートには「-2」としていくつも使用します。

journalctl -b-1

システムジャーナルをナビゲートし、検索する

journalctlでログを開いた後、矢印キーとPAGE UPまたはPAGE DOWNキーでテキストをナビゲートできます。他にも便利なキーがあります:

  • 出力の末尾に移動します。

  • < 出力の始まりに移動します。
  • / テキストの文字列を検索します。スラッシュキーを押した後、見つけたい文字列を入力してEnterを押します。文字列は大文字と小文字を区別するため、「network」は「Network」文字列を見つけません。検索は現在の視覚的位置から下に向かって始まります。上へ検索したい場合は?を使用します。
  • n 現在の検索で次の一致を見つけます。N は前の一致を見つけます。
  • q journalctlユーティリティを終了します。

journalctl-searching

優先度でログエントリをフィルタリングする

時々、通知やステータスメッセージを無視して、エラーだけを検索したいことがあります。ログ内の各エントリには優先度があります:緊急、アラート、クリティカル、エラー、警告、通知、情報。これらは重要度の順に並んでおり、緊急は最悪のシナリオ(システムが使用できない)用に予約されています。情報メッセージは単なる情報テキストで、通常通りに動作しているプログラムのステータスを報告します。

現在のブートからエラーメッセージのみを表示するには、次のように入力します:

journalctl -b0 -p err

journalctl-filter-errors

すべてのブートからエラーを見たい場合は、「-b」パラメータを削除するだけです:

journalctl -p err

これが「-p」パラメータに渡せるコードです:

  • alert
  • crit
  • debug
  • emerg
  • err
  • info
  • notice
  • warning

プロセス実行可能ファイルまたはsystemdユニットのパスでログエントリをフィルタリングする

いくつかのプロセスは、いわゆるsystemdユニットによって起動および管理されます。cronサービスユニットに関連するすべてのログを見るには、次のように入力します:

journalctl -u cron.service

使用可能なユニットを確認するには:

systemctl list-dependencies

journalctl-list-dependencies

上矢印と下矢印キーでリストをナビゲートできます。qを押して終了します。

プログラムの実行可能ファイル(バイナリ)へのパスを使用したい場合は、そのフルパスを引数として渡すだけです。

journalctl /usr/sbin/cron

不要なメッセージを排除するために現在のブートエントリでフィルタリングすることも忘れないでください。

journalctl -b0 /usr/sbin/cron

結論

Journalctlは、あなたが探しているものを簡単に見つけられるようにすることを目的としています。使用できるより高度なパラメータについて学びたい場合は、journalctlコマンドのマニュアルページを参照してください。