KLOGD(8)

名前
klogd - カーネルログデーモン

書式
klogd [ -c n ] [ -d ] [ -f fname ] [ -n ] [ -o ] [ -s ] [ -k fname ] [ -v ]

説明
klogd は Linux のカーネルメッセージを捕え記録するシステムデーモンである。

オプション

-c n
    コンソールに出力するログのレベルの既定値を n にする。

-d  デバッグモード。これは大量に stderr に出力する。

-f file
    syslog の facility ではなくて指定した名前のファイルにメッセージを記録 する。

-n  自動的なバックグラウンドへの移行を抑止する。これは klogd が init(8) により起動および制御される場合にのみ必要である。

-o  `ワンショット'モードで実行する。klogd はカーネルメッセー ジバッファに存在する全てのメッセージを読み出し記録する。一回の読み出 しと記録ののちデーモンは終了する。

-s  klogd はカーネルメッセージバッファとのインターフェイスにシステム コールの使用を強行する。

-k file
    カーネルシンボル情報を指定した名前のファイルから取得する。

-v  ヴァージョンを出力し、終了する。

概説
klogd の機能はよく他の版の syslogd に編入されてしまいがちであるが、そ れはあまり良い方法とは思われない。最近の Linux カーネルにおいては、情 報源の特定、順位付け、カーネルアドレスの解決など多くのメッセージに関す る問題を扱わなければならない。カーネルロギングを個別のプロセスとするこ とは、各種サービスの分割を明確なものにする。 Linux ではカーネルログ情報の情報源として二つの可能性がある: といっても 究極的には同じ一つのものなのであるが、それは、 /proc ファイルシステムと syscall (sys_syslog) インターフェイスである。klogd は最もふさわしい情報としてどちらかを選択するように設計されている。最初 に、実際にマウントされている /proc ファイルシステムを確認する。もしそこに /proc/kmsg ファイルがあれば、それをカーネルログ情報の情報源として利用する。もし proc ファイルシステムがマウントされていなければ、 klogd はカーネルメッセージの取得にシステムコールを利用する。コマンドラインス イッチの (-s) は klogd にその情報源としてシステムコールの利用を強行させる。 もしカーネルメッセージが syslogd デーモンに振り向けられたとしても、 version 1.1 の klogd デーモンは、その優先順位を適切に判定することが可能であ る。カーネルメッセージの優先順位付けは version 0.99pl13 あたり のカーネルで実装された。生のカーネルメッセージの形式は次の通り:

    <[0-7]>カーネルからの出力。

カーネルメッセージの優先順位は <> 括弧に閉じられた一桁の数字に変換され る。この数値はカーネルの include ファイル kernel.h で定義されている。 カーネルからメッセージを受けると klogd デーモンはこの優先順位を読み取 り、適切な syslog のメッセージレベルに割り付ける。 (-f) によってファイルへの出力が指示されている場合には、カーネルメッセージに 優先順位番号が残される。 klogd デーモンはカーネルメッセージの出力先をシステムコンソールへ変更す ることもできる。カーネルによって優先順位付けられる結果として、メッセー ジはそれぞれ既定のカーネルへのメッセージレベルがわりあてられている。 手を加えていないカーネルのデフォルトのコンソールへのメッセージレベルは 7 に設定されている。7 よりも小さい(つまり高い)優先順位レベルを持つメッ セージはコンソールに出力される。 レベル 7 の優先順位を持つメッセージは `debug' メッセージとみなされ、従っ て、コンソールには出力されない。特にマルチユーザ環境における、多くのシ ステム管理者は全てのカーネルメッセージを klogd により管理させ、ファ イルか syslogd デーモンに渡したいと思うだろう。そうすれば、プ リンタの用紙切れとかディスクの交換検出のような`わずらわしい'メッセージ のコンソールへの出力が避けられる。 特に指示しない場合の klogd デーモンの動作は panic を除くすべてのカーネルメッセ ージのコンソールへの出力を抑制している。-c スイッチがこの動作の 変更に利用できる。-c スイッチの引数にはコンソールへ出力すべきメッ セージの優先順位レベルを指定する。指示される数字「よりも小さい」優先順 位値を持つメッセージがコンソールへ出力される、という点に注意すること。

    たとえば、優先順位値が 3 (KERN_ERR) かそれよりも重要なすべてのメッセージをコンソールに出力するためには、次 のコマンドを実行する:

    	klogd -c 4

