netconsoleによる障害時の情報採取について
[概 要]
なお、本ドキュメントは、Asianux Server 3 x86版(kernel-2.6.18-8.10AX)を前提としています。
Asianux Server 3 SP1以降では一部設定方法が異なります。詳細は本文中に記載しています。
kernel.panic_on_oops = 1
設定値が 0 の場合はそのまま処理を継続しようとし、1 の場合はカーネルパニックを発生させます。
Asianux Server 3 ではデフォルトで 1 が設定されています。
kernel.panic = 10
Asianux Server 3 ではデフォルトで 10 が設定されています。
netconsoleモジュールは、printk メッセージ(コンソールに出力されるメッセージ)をUDP経由でリモートマシンへ記録します。
使用OS:Asianux Server 3 (x86版)
IPアドレス: 10.1.1.100
使用OS:Asianux Server 3 (x86版)
IPアドレス: 10.1.1.200
■ 送信側設定
1.netconsoleモジュールをロードします。
netconsole は下記のフォーマットで文字列設定パラメータ "netconsole" を扱います。
netconsole=[src-port]@[src-ip]/[<dev>],[tgt-port]@<tgt-ip>/[tgt-macaddr]
src-port…送信元ポート番号
src-ip…送信元IPアドレス
dev…ネットワークデバイス
tgt-port…受信側ポート番号
tgt-ip…受信側IPアドレス
tgt-macaddr…受信側MACアドレス
※以下の設定では、ログ受信側リモートマシンのsyslogへ送信します。ポート番号はUDP 514(syslog)を指定します。
# modprobe netconsole netconsole=6665@10.1.1.100/eth0,514@10.1.0.200/00:0C:29:45:EB:FA
2.netconsoleモジュールがロードされたことを確認します。
# lsmod | grep netconsole
送信元の/var/log/messagesには以下のようなメッセージが表示されます。
Feb 13 17:39:36 hostname kernel: netconsole: local port 6665
Feb 13 17:39:36 hostname kernel: netconsole: local IP 10.1.1.100
Feb 13 17:39:36 hostname kernel: netconsole: interface eth0
Feb 13 17:39:36 hostname kernel: netconsole: remote port 514
Feb 13 17:39:36 hostname kernel: netconsole: remote IP 10.1.0.200
Feb 13 17:39:36 hostname kernel: netconsole: remote ethernet address 00:0c:29:45:eb:fa
Feb 13 17:39:36 hostname kernel: netconsole: network logging started
(補足)netconsoleモジュールはOS起動時に自動でロードされません。OS起動時にnetconsoleをロードさせたい場合には、/etc/sysconfig/network-scripts/ifcfg-ethXファイルまたは/etc/rc.localファイルに手順1のコマンドを記述しておきます。
Asianux Server 3 SP1以降の場合は/etc/sysconfig/netconsoleにパラメータの記述をします。
LOCALPORT=6555
DEV=eth0
SYSLOGADDR=10.1.0.200
SYSLOGPORT=514
SYSLOGMACADDR=00:0C:29:45:EB:FA
Asianux Server 3 SP1以降においてnetconsoleをOS起動時に自動でロードさせたい場合は、chkconfigコマンドでnetconsoleサービスを有効にします。
# chkconfig netconsole on
# chkconfig --list netconsole
netconsole 0:off 1:off 2:on 3:on 4:on 5:on 6:off
■ 受信側設定
1.受信側のsyslogが、リモートマシンのログを受信できるように、/etc/sysconfig/syslogファイルの"SYSLOGD_OPTIONS"に、"-r”オプションを追加します。
[変更前]
SYSLOGD_OPTIONS="-m 0"
[変更後]
SYSLOGD_OPTIONS="-m 0 -r"
2.変更を保存後、syslogdを再起動します。
# service syslog restart
■ 出力テスト
送信側コンソール画面に出力されたカーネルメッセージが、受信側のsyslogへ転送されるか確認します。
本ドキュメントではSysRq keyを使用して、コンソール画面にカーネルメッセージを出力します。
1.送信側マシン上で、SysRq keyを有効にするために、/etc/sysctl.confを以下のように変更します。
[変更前]
kernel.sysrq = 0
[変更後]
kernel.sysrq = 1
設定を有効にするために、以下のコマンドを実行します。
# sysctl -p
2.以下のコマンドを実行し、コンソール画面にカーネルメッセージを出力します。
# echo h > /proc/sysrq-trigger
3.ログ受信用リモートマシンの/var/log/messagesに、以下のようなメッセージが出力されたことを確認します。(hostnameには送信元サーバのホスト名が表示されます)
Feb 13 17:39:36 hostname SysRq :
Feb 13 17:39:36 hostname HELP :
Feb 13 17:39:36 hostname loglevel0-8
Feb 13 17:39:36 hostname reBoot
...略
Feb 13 17:39:36 hostname Unmount
Feb 13 17:39:36 hostname shoWcpus
[注意事項]
本ドキュメントは、各ソフトウェア開発元の情報およびマニュアル等を元にした参考情報です。
本ドキュメントの内容は、予告なしに変更される場合があります。
本ドキュメントは、限られた評価環境における検証結果をもとに作成しており、全ての環境での動作を保証するものではありません。
本ドキュメントの内容に基づき、導入、設定、運用を行なったことにより損害が生じた場合でも、弊社はその損害についての責任を負いません。あくまでお客様のご判断にてご使用ください。
・2011年 1月 7日 SP1以降の設定方法を追記
・2008年 3月 3日 新規作成