syslog起動以前のログのリモート監視 その1

UNIXでは,ログ出力は,syslogを利用するのが一般的,というか,それ以外でのログ管理は,ほとんど考えられていない.syslogを使えば,発生したログをネットワーク転送できるので,ログサーバを用意して,リモートでのログ監視も容易である.ちなみに,標準のsyslogではUDPで送信するので,アクセスが集中すると取りこぼしが発生する.そのため,syslog-ngのような実装を利用すれば,TCPで送信されるので,多い日も安心である.参考 http://www.atmarkit.co.jp/fsecurity/rensai/unix_sec09/unix_sec01.html

しかし,syslogは普通のプロセスなので,syslogが起動されるまでのログを転送することはできない.Linux(Redhat系)の起動プロセスは,一般的に,grub→kernel→init→rcスクリプトという順序となっており,syslogは,最後のrcスクリプトの中でも終りの方で起動される.そのため,ディスクがマウントできない場合とか,一部のデバイスがおかしいというような,rcスクリプトの前のほうで出力されるエラーメッセージは,syslogでリモートに転送することはできない.このようなエラーは,アプリケーションなり,ほかのデーモンなりが異常な動作をして,初めて発見されることとなる.

syslog起動以前のログのうち,kernelが出力するログは,dmesgでkernel ring bufferなる領域を見ることで確認できるが,rcスクリプトが表示するログは,デフォルトではコンソールを直接見なければならない.そのための手段としては,kernelがinitを起動するときに,それらのログをデフォルトの/dev/consoleではなく,他に出力するようにする方法がある.

しかし,initが起動したころは,プロセスは何もないし,ネットワークも起きていず,ファイルシステムすらread-onlyなので,ほとんどどこにも出力しようがない.

というところまで,考えたところで,今日はおしまい.