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

Journalctl:Systemd ログを読み取って編集する方法

はじめに

Systemd は、カーネルお​​よびシステム プロセスからのすべての Linux メッセージをログに記録します。 journalctl コマンドを使用すると、systemd ログの表示と編集が可能になり、サービスとプロセスのデバッグのための強力なツールになります。

このガイドでは、例を通して、journalctl を使用して systemd ログを読み取り、制御、維持する方法を示します。

前提条件

  • コマンドライン/ターミナル ウィンドウへのアクセス
  • 構成ファイルを編集するためのテキスト エディター (nano など)。
  • sudo 権限を持つユーザー (ユーザーを sudoers に追加する方法を参照してください)。

Systemd とは

Systemd は、Linux サービスおよびシステム マネージャーです。ユーザーが systemd を直接呼び出すことはありませんが、マネージャーには、さまざまなシステム プロセスに対して個別に実行するための多くのツールとデーモンが含まれています。

systemd の最も強力な機能の 1 つは、ログ機能です。 Systemd は、ジャーナルと呼ばれるログを通じてすべてのカーネルとユーザー プロセスを記録するための集中型ソリューションを提供します。 .

日誌 デーモンは、システムが出力するすべてのメッセージを収集し、プログラムまたはプロセスに関係なく、ジャーナルを作成します。デーモンは、利用可能なすべてのシステム リソースからデータを収集し、バイナリ形式で保存します。

注: バイナリ形式により、ニーズに合わせて出力を操作できるため、従来の Linux ログ ファイルよりも柔軟性が高くなります。

journalctl 構文

journalctl コマンドは、journald によって収集されたジャーナル データをクエリして操作します デーモン。このツールはシステム管理者にとって不可欠であり、他の Linux ロギング ツールや Syslog サーバー ソフトウェア ソリューションを補完します。

コマンド構文は次のとおりです:

journalctl <options> <matches>

パラメータがなければ、journalctl コマンドは、最も古いエントリから始まるジャーナルの内容全体を出力します。 <match> 出力フィールドをフィルタリングするための、スペースで区切られた 1 つ以上の引数です。フォーマットは "FIELD=VALUE" です .

journalctl オプション

以下の表は、一般的な journalctl をまとめたものです。 オプション:

オプション 説明
-a
--all
印刷できない文字を含め、すべてのフィールドを完全に表示します。
-f
--follow
最新のエントリを表示し、新しいエントリを継続的に印刷します。
--no-full 出力を切り捨てます。
-e
--pager-end
ページャーの末尾にジャンプします。
-n <number>
--lines=<number>
最新のエントリを <number> に限定して表示します イベントの。引数がない場合、デフォルトは 10 です。
-o <format>
--output=<format>
要求された <format> の仕訳を表示します .
--utc 協定世界時 (UTC) 形式で時刻を表示します。
-x
--catalog
利用可能な場合、ログ メッセージに説明テキストを追加します。
-q
--quiet
出力で情報メッセージを抑制します。
-b [<ID> or <+-offset>]
--boot[=<ID> or <+-offset>]
特定のブートからのログを表示します。引数を省略すると、現在のブート ログが表示されます。
-k
--dmesg
カーネル メッセージのみを表示します。
--list-boots ブート番号とその ID の表を表示します。
-g <regex>
--grep=<regex>
grep 正規表現構文に従って出力をフィルタリングします。
-S <date> -U <date>
--since=<date> , --until=<date>
指定した日付より新しいまたは古いエントリを表示します。
-u <unit|pattern>
--unit=<unit|pattern>
指定された systemd ユニットまたは <pattern> に一致する任意のユニットのログを表示します .
--disk-usage ディスク上の合計ジャーナル サイズを計算して表示します。
--vaccuum-size=<size> アーカイブされたジャーナル ファイルのサイズを に制限します。
--vaccuum-time=<time> アーカイブされた日誌を
--no-pager ページャーを無効にし、標準出力として表示します。

journalctl を確認してください オプションの完全なリストについては、man コマンドを使用してマニュアル ページを参照してください。

systemd の読み方

次のセクションでは、systemd ログを読み取り、journalctl のさまざまな表示オプションを使用する方法について概説します。 指図。すべてのシステムのレコードは一意であるため、出力はマシンごとに異なります。

すべての日誌エントリを表示

すべての日誌エントリを表示するには、journalctl を使用します オプションなしのコマンド:

journalctl

出力の最初の行は、ログ データの時間範囲を示しています。列には、左から右の順に次のデータが含まれます:

  • 日時。
  • ホスト
  • ログソース。
  • ログ メッセージ。

ジャーナル データには多くのエントリが含まれています。 矢印キーを使用します (less コマンドに似ています) 移動します。

q を押してジャーナルを終了します .

最新のエントリを表示

journalctl コマンドは、デフォルトで最も古いエントリを表示します。ページャーの最後にジャンプして最新のエントリを表示するには、-e を使用します オプション:

journalctl -e

スペースを節約するために、出力には最後の 1000 エントリが表示されます。

