CentOS4.4でsyslog-ngを使った時に、minilogdとの連携ではまりました orz
まず、minilogd は、syslogd や syslog-ng を止めたときや、ブート時でまだ syslogd や syslog-ng が立ち上がっていない時に、代わりに自動的に立ち上がるデーモンです。
メッセージを受信して仮想メモリーにログを保存しておいてくれます。
syslogd や syslog-ng が起動すると、syslogd や syslog-ng は /dev/log を経由して minilogd が仮想メモリーに保存したログメッセージを読み取って HDD 上のログファイルに保存します。
/dev/log は UNIXソケットドメインです。
minilogd は重要なデーモンです。
syslogd は特に気にすることなく minilogd と連携してくれます。
さて、大抵のウェブページを見ていると、syslog-ng の設定に関して、
source s_sys {
pipe ("/proc/kmsg" log_prefix("kernel: "));
unix-stream ("/dev/log");
internal();
};
この様に書かれています。
FC6のsyslo-ngのRPMをインストールした場合も同様です。
で、大抵、Linuxの場合は /dev/log はストリームソケットだから、unix-stream()を使いなさいと書かれています。で、上記はその様に設定されています。
そして、*BSDの場合はデータグラムソケットだから、unix-dgram()を使いなさいと書いてあります。
ところが、ボクのCentOS4.4の環境だと、syslog-ngを止めている間にminilogdが受信したログを、syslog-ngを起動してもsyslog-ngが読み取ってくれません orz
ブート時のブートログはちゃんと出力されているのでそこは /dev/log が読み取って書いているようなのですが、一旦起動したとはなぜか読んでくれません。なぜ~~(?_?)
結果、syslog-ngの設定を以下のように変更したら、syslog-ng 停止中に受信したログもsyslog-ng起動後に出力するようになりました。
source s_sys {
pipe ("/proc/kmsg" log_prefix("kernel: "));
unix-stream ("/dev/log");
unix-dgram ("/dev/log");
internal();
};
データグラムソケットを使っているということでしょうか。
これが正しい解決策なのかどうか分かりませんが、とりあえず、これで期待した動きになりました。
ブート時のログもきちんと記録されるし、minilogdとの連携も問題ないようです。
netstat -an コマンドで確認したら、/dev/log は確かに DGRAM ってなってますねf(^^;)
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 12 [ ] DGRAM 32476784 /dev/log
Linuxは、昔は /dev/log にストリームソケットを使っていたけど、DoSアタックなどのセキュリティ的な事情からデータグラムソケットを使うようになった、というような記事を読みました。(元記事は英語だったので私の訳が正しいのか不安ですが・・・)
こんなこと常識なのかもしれませんが、私はちょとはまりました(苦笑)
/dev/log についてはここが勉強になります。
・99syslog - syslog() 及び syslogd の考察

コメント (1)
最近知ったんだけれど、CentOS5やFC4にはminilogdがない。
ビックリした。
どうやらinitscripts-8にはminilogdが入ってないらしい。
CentOS4はinitscripts-7.xで、FC4とCentOS5はinitscripts-8.xがバンドルされている。
initscriptsパッケージのchangelogを見てみると、
* Tue Jan 04 2005 Bill Nottingham <notting@redhat.com> 8.02-1
- remove initlog, minilogd
と書いてある。
随分昔に削除されてるなぁ。
minilogdがない場合はどうしたらいいんだろう?
代わりのプログラムがあるのだろうか?
カーネルが肩代わりしてくれるわけでも無いようだし・・・
教えて偉い人
投稿者: hagy | 2008年05月08日 22:22
日時: 2008年05月08日 22:22