2011年1月16日日曜日

CentOS 5 で netconsole

CentOS 5 で netconsole を使う際の設定方法と注意点のメモです。

まずは、ログサーバ側の syslogd の設定方法。
/etc/sysconfig/syslogd の SYSLOGD_OPTIONS を次のように設定します。
# Options to syslogd
# -m 0 disables 'MARK' messages.
# -r enables logging from remote machines
# -x disables DNS lookups on messages recieved with -r
# See syslogd(8) for more details
SYSLOGD_OPTIONS="-m 0 -r -x"
リモートからメッセージを受けるには、-r オプションだけでいいのですが、DNS へのアクセスを避けたい場合は、-x オプションも設定します。

次に netconsole 側の設定方法。CentOS 5 の場合は、/etc/sysconfig/netconsole を環境に合わせて設定()して、netconsole サービスを start すれば良い。
# This is the configuration file for the netconsole service.  By starting
# this service you allow a remote syslog daemon to record console output
# from this system.

# The local port number that the netconsole module will use
# LOCALPORT=6666

# The ethernet device to send console messages out of (only set this if it
# can't be automatically determined)
DEV=eth1                   ※

# The IP address of the remote syslog server to send messages to
SYSLOGADDR=192.168.11.222  ※

# The listening port of the remote syslog daemon
# SYSLOGPORT=514

# The MAC address of the remote syslog server (only set this if it can't
# be automatically determined)
SYSLOGMACADDR=00:0C:29:86:DC:7A  ※
netconsole サービスを起動します。
# service netconsole start
Initializing netconsole                                    [  OK  ]
# dmesg | tail -7
netconsole: local port 6666
netconsole: local IP 192.168.163.222
netconsole: interface eth1
netconsole: remote port 514
netconsole: remote IP 192.168.11.222
netconsole: remote ethernet address 00:0c:29:86:dc:7a
netconsole: network logging started
dmesg の出力から使用される IP アドレスとポートを確認できます。

最後に、動作確認ですが、次のように sysrq-trigger を使ってカーネルにメッセージを生成させればよいかと思います。
# echo p > /proc/sysrq-trigger 
# dmesg | tail -1
SysRq : Show Regs
ログサーバ側には、次のように出力されます。
# tail -2 /var/log/messages
Jan 16 19:59:29 192.168.163.222 SysRq : 
Jan 16 19:59:29 192.168.163.222 Show Regs
このように、ローカルでは1行で出力されるメッセージが、ログサーバ側には2行に分割されて出力されてしまいます。これは、netconsole の場合の特徴で、カーネル内でメッセージ出力の際に呼ばれる printk 関数毎に UDP パケットが生成/転送されるためです。SysRq p の対応コードを読めば printk が2回呼ばれていることが分かります。参照するカーネルソースファイルは、drivers/char/sysrq.c です。

注意点としては、以下が挙げられます。

●ローカルでは1行で出力されるメッセージが2行以上に分割される場合がある。

●残念ながら bonding インタフェースは利用できない。
 →Fedora 14 でも試してみましたが、やはり NG でした。bonding モジュールに netpoll サポートが無いためのようですが、実装は困難なのかもしれません。あまりニーズも無い?

●設定を行う際、ログサーバ側の iptables にも注意する。
 →当然ながら syslog 用ポート 514/udp が許可されている必要がある。

●ルータ越えを行う場合は、SYSLOGMACADDR にルータの MAC を設定する必要がある。
 →私の環境では、ルータ越えは動作しました。そもそも動作しないということはないようです。

2011-02-05追記
これら注意点から、普通は商用サーバでは使えないものと思っています。どうしてもダンプ(kdump)も採取できないような障害に遭遇して情報採取(SysRq 等)が必要な場合は、最も確実なシリアルコンソールを使うのが良いと思う。

0 件のコメント:

コメントを投稿

人気ブログランキングへ にほんブログ村 IT技術ブログへ