出力に表示される行数を制御するには、-n を使用します オプションの後に行数を指定します。たとえば、最新の日誌エントリを 5 つ表示するには、次を使用します。

journalctl -n 5

-e オプションは不要であり、-n によって暗示されています オプション。数字を省略すると、デフォルトで最新の 10 件のエントリが表示されます。

ログを特定のブートに限定する

ログを現在のブートに限定するには、-b を使用します パラメータなしのタグ:

journalctl -b

パラメーターを指定しないと、コマンドは現在のブート ログを表示します。

オフセット パラメータを追加して、特定のブートにジャンプします。たとえば、以前の起動ログを次のように表示します:

journalctl -b -1

または、利用可能な最も古いブート ログを次のように表示します:

journalctl -b +1

特定のブートを確認する別の方法は、ブート ID を使用することです。 --list-boots を使用してブート ID を取得します と:

journalctl --list-boots

最初の列には負のオフセット番号が表示され、2 番目の列には ブート ID が取得されます . ID をコピーし、パラメーターとしてコマンドに追加します。例:

journalctl -b cc07702b00884ec59312ece62604cac8

出力は、ログ表示を提供された ID インスタンスに制限します。

特定の時間枠内のログを表示

制限時間を指定してジャーナルをフィルタリングします。指定された時間以降または指定された時間まで制限するための 2 つのオプションは次のとおりです。

journalctl -S <datetime>
journalctl -U <datetime>

オプションを個別に使用するか、それらを組み合わせて時間枠を作成します。

このコマンドは、次の日付と時刻の形式のいずれかを想定しています:

  • 特定の日付と時刻。例:2022-04-30 09:20:00 . time パラメータを省略すると、デフォルトは 00:00:00 になります .
  • "yesterday" などの文字列 , "today" , "2 hours ago" 、または "now" .

以下は journalctl の例です 特定の時間枠を持つコマンド:

journalctl -S 2022-04-02 -U 2022-04-22

このコマンドは、2022 年 4 月 2 日から 2022 年 4 月 22 日までの時間枠を作成します。出力には、その時間枠に該当するジャーナルが表示されます。

または、次のような文字列パターンを使用します:

journalctl -S "50 minutes ago"

出力には、指定された時刻から現在の時刻までのログが表示されます。

特定の systemd ユニットごとにログを表示

-u を使用して、特定の systemd ユニットでログをフィルタリングします タグとユニット名を提供します。たとえば、Jenkins サービス ユニット レコードのみをフィルタリングするには、次を実行します。

journalctl -u jenkins

出力には、特定の systemd ユニット (この場合は Jenkins) に関連するジャーナル エントリが表示されます。

注: 現在アクティブなすべての systemd ユニットを表示するには、次を使用します:

systemctl list-units

カーネル メッセージを表示する

カーネル ジャーナル ログ メッセージのみを表示するには、-k を使用します。 オプション:

journalctl -k

出力には、-b を適用して、現在のブートからのカーネル メッセージのみが表示されます。 鬼ごっこ。別のブート セッションからのカーネル ログを見つけるには、-b を追加します。 タグを付けて特定のブーツを検索します。

ログをフォロー

-f を使用します または --follow 最新のログを継続的に出力するためのタグ:

journalctl -f

出力には、リアルタイムで生成されるログが出力されます。このオプションにより、journalctl でログを監視できます 彼らが追加するように。

ビューアを終了するには、CTRL を押します +C .

優先度に基づいてログ メッセージをフィルタリングする

次のコマンドを使用して、ログ メッセージを優先度でフィルター処理します:

journalctl -p <number or text priority>

次の優先順位があります:

  • 緊急 - 0 または emerg
  • アラート - 1 または alert
  • クリティカル - 2 または crit
  • エラー - 3 または err
  • 警告 - 4 または warning
  • お知らせ - 5 または notice
  • 通知 - 6 または info
  • デバッグ - 7 または debug

数字が小さいほど、優先度が最も高いメッセージを示します。単一レベルの優先度を指定すると、優先度の低い (より重要な) ログもすべて表示されます。

たとえば、アラートを表示するには、次を使用します:

journalctl -p 1

または代わりに:

journalctl -p alert

出力には、アラート レベルのメッセージと、より重要なメッセージ (存在する場合) のみが表示されます。

特定のユーザーに基づいてログ メッセージをフィルタリングする

ユーザーのログを表示するには、ユーザー ID (UID) を取得します:

id <user>

現在のユーザーの ID を取得するには、<user> を省略します .出力には、特定のユーザーの UID 値が表示されます。 UID ジャーナル フィールドを使用して、特定のユーザーに基づいてログ メッセージをフィルタリングします。

journalctl _UID=<UID>

出力は、指定されたユーザー ID に基づいてジャーナル ログをフィルター処理します。

注: フィールドの完全なリストについては、systemd.journal-fields を確認してください マニュアルページ:

man systemd.journal-fields

systemd ログ出力を編集する方法

