GNU/Linux >> Linux の 問題 >  >> Linux

journalctlコマンドを使用してLinuxでログを分析するためのビギナーズガイド

systemdは、ほとんどの主要なLinuxディストリビューションのデフォルトです。 systemdの主な機能の1つは、ログを収集する方法と、それらのログを分析するために提供するツールです。

従来のSysVinitシステムでは、ログをプレーンテキストファイルに保存するsyslogがあります。これらのファイルを読み取って分析するには、find、grep、cut、およびその他の多くのコマンドを使用する必要があります。

systemdは、syslogよりも多くのソースからログを収集し、ジャーナルログをバイナリ形式で保持し、ログを読み取り、分析し、操作するためのコマンドラインツールを提供します。これはsyslogよりも合理化されています。

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

journaldは、syslogなどのさまざまなログソースからログを収集するsystemdのデーモンです。

journalctlは、ジャーナルログを操作できるコマンドラインツールです。

journalctlを使用すると、ログを読み取ったり、ログをリアルタイムで監視したり、時間、サービス、重大度、その他のパラメーターに基づいてログをフィルタリングしたりできます。

このチュートリアルでは、Journalctl toを使用して、Linuxでログを読み取り、監視し、分析する方法を説明します。

システムでジャーナルログが有効になっているかどうかを確認します

一部のLinuxディストリビューション、特にデスクトップディストリビューションでは、デフォルトでジャーナルログが有効になっていません。

ジャーナルログのデフォルトの場所は/var/log/journalです。 ディレクトリ。このディレクトリが存在することを確認する必要があります。そうでない場合は、自分で作成してください。

次に、/ etc / systemd / journald.confファイルで、値がStorageであることを確認します。 autoのいずれかに設定されます またはpersistent

journald.confファイルにデフォルト値が表示されます。したがって、エントリの前に#がある場合でも、それらが使用されているデフォルト設定であることを意味します。何かを変更したい場合は、その行から#を削除します。

journalctlコマンドの使用

journalctlコマンドの最も基本的でありながら便利な例をいくつか紹介します。

journalctlを使用してログを読み取り、検索します

journalctlと入力するだけの場合 ターミナルでは、ジャーナルログが時系列で表示されます。

journalctl

journalctlはlessを使用します 下にログが表示されます。つまり、lessコマンドを使用する場合と同じキーを使用して、ログ内を移動できます。

それを覚えていない場合は、簡単に思い出してください:

キー 説明
矢印 1行移動
スペース 1ページ下に移動
b 1ページ上に移動
g 最初の行に移動
G 最後の行に移動
100g 100行目に移動
/ string 現在の位置から文字列を検索
n / N 次または前の検索一致に移動
q ログを終了します

ログをあまり似ていない表示モードで表示したくない場合は、--no-pagerを使用できます。 国旗。これにより、ログ全体が画面に直接表示されます。

journalctl --no-pager

これはあまり便利ではなく、大量のログがある場合は画面がいっぱいになります。

ログを新しい順に表示する

お気づきのように、ログは時系列で表示されます。これは、保存されている最も古いログが最初に表示されることを意味します。

最近のログを最初に表示する場合は、オプション-rを使用して、ジャーナルログを逆の順序で表示できます。 :

journalctl -r

それでも、viewのような少ないコマンドを使用します。したがって、qを押します ログ表示モードを終了します。

最近のN行のジャーナルログのみを表示する

すべてのログを表示する代わりに、-nを使用して、ログから特定の行数のみを表示するように選択できます。 オプション。

たとえば、次のコマンドは、ログの最新の25行を表示します。

journalctl -n 25
ジャーナルログをリアルタイムで表示する

最近のログを表示することは1つのことです。ログをリアルタイムで表示したい場合は、-fを使用できます。 journalctlコマンドのオプション:

journalctl -f

tailコマンドの-fオプションと同様に、これにより、フォローモードでログがリアルタイムで表示されます。

Ctrl + Cコマンドを使用して、リアルタイムビューを終了します。

ログをUTC時間で表示

デフォルトでは、ジャーナルログはシステムの現地時間で表示されます。システムの時刻がUTC以外の時刻に設定されていて、ログをUTCで表示したい場合は、--utcを使用してこれを行うことができます。 フラグ。