カーネルメッセージの(優先順位の)数値は、カーネルのソースコードが インストールされているのであれば、 /usr/include/linux にある kernel.h ファイルで定義されている。これらの数値は /usr/include/sys サブディレクトリにある syslog.h ファイルでの優先順位値の定義に対応している。 klogd デーモンはカーネルメッセージを読み出す 'ワンショット' モードも利 用可能である。ワンショットモードはコマンドラインの -o スイッチ で指示される。その出力は syslogd デーモンに渡されるか -f スイッ チが指定されていれば代りのファイルに書き出される。

    たとえば、システムがブートした際のカーネルメッセージを全て読み出して、 それを kenl.msg という名前のファイルに記録するには次のコマンドを実行す る。

    	klogd -o -f ./krnl.msg

カーネルアドレスの解決
klogd はその実行時にカーネルのシンボルテーブルが利用可能であれば、カー ネルの数値表現のアドレスからそれらを示すシンボルに変換することもできる。 シンボルテーブルはコマンドラインの -k スイッチを用いて指定する。 シンボルファイルが明示されない場合は、次の順番でファイルを探す:
/boot/System.map
/System.map
/usr/src/linux/System.map
カーネル 1.3.43 のシステムマップから、ヴァージョン情報も提供されるよう になっている。ヴァージョン情報はシンボルテーブルのリストを解析検索する 際に利用される。この機能は(カーネルの)安定版と先進版の両方で提供されて いるので(その判別に)役に立つ。 たとえば、安定版のカーネルはそのマップファイルを /boot/System.map に持っ ている。もし先進版のカーネルが /usr/src/linux の `標準の' 配置でコンパ イルされているのであれば、システムマップは /usr/src/linux/System.map に存在する。klogd は先進版のもとで起動する時には /usr/src/linux/System.map マップファイル を優先して利用し、 /boot/System.map マップファイルは無視する。 1.3.43 以降の最近のカーネルでは klogd がきちんと理解し、変換できるように 重要なカーネルアドレスは適切に整列されている。それ以前のカーネルはカー ネルのソースコードへのパッチが必要であり、そのパッチは sysklogd のソー スコードと共に提供されている。

シグナルの処理
klogd は以下の六種類のシグナルに反応する: SIGHUP、 SIGINT、 SIGKILL、 SIGTERM、 SIGTSTP、SIGCONT このうち SIGINT、 SIGKILL、 SIGTERM、 SIGHUP の各シグナルはデーモンにカーネルログの生成源を閉じさせ、適切に終了させ る。 SIGTSTPと SICONT の両シグナルはカーネルロギングの開始と終了のために利用される。 SIGTSTP シグナルを受信するとデーモンはそのログの生成源を閉じ、アイドルループに 突入する。その次に SIGCONT を受信するとデーモンは初期化を実行したのち、その入力源を再度選択し実行 を再開する。 SIGSTOPと SIGCONT の組合せは無停止でカーネルログの入力源を再選択させることができる。例え ば、/proc ファイルシステムの利用を解除するには次の順番でコマンド を実行すればよい:

# kill -TSTP pid
# umount /proc
# kill -CONT pid

LOG_INFO 優先順位を持つシステムログがその停止/再開を記録する。

ファイル
/proc/kmsg
    klogd の記録するカーネルメッセージ源の一つ
/var/run/klogd.pid
    klogd のプロセス id が記録されているファイル
/System.map, /usr/src/linux/System.map
    カーネルシステムマップの既定位置。

バグ
多分、沢山。整理されたコンテキスト diff を送ってくれれば歓迎します。

著者
klogd のオリジナルは Steve Lord (lord@crya.com)によって書かれ、Greg Wettstein が多くの改善を施した。
Dr. Greg Wettstein (greg@wind.rmcc.com)
Enjellic Systems Development

"Oncology Research Divsion Computing Facility
Roger Maris Cancer Center
Fargo, ND 58122