システム管理者としてログを操作する際の重要な側面は、ログ出力のフォーマットです。 Systemd は、視覚的な結果を操作し、目的の形式でデータをフェッチするための多くの方法を提供します。

以下は、いくつかの標準出力編集オプションと例です。

標準出力への出力

journalctl コマンドは、ページャーを使用して出力を表示します。ページャーを無効にします:

journalctl --no-pager

結果の出力は標準出力 (stdout) にあります。テキスト編集ツールまたは Bash スクリプトを使用してログ データを解析するときに、このオプションを使用します。

出力の切り捨てまたは拡張

journalctl pager は、出力に展開されたジャーナル イベントを示します。 を押す 左矢印キー 画面サイズに収まらないテキストをナビゲートするのに役立ちます。

journalctl の切り捨てを制限するには 出力、--no-full を使用 オプション:

journalctl --no-full

出力は、行を画面サイズに制限し、省略記号 (... ) は、切り捨てられた表示を示します。

出力形式

journalctl コマンドは、出力形式のさまざまなオプションを提供します。出力形式の構文は次のとおりです:

journalctl -o <output format>

利用可能なフォーマットには次のものがあります:

  • cat - メッセージ フィールドのみを表示します。
  • export - バックアップに適したバイナリ形式を出力します。
  • short - 従来の Syslog ファイルと同様の出力を生成します。
  • short-precise - 時間をマイクロ秒で表示します。
  • json - 日誌エントリを単一行の JSON エントリにフォーマットします。
  • json-pretty - 複数行の JSON 構造にフォーマットします。

たとえば、json-pretty を使用して表示するには フォーマット、使用:

journalctl -o json-pretty

さまざまな形式により、ログ データをデータベースやスクリプト ファイルで使用したり、監視ソフトウェアで解析したりできます。

ログのメンテナンス

ログ データの保存にはコストがかかり、スペースを占有します。以下は、ディスクの使用状況を検出し、ログ データ ファイルを維持し、古いログ ファイルが使用していたスペースを解放するためのヒントとコツです。

ディスク使用量の表示

ジャーナル ディスクの使用状況を確認するには、次のコマンドを実行します:

journalctl --disk-usage

出力には、アーカイブ済みおよびアクティブなジャーナルによるディスクの総占有スペースが表示されます。

古いログを削除

必要なサイズ制限を設定して、古いログ アーカイブを削除します。このコマンドでは、ファイル /var/log/journal を削除するために sudo が必要です .

たとえば、サイズを 1M に設定するには:

sudo journalctl --vacuum-size=1M

sudo パスワードを入力して Enter を押します .出力にはファイル名とサイズが表示され、最後の行には解放されたメモリの量が表示されます。

または、時間に基づいてアーカイブ ログを削除します。設定された時間より古いファイルはすべて削除され、メモリが解放されます。たとえば、2 か月以上経過したファイルを削除するには、次のコマンドを実行します:

sudo journalctl --vacuum-time=2months

時間サフィックスは s です m h , days , months weeks 、または years .

ジャーナルを制限する

ジャーナル構成ファイルを使用すると、制限を設定し、journald データがディスク上で占める量を制御できます。ファイルを編集するには、次を実行します:

sudo nano /etc/systemd/journald.conf

このファイルには、構成フィールドの例が含まれています。次のパラメータは、ジャーナルのサイズとメモリの制限を扱います:

  • SystemMaxUse - ジャーナルが使用する最大永続ストレージ
  • SystemKeepFree - エントリを永続ストレージに追加するときにジャーナルが残す空き容量
  • SystemMaxFileSize - 永続ストレージ内のジャーナル ファイルの最大サイズを設定します。
  • RuntimeMaxUse - 揮発性ストレージの最大ディスク容量
  • RuntimeKeepFree - 揮発性ストレージへの書き込み時に他の用途に使用できる空き容量
  • RuntimeMaxFileSize - 揮発性ストレージ内のジャーナル ファイルの最大サイズを設定します。

ファイル サイズは、対象のアーカイブ ファイルが制限に達するように制御します。行のコメントを外し、制限を設定して、マシンのストレージと消費リソースをより適切に制御します。

結論

このガイドでは、systemd ジャーナル ログを表示、制御、および管理する方法を例を通して示しました。 journalctl コマンドは、Linux サービスのトラブルシューティングとシステム エラーの発見に役立つ貴重なツールです。


Linux
  1. Linux環境変数:LinuxVPSでの読み取りと設定の方法

  2. SELinux拒否メッセージを読んで修正する方法

  3. Linuxでjournalctlを使用してログを分析する方法

  1. Journalctlをクリアする方法は?

  2. 「journalctl」の初心者向けガイド – Journalctl を使用して Systemd ログを表示および操作する方法

  3. CentOS/RHEL 7 および 8 で systemd ブート プロセスをデバッグする方法

  1. 方法:Journalctlを使用してシステムログを管理する

  2. Androidシェルでファイルをコピーして編集するには?

  3. Cでシリアルポートを開き、読み書きする方法は?