journalctl --utc

-kを使用してカーネルメッセージのみを表示する

systemdジャーナルは、さまざまなソースからのログを蓄積します。 Linuxカーネルのログだけを表示したい場合は、オプション-kを使用できます。 。

journalctl -k

ヒント:sudoを使用してすべてのジャーナルログを表示します

Systemdは、どの種類のログをどのユーザーに表示するかを保護します。

通常のユーザーの場合、一部のログが表示される場合がありますが、すべてのログが表示されるわけではありません:

[email protected]:~$ journalctl -u ssh
Hint: You are currently not seeing messages from other users and the system.
      Users in groups 'adm', 'systemd-journal' can see all messages.
      Pass -q to turn off this notice.
-- Logs begin at Mon 2020-06-22 12:05:47 UTC, end at Tue 2020-07-14 11:59:29 UTC. --
-- No entries --

すべてのログにアクセスしたい場合、sudoユーザーであればsudoを使用する必要があります:

sudo journalctl -u ssh
特定のブートセッションからのメッセージを表示する

これはjounraldの優れた機能です。 journalctlコマンドを使用すると、オプション-bを使用して、特定のブートセッションに属するログにアクセスできます。 。

--list-bootsを使用して、すべてのブートセッションを一覧表示できます。 フラグ。

journalctl --list-boots

出力には、起動時間と起動セッションに割り当てられた整数を含む起動セッションが表示されます。

  -5 513008ead8464c23aab732a2feed5277 Sun 2020-07-12 20:43:38 IST—Sun 2020-07-12 22:40:02 IST
  -4 caff16e3f46a4479b5287fb9e294f610 Mon 2020-07-13 07:36:04 IST—Mon 2020-07-13 19:13:44 IST
  -3 5665f41cc50a4dec9955efacc2596d68 Mon 2020-07-13 20:30:55 IST—Mon 2020-07-13 22:20:34 IST
  -2 c7d17407b0bd476a930af503f64b6006 Tue 2020-07-14 07:58:41 IST—Tue 2020-07-14 18:50:04 IST
  -1 7ab5e04518ec455abe0e2c86fdaa46fa Tue 2020-07-14 21:19:27 IST—Tue 2020-07-14 22:42:11 IST
   0 91856e86d4ee4e828717913deb288568 Wed 2020-07-15 08:11:51 IST—Wed 2020-07-15 17:14:10 IST

ブートセッション0は、現在のブートセッションです。起動セッション-1は、最後に起動されたセッションなどです。

journalctl -b -2

古いsyslogシステムでこれを実行しようとしていると想像してみてください!

/var/log/boot.logに表示されるようなブートログのみを取得することはできません。 。ただし、ブートセッションビューを表示している場合、ブートログは常にログの先頭にあります。

特定のsystemdサービスのジャーナルログをフィルタリングする

フィルタリングはジャーナルログの長所です。 systemdサービスに基づいてログをフィルタリングできます。

journalctl -u service_name

たとえば、SSHによって生成されたログを表示する場合は、次のように使用できます。

journalctl -u ssh

もちろん、systemdサービス名を知っている必要があります。

特定の時間間隔でログをフィルタリングする

これは、ジャーナルログの文字列フィルタリング機能のもう1つの例です。特定の期間のログをフィルタリングできます。これを行うにはさまざまな方法があります。

自然言語を使用してログをフィルタリングできます。昨日、今日、明日のような用語が認識されます。

journalctl --since=yesterday --until=now

日付または日時の組み合わせを指定することもできます:

journalctl --since "2020-07-10"

日付と時刻で期間を指定することもできます:

journalctl --since "2020-07-10 15:10:00" --until "2020-07-12"

時間は00:00:00に始まり、曜日と日付を決定します。

-1h20minのような相対時間を使用して、過去1時間20分を指定することもできます。

UID、GID、PIDに基づいてログをフィルタリングする

問題をデバッグしている場合は、PIDを使用して特定のプロセスのログを確認することをお勧めします。

ジャーナルログは、ユーザーID(UID)、グループID(GID)、およびプロセスID(PID)でフィルタリングすることもできます。以下に例を示します:

