syslogd を debug モードで動かすコツ

各種機器のログを集約するサーバーを立てた時に、一部機器がどのファシリティ・レベルでログ飛ばしてくるのか判らなかったので、それを調べるために syslogd を debug モードで動かすことにした時のメモ。

環境は RHEL 5.9 ( syslogd 1.4.1 )

まず、syslogd の man を確認してみると…

# man syslogd
(snip)
-d デバッグモードを有効にする。
   このときデーモンは自身をバッググラウンドに推移させるための fork(2)を使用せずにフォアグラウンドに留まり、
   豊富なデバッグ情報を現在有効な tty へ出力する。
(snip)

とあり、/etc/sysconfig/syslog の SYSLOGD_OPTIONS に -d だけ追加すると、man に記載の通り、syslogd がフォアグランドを占拠してスクリプトがそこで止まる。

後続処理で起動されるはずの klogd とかは当然起動されない。

対策として、SYSLOGD_OPTIONS の末尾に & を追加してあげる事にする。

SYSLOGD_OPTIONS="-r -x -m 0 -d &"

これでとりあえず klogd も起動するし、通常の使い方 + debug という感じになったはず。

あとは、起動している syslogd のプロセスに SIGUSR1 シグナルを送れば、debug 出力が開始される。

# kill -USR1 [syslogd の PID]

※ -d 付きで起動すると、/var/run/syslogd.pid ファイルが生成されないので、PID は ps コマンド等で調査する。

このやり方だと一旦ターミナルを切ってしまうと出力が拾えなくなるので、ファイルとかにリダイレクトすればより確実だとは思いますが、一時的な利用ならこれでも十分なのでそこまで試してなかったりして…。