journalctl でログを調査する
前のステップでは、カーネルリングバッファについて学び、dmesg
を使ってその内容を表示する方法を学びました。dmesg
はカーネルメッセージを表示するのに便利ですが、最新の Linux システムでは systemd-journald
と呼ばれるより包括的なロギングシステムを使用しています。journalctl
コマンドは、systemd-journald
のジャーナルとやり取りするための主要なツールです。
systemd-journald
は、カーネル(dmesg
で見たメッセージのようなもの)、システムサービス、アプリケーション、さらにはプロセスの標準出力や標準エラーなど、様々なソースからログメッセージを収集します。これらのログは構造化された索引付きの形式で保存されるため、メッセージの検索やフィルタリングが容易になります。
journalctl
コマンドを調べてみましょう。
ターミナルが開いていない場合は、開きます。
次のコマンドを入力して Enter キーを押します。
journalctl
このコマンドは、systemd-journald
が収集したすべてのログメッセージを表示します。dmesg
と同様に、出力は非常に長くなることがあり、通常は自動的に less
などのページャにパイプされます。
-- Journal begins at Tue 2024-07-23 10:00:00 UTC, ends at Tue 2024-07-23 10:30:00 UTC. --
Jul 23 10:00:01 hostname systemd[1]: Starting Network Manager...
Jul 23 10:00:02 hostname kernel: Linux version 5.15.0-xx-generic (...)
Jul 23 10:00:03 hostname systemd[1]: Started Network Manager.
Jul 23 10:00:04 hostname systemd[1]: Starting OpenSSH server daemon...
...
矢印キーを使ってスクロールし、q
を押してページャを終了できます。
journalctl
には、ログをフィルタリングするための多くのオプションがあります。いくつかの例を紹介します。
カーネルメッセージのみを表示するには(dmesg
と同様):
journalctl -k
特定のサービスのログを表示するには、たとえば SSH サービスの場合:
journalctl -u ssh.service
特定の時刻以降のログを表示するには、たとえば「今日」以降の場合:
journalctl --since "today"
最新のログを表示し、新しいメッセージが届くたびに追跡するには(tail -f
のように):
journalctl -f
Ctrl+C
を押して journalctl -f
コマンドを終了します。
journalctl
はシステム管理とトラブルシューティングに強力なツールです。ログを一元管理し、表示やフィルタリングするための柔軟なオプションを提供します。
ターミナルで journalctl
のいくつかのオプションを試して、出力にどのような影響があるかを確認してみてください。
Continue をクリックしてこの実験を完了します。