Linuxカーネルのログレベルの紹介
目的
このチュートリアルの目的は、さまざまなLinuxカーネルのログレベルについて、どのように整理されているか、またその深刻度に応じてコンソールに表示すべきメッセージを設定する方法を学ぶことです。
要件
- 設定ファイルを編集するためのルート権限
難しさ
簡単
紹介
Linuxカーネルのログファイルの管理は、マシン管理の重要な側面の一つです。ログは、デーモンの状態について私たちに情報を提供したり、重要なメッセージや警告を示したりすることができます。このチュートリアルでは、Linuxカーネルで使用されるさまざまな種類のログレベル、どのように重大度によって整理されているか、そしてそれに応じてコンソールに表示されるメッセージをどのようにフィルタリングできるかを見ていきます。
Linuxカーネルのログレベル
Linuxカーネルが送信できるメッセージには、基本的に8つのログレベルがあり、レベル0から始まり、レベル7までの深刻度が低下します:最も低いログレベル識別子であり、最も重要なコンテキストです。
コンソールのデフォルトのログレベルが設定されている場合、それが永続的または一時的であっても、それはフィルターとして機能し、それよりも低いログレベルのメッセージ(したがって、より高い重要度のメッセージ)のみが表示されます。ログレベルがどのように整理されているかを簡単に見てみましょう:
最初のログレベルは0で、KERN_EMERG文字列によって識別されます。これは、深刻度の順序で最も高いレベルであり、システムの不安定性や差し迫ったクラッシュに関するメッセージによって採用されます。
ログレベル 1、または KERN_ALERT は、その後に続くものです。このレベルは、ユーザーの注意が直ちに必要な状況で使用されます。
次のログレベルは深刻度において2です。この深刻度のレベルは、ハードウェアまたはソフトウェアに関連する重大なエラーについて通知するために使用されます。
ログレベル 3、また KERN_ERR 文字列によって識別されます。これはスケールの次のレベルです。このレベルを採用したメッセージは、ユーザーに対して非致命的なエラーについて通知するために使用されることが多いです。例えば、デバイスの認識が失敗したり、問題があったりする場合や、より一般的にはドライバー関連の問題がある場合です。
KERN_WARNING、またはログレベル4は、ほとんどのLinuxディストリビューションで通常デフォルトとして使用されるログレベルです。このレベルは、差し迫ったエラーではない警告やメッセージを表示するために使用されます。
ログレベル5はKERN_NOTICEです。この重要度のレベルを使用するメッセージは、注目に値するかもしれないイベントに関するものです。
ログレベル 6 は KERN_INFO であり、これはカーネルによって実行されたアクションに関する情報メッセージに使用されるログレベルです。
最後に、KERN_DEBUG、つまりログレベル7があります。これは主にデバッグに使用されます。
現在のデフォルトのログレベルを確認する方法
システムで使用されるデフォルトのログレベルを確認するのは非常に簡単です。私たちが行うべきことは、/proc/sys/kernel/printkファイルの内容を調べることだけです。知らない方のために説明すると、/procは仮想ファイルシステムです。そこに含まれるファイルは実際にはディスク上には存在せず、カーネルによって作成され、メモリ内に維持されているシステム状態の視覚的表現です。この場合、例えば、私たちは上記のファイルを使用して、システムに設定されているデフォルトのコンソールログレベルに関する情報を照会できます。私たちが行うべきことは、次のコマンドを実行することだけです。
cat /proc/sys/kernel/printkこれはコマンドの典型的な出力です:
4 4 1 7
出力の最初の値は現在のconsole_loglevelです。これが私たちが探していた情報です: この場合の値4は、現在使用されているログレベルを表しています。前述の通り、これはそれよりも重大度の高いメッセージのみがコンソールに表示されることを意味します。
出力の2番目の値はdefault_message_loglevelを表します。この値は、特定のログレベルがないメッセージに自動的に使用されます: メッセージがログレベルに関連付けられていない場合、これが使用されます。
出力の3番目の値はminimum_console_loglevelのステータスを報告します。これはconsole_loglevelに使用できる最小のログレベルを示します。ここで使用されるレベルは1、最も高いです。
最後に、最後の値は default_console_loglevel を表し、これはブート時に console_loglevel に使用されるデフォルトのログレベルです。
完全性のために、同じ情報は sysctl コマンドを使用しても取得できることを言わなければなりません。
sysctl kernel.printkデフォルトのコンソールログレベルを変更する
私たちは、コンソールで使用されている現在のログレベルに関する情報を取得する方法を見ました。いくつかの状況では、その値を変更したい場合があります。このタスクをどのように達成できるか見てみましょう。
私たちが使用できる最も簡単な方法は、新しい値を/proc/sys/kernel/printkファイルに書き込むことです。しかし、これは一時的な解決策であり、新しい設定はマシンの再起動では持続しません。デフォルトのコンソールのログレベルを3に変更したいとしましょう。ここで実行するコマンドは次のとおりです:
echo "3" | sudo tee /proc/sys/kernel/printkあるいは root アカウントを直接使用する場合:
echo "3" > /proc/sys/kernel/printkファイルの内容を見ることで、ログレベルが私たちがコマンドで指定したものになっていることを確認できます:
cat /proc/sys/kernel/printk
3 4 1 7
同じ結果はsysctlコマンドを使用して得ることができます:
sudo sysctl -w kernel.printk=3
もう一度繰り返しますが、これらは一時的で永続的ではない解決策です。デフォルトのログレベルを永続的に変更するには、/etc/default/grub ファイルを修正し、ブート時にカーネルコマンドラインに loglevel パラメータを渡す必要があります:
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="loglevel=3 resume=UUID=df5a0685-43f8-433a-8611-57335a10ca8d"
GRUB_DISABLE_RECOVERY="true"
/etc/default/grubファイルの内容は上記の通りで、GRUB_CMDLINE_LINUXに追加すべきパラメータを強調表示しています。このパラメータはカーネルコマンドラインの指示を含んでいます。この場合、コンソールに特定のログレベルを使用したいので、loglevel=3を使用しました。ファイルを修正して変更を保存した後、次回の再起動時に新しい設定が適用されるようにgrubを再読み込みする必要があります。この操作を行うためのコマンドは、実行しているディストリビューションによって異なります。一般的には、コマンドは次のようになります:
sudo grub2-mkconfig -o /boot/grub2/grub.cfgDebianベースのディストリビューションでは、ラッパースクリプトを使用して基本的に同じ操作を実行します。
sudo update-grubグラブ設定が更新され、次回の再起動時に指定されたログレベルがデフォルトとして採用されます。
結論
このチュートリアルでは、Linuxカーネルのログがその重要度レベルに応じてどのように整理されているかを学びました。また、カーネルが送信する特定のメッセージのみがコンソールに表示されるように、デフォルトの設定を変更する方法も見ました。同じ基準を使用して。最後に、これらの変更を永続的にする方法を見ました。