netconsoleによる障害時の情報採取について

[概  要]

本ドキュメントでは、カーネルパニック発生時にコンソールに出力されるOopsメッセージをnetconsoleモジュールを使用し、ネットワーク経由でリモートホストに転送する方法について説明します。

 

Oopsメッセージの採取にはシリアルコンソールを準備することが望ましいですが、不可能な場合、netconsoleを使用することで、Oopsメッセージを採取できる可能性が高くなります。

 

なお、本ドキュメントは、Asianux Server 3 x86(kernel-2.6.18-8.10AX)を前提としています。
Asianux Server 3 SP1以降では一部設定方法が異なります。詳細は本文中に記載しています。

 

 

[Oopsメッセージとは]
linuxカーネル内で、致命的な問題を検出した場合に出力するメッセージを指します。
Oopsメッセージには、問題の原因調査に必要なCPUのレジスタ情報やシステムコールのトレース情報が含まれています。

 

通常このメッセージはコンソール画面には出力されますが、ログには保存されません。
また、コンソールの1画面に収まらずにスクロールアウトした場合には、その部分の情報が欠けてしまい、原因調査が困難になります。

 

カーネルパニックの原因を調査するためには、パニック時にコンソールに出力されるメッセージをすべて採取する必要があり、そのためには事前に準備しておく必要があります。

 

[Oops発生時のカーネルの動作について]
Linuxでは、以下のカーネルパラメータの設定によって、Oopsメッセージが出力された場合にカーネルパニックを発生させ、自動的にシステムを再起動させることができます。

 

 

kernel.panic_on_oops = 1

 

 

本パラメータには、Oopsメッセージ出力時のカーネルの動作を指定します。

設定値が 0 の場合はそのまま処理を継続しようとし、1 の場合はカーネルパニックを発生させます。

Asianux Server 3 ではデフォルトで 1 が設定されています。

 

 

kernel.panic = 10

 

 

本パラメータには、カーネルパニック発生後、システムを再起動までの時間()を指定します。

Asianux Server 3 ではデフォルトで 10 が設定されています。

 

[netconsoleとは]

netconsoleモジュールは、printk メッセージ(コンソールに出力されるメッセージ)UDP経由でリモートマシンへ記録します。

netconsoleモジュールはクラッシュダンプを取得するものではありません。

 

シリアルコンソールが使用できない環境において、netconsoleを使用することでリモートマシンにOopsメッセージを保存できる可能性が高くなります。

 

[netconsole設定方法]
netconsoleを利用する場合、メッセージ送信側(netconsole)の他に、受信するリモートマシンが必要です。
本ドキュメントの動作環境は以下のとおりです。

 

(送信側マシン)

使用OSAsianux Server 3 (x86)

使用kernelkernel-2.6.18-8.10AX

IPアドレス: 10.1.1.100

 

(ログ受信用リモートマシン)

使用OSAsianux 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以降においてnetconsoleOS起動時に自動でロードさせたい場合は、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日 新規作成