journalctl _PID=1234

ヒント:複数のオプションを組み合わせて、より調整されたログを表示します

複数のオプションを組み合わせて、目的のログを表示できます。

たとえば、昨日のSSHログのみをUTCタイムスタンプで表示する場合は、次を使用できます。

sudo journalctl -u ssh --since=yesterday --utc

もう1つの一般的な使用法は、ブートセッションに基づいてログをフィルタリングすることです。現在のセッションでSSHログのみを表示する場合は、次を使用できます。

sudo journalctl -u ssh -b0

可能性は無限であり、必要に応じてオプションを組み合わせることができます。

journalctl-xeを使用して最後のいくつかのログを表示する

journalctl -xeの使用を提案している人をよく見かけます コマンド。

  • -e :ジャーナルログの最後にジャンプします
  • -x :ログエントリに関する追加情報を表示する(利用可能な場合)

一部のログエントリには、通常のログ表示では表示されない追加情報が含まれています。 -xを使用する オプションはそのような情報を表示するかもしれません。

このように1行で表示されるもの:

Jul 09 16:33:40 itsfoss systemd[1]: Started Run anacron jobs.

次のような詳細情報が表示される可能性があります:

Jul 09 16:33:40 itsfoss systemd[1]: Started Run anacron jobs.
-- Subject: A start job for unit anacron.service has finished successfully
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
-- 
-- A start job for unit anacron.service has finished successfully.
-- 
-- The job identifier is 3702.

追加情報は、エラーまたはログイベントのコンテキストと考えられる解決策を説明するのに役立ちます。

journalctlを使用してログのエラーのみを表示する

現在のセッションのすべてのエラーを表示するには、次を使用できます。

journalctl -p 3 -xb
  • -p 3:優先度3のログをフィルタリングします(これはエラーです)
  • -x:ログに関する追加情報を提供します(利用可能な場合)
  • b:前回の起動以降(現在のセッション)

他の優先度レベルを使用して、デバッグ、警告、またはクリティカルレベルのログを取得することもできます。この表には、すべての優先度レベルがリストされています。

優先度 コード
0 emerg
1 アラート
2 クリティカル
3 エラー
4 警告
5 通知
6 情報
7 デバッグ

さまざまな重大度のログを表示することもできます。たとえば、現在のセッションのすべての警告、通知、および情報ログを表示する場合は、次を使用できます。

journalctl -p 4..6 -b0

warning..infoを使用することもできます 上記のコマンドでは、4..6の代わりに 。

ログが取っているディスク容量を確認する

ジャーナルはさまざまなソースからログを収集し、デバッグログを含むさまざまなレベルのログを保存します。私を信じてください。ログを保持することは分析と監査に役立ちますが、かなりの量のディスクスペースを必要とする可能性があります。

次のjournalctlコマンドを使用して、ジャーナルログが使用しているディスク容量を確認できます。

journalctl --disk-usage

出力を見ると、驚き(またはショック)を感じるかもしれません:

[email protected]:~$ journalctl --disk-usage 
Archived and active journals take up 2.8G in the file system.

2.8 GB?それは沢山。ジャーナルログをクリアすることをお勧めします。

journalctlコマンドでログ分析をお楽しみください

journalctlコマンドにはさらに多くのオプションと使用法があり、それらすべてを網羅することはできません。詳細が必要な場合は、そのマンページを読むことをお勧めします。

定期的なログ分析にjournalctlコマンドを使用するのに十分な量を提供したと思います。ジャーナルに関するこの詳細なチュートリアルを気に入っていただければ幸いです。

提案や質問がある場合は、遠慮なくコメントを残してください。


Linux
  1. 例を含むLinuxTeeコマンド

  2. Linuxの基本:vimを使用したテキスト編集の初心者向けガイド

  3. LinuxでのJQコマンドと例

  1. Linuxパーミッションのビギナーズガイド

  2. 例を含むwcLinuxコマンド

  3. 例を含むLinuxヘッドコマンド

  1. Linuxのソートコマンドと例

  2. Linuxでのエコーコマンド(例付き)

  3. Linuxでのmanコマンドと例