はじめに
一部の新しいLinuxディストリビューションでは、「init.d」または「rsyslogd」がJournalCTLと呼ばれるプログラムに置き換えられています。以前は、ログは通常、検索、管理、操作が簡単ではなく、個別のログファイルごとに特定の場所で見つかりました。 Systemdは、これらのログファイルを一元化し、すべてのカーネルプロセスとユーザープロセスを1つの「ジャーナル」に記録することで、これらのログファイルへのアクセスを容易にしました。 Journalctlはこれの最新バージョンであり、これらのファイルの管理がさらに簡単になります。
このガイドでは、journalctlの基本と、プログラムの推奨される使用法の概要について説明します。
前提条件
システムログ管理プログラムとしてjournalctlを使用するLinuxディストリビューション(CentOS 7など)が必要です。サーバーがない場合は、Atlantic.Netの超高速SSD仮想プライベートサーバーを検討してください。
Journalctlを使用してシステムログを管理する方法
システム時刻の設定
他のことから始める前に、システム時刻を設定することを強くお勧めします。 systemdはバイナリジャーナルとしてログに記録するため、UTCまたはローカル(サーバー)時間のいずれかでレコードをログに記録できます。デフォルトでは、systemdは結果を現地時間で表示します。後で混乱を避けるために、時刻が正しく設定されていることを確認します。 Systemdには、この目的のための「timedatectl」と呼ばれる組み込みプログラムがあります。
まず、ゾーンオプションでタイムゾーンが使用可能であることを確認します。
timedatectl list-timezones
これにより、サーバーで使用可能なすべてのタイムゾーンが表示されます。現在地(またはサーバーの場所)に一致するものを見つけたら、次のように設定します。
sudo timedatectl set-timezone (zone)
次に、これが適切に有効になったことを確認します:
timedatectl status
最初の行には正しい時刻が表示されます。
アクセス制御
usermod -a -G adm username
「username」をユーザーの名前に置き換えます。このユーザーは、rootユーザーと同じjournalctlアクセスを受け取ります。ただし、このコントロールは、永続ストレージが有効になっている場合にのみ機能します。
基本的なログの表示
この時点で発行できるコマンドがいくつかあります。基本コマンドは、すべての一般的なエントリの出力を表示し、最も古いエントリを最初に表示します:
journalctl
これによりすべてのログファイルが得られますが、まあ、すべてのログファイルが得られます。これは、機会があれば、数百、数千、またはそれ以上のログ行が表示されることを意味します。これは、以前のバージョンの「/ var / log /messages/」を調べた場合に表示されるものと似ています。
現在のブートセッション
現在のブートでのみ発生したログを表示するコマンドもあります。
journalctl -b
これは、以前のブートセッションからの情報が表示されないことを意味します。
前のブートセッション
以前のブートセッションのログを確認する必要がある場合は、そのためのオプションもあります。一部のバージョンでは、デフォルトで以前のブートセッションのログ記録が有効になっています。これらをログに記録するように設定するには、この機能を有効にすることをお勧めします。これは、ディレクトリを作成することで実行できます
sudo mkdir -p /var/log/journal
または、ジャーナル構成ファイルを直接編集することによって
sudo nano /etc/systemd/journald.conf
ファイルの[Journal]で、「Storage =」オプションを「persistent」に設定して、永続ログを有効にします。このファイルを保存して終了すると、設定が有効になります。
これを保存したら、ブートファイルで利用可能なオプションを表示して確認します。
journalctl --list-boots
使用可能なブートセッションごとに1行が表示されます。オフセットIDは最初の列で、ブートIDは2番目の列です。オフセットIDまたはブートIDのいずれかを使用して、次のコマンドを発行できます。
journalctl -b (offset/boot ID)
特定の時間枠
代わりに、指定された時間枠でログファイルを確認することもできます。これは、複数のブートセッションにまたがるか、1つのブートセッション内の指定された時間枠に制限する場合があります。 –sinceおよび–untilの制限を設定して、特定のログの前後のイベントのみを表示することができます。
すべての時間値について、次の形式を使用する必要があります。
YYYY-MM-DD HH:MM:SS
2015年7月5日の午前10時以降に発生したイベントを表示する場合は、次のコマンドでこれを実行できます。
journalctl --since “2015-07-05 10:00:00”
これらは、このチュートリアルの前半で設定した内容に応じて、サーバー時間またはUTCのいずれかに基づくことに注意してください。
日付が省略されている場合、ジャーナルは今日の日付を想定します。時間を省略した場合は、深夜(00:00:00)とみなされます。また、秒フィールドを含める必要はありません。この場合、「00」秒が想定されます。
などのわかりやすいコマンドもあります
journalctl --since yesterday
および
journalctl --since 02:00 --until “3 hours ago”
フィルタリングオプション
単位別
利用可能な最も便利な機能は、ユニットフィルタリングです。 -uフィルタリングは、特定の「ユニット」のみを表示するオプションを提供し、特定のプログラムまたはシステムを参照してのみ発生したことを表示できるようにします。いつものように、これで時間枠のフィルターを追加できます。
journalctl -u nginx.service
または
journalctl -u nginx.service --since yesterday
プロセス、ユーザー、またはグループID別
探しているプロセスのPIDを取得するのに十分な情報をすでに確認している場合は、代わりにこれをフィルタリングできます。これは_PID
で実行されますjournalctl _PID=4345
場所別
パスの場所に基づくフィルタリングも利用できます。実行可能パスを選択している場合、journalctlはその実行可能ファイルに関連するすべてのエントリを表示します。たとえば、bashに関連するログを探している場合
journalctl /usr/bin/bash
この方法には通常、プロセスと子プロセスに関するより詳細な情報が含まれています(利用可能な場合)。ただし、これがオプションではない場合もあります。
カーネルメッセージ
カーネルメッセージは通常、dmesg出力にありますが、journalctlを使用してこれらを取得することもできます。これは、-kまたは-dmesgフィルターを使用します。
journalctl -k
これにより、現在のブートセッション中に発生したカーネルメッセージが表示されます。繰り返しますが、これは前述のオプションでいつでも変更できます。以前のブートセッションからのカーネルメッセージを確認したい場合は、
journalctl -k -b -1
優先度
多くの場合、優先度はログを確認するための推奨される方法です。 Journalctlを使用して、特定の優先度レベルを超えるメッセージのみを表示できます。優先度は次のとおりです。
0:emerg
1:アラート
2:クリティカル
3:エラー
4:警告
5:通知
6:情報
7:デバッグ
優先度レベルの名前または対応する番号のいずれかを使用できます。警告優先度以上のログのみを表示したい場合は、コマンドを発行できます
journalctl -p warning -b
または
journalctl -p 4 -b
指定されたフィールド
特定のフィールド内で発生するジャーナルのリストを表示するには、-F修飾子を使用します
journal -F fieldname
ここで、「fieldname」は探しているフィールドに置き換えられます。特定の条件に適合するログエントリのみを表示するオプションもあります
journalctl fieldname=value
出力の切り捨てまたは拡張
Journalctlを変更して、出力データの表示を縮小または拡大できます。デフォルトでは、journalctlはエントリ全体を表示するため、矢印キーを使用して右にスクロールする必要があります。代わりに、この出力を切り捨てることができます。これにより、–no-fullオプションを使用して削除された情報の省略記号が表示されます。
journalctl --no-full
または、文字が印刷不能であると見なされているかどうかに関係なく、journalctlにすべての情報を表示するように指示することもできます。これは-a修飾子を使用して行われます。
journalctl -a
標準出力への変更
journalctl --no-pager
出力フォーマット
上で説明したように、ジャーナルエントリでテキストエディタを使用している場合、ジャーナルは必要に応じて他の形式で表示できます。これは、-o修飾子とフォーマット指定子を使用して実行できます。
たとえば、「
」と入力すると、JSONでジャーナルを読むことができます。journalctl -b -u nginx -o json
表示オプションには、次のものを使用できます。
猫 —メッセージフィールド自体を表示します
エクスポート —転送またはバックアップ用のバイナリ形式
json —標準のJSON、1行に1つのエントリ
json-かなり — JSON形式ですが、読みやすくなっています
json-sso —サーバー送信イベントの追加と互換性を持たせるためにラップされたJSON形式
短い —デフォルトのsyslog出力
short-iso —ISO8601ウォールクロックタイムスタンプを表示するデフォルト出力
短い単調 —単調なタイムスタンプのデフォルト出力
短精度 —マイクロ秒のタイムスタンプ付きのデフォルト出力
冗長 —そのエントリのすべてのジャーナルフィールドを表示します。非表示も含まれます
アクティブプロセスモニタリング
Journalctlは、監視にテールを使用する管理者を模倣します。これはjournalctlに組み込まれており、追加のツールをパイプすることなくこれらの機能にアクセスできます。
最近のログの表示
-nオプションを使用して、特定の量のレコードを表示できます。変更番号を含めないと、デフォルトで10件の結果が表示されます。
journalctl -n
代わりに、表示するエントリの数を指定できます
journalctl -n 20
次のログ
-f修飾子を使用して、ログが書き込まれているときにログを追跡できます。
journalctl -f
ジャーナルメンテナンス
ハードドライブの空き容量を増やすために、古いログをクリーンアップするために使用できるコマンドがいくつかあります。
まず、–disk-usage修飾子を使用して、ジャーナルが使用しているスペースの量を確認できます。
journalctl --disk-usage
これをクリーンアップするには、2つの異なる方法があります。 1つ目は、サイズに基づいてジャーナルを縮小することです。これにより、目的のディスク容量に達するまで、エントリが古いものから新しいものへと削除されます。
sudo journalctl --vacuum-size-2G
ジャーナルを縮小する別の方法は、特定の日付までです。 –vacuum-timeオプションは、特定の日付までのすべてのエントリを削除します。
昨年のエントリのみを保持するには、次のように入力します
sudo journalctl --vacuum-time-1years
ジャーナルサイズの制限
ジャーナルが占有できるスペースの量に制限を設けることができます。
nano /etc/systemd/journald.conf
これらの変更は、次のフィールド変更のいずれかで行うことができます
SystemMaxUse = 最大ディスク容量
SystemKeepFree = 利用可能なスペースの量
SystemMaxFileSize = ローテーションされる前に、個々のジャーナルファイルがどれだけ大きくなる可能性があるか
RuntimeMaxUse = 揮発性ストレージ内で使用できる最大ディスク容量(/ run filesystem)
RuntimeKeepFree = 揮発性ストレージ(/ runファイルシステム)で他のユーザーが利用できるようにしておく必要のあるスペースの量
RuntimeMaxFilesize = ローテーションされる前に、個々のジャーナルファイルが揮発性ストレージ(/ runファイルシステム内)にどのくらいの大きさになる可能性があるか
このハウツーをフォローしていただきありがとうございます。その他の更新については、ここに戻って確認し、Atlantic.Netの市場をリードするVPSホスティングサーバーを検討してください。