「Netconsole」の版間の差分
(en:Netconsoleへの転送ページ) |
|||
1行目: | 1行目: | ||
+ | [[Category:カーネル]] |
||
− | #redirect[[en:Netconsole]] |
||
+ | [[Category:ネットワーク]] |
||
+ | [[en:Netconsole]] |
||
+ | [[ru:Netconsole]] |
||
+ | [[zh-CN:Netconsole]] |
||
+ | '''netconsole''' はカーネルのログメッセージ (dmesg) をネットワークを通して他のコンピュータに送信するカーネルモジュールです。ユーザー空間は使いません (例: syslogd)。"netconsole" という名前は紛らわしいですが"コンソール"ではなく、実際は遠隔ログサービスに似ています。 |
||
+ | |||
+ | ビルトインまたはモジュールとして使うことができます。ビルトインの ''netconsole'' は NIC カードが立ち上がって指定したインターフェイスが使えるようになったらすぐに初期化されます。モジュールは主としてヘッドレスマシンからカーネルパニックの出力をキャプチャするのに使います。もしくはユーザー空間が機能しなくなった場合に用います。 |
||
+ | |||
+ | ドキュメントは Linux のカーネルツリー [https://www.kernel.org/doc/Documentation/networking/netconsole.txt Documentation/networking/netconsole.txt] にあります。 |
||
+ | |||
+ | == センダーの設定 == |
||
+ | |||
+ | === ビルトイン設定 === |
||
+ | |||
+ | Netconsole は以下のように {{ic|netconsole}} [[カーネルパラメータ]]で設定することができます: |
||
+ | |||
+ | netconsole=[src-port]@[src-ip]/[<dev>],[tgt-port]@<tgt-ip>/[tgt-macaddr] |
||
+ | |||
+ | それぞれのフィールドの意味は: |
||
+ | |||
+ | * {{ic|src-port}} — UDP パケットのソース (デフォルトは 6665) |
||
+ | * {{ic|src-ip}} — 使用するソース IP (インターフェイスアドレス) |
||
+ | * {{ic|dev}} — ネットワークインターフェイス (eth0) |
||
+ | * {{ic|tgt-port}} — ログエージェントのポート (6666) |
||
+ | * {{ic|tgt-ip}} — ログエージェントの IP アドレス |
||
+ | * {{ic|tgt-macaddr}} — ログエージェントのイーサネット MAC アドレス (broadcast) |
||
+ | |||
+ | 例: |
||
+ | |||
+ | netconsole=6665@192.168.1.28/eth0,6666@192.168.1.19/00:13:32:20:r9:a5' |
||
+ | |||
+ | {{Note|MAC アドレスは任意ですが、スラッシュは必要です: {{ic|...,6666@192.168.1.19/}}。}} |
||
+ | |||
+ | ログレベルは {{ic|loglevel}} カーネルパラメータで設定することができます、例: |
||
+ | |||
+ | loglevel=7 |
||
+ | |||
+ | === ランタイム設定 === |
||
+ | |||
+ | Netconsole は起動後に''カーネルモジュール''として手動でロードしたり、モジュール設定によって起動時に自動的にロードさせることができます (詳しくは[[カーネルモジュール]]を参照)。 |
||
+ | |||
+ | 起動後に手動で {{ic|netconsole}} モジュールをロードするには: |
||
+ | |||
+ | {{bc|<nowiki> |
||
+ | # set log level for kernel messages |
||
+ | dmesg -n 8 |
||
+ | |||
+ | modprobe configfs |
||
+ | modprobe netconsole |
||
+ | mount none -t configfs /sys/kernel/config |
||
+ | |||
+ | # 'netconsole' dir is auto created if the module is loaded |
||
+ | mkdir /sys/kernel/config/netconsole/target1 |
||
+ | cd /sys/kernel/config/netconsole/target1 |
||
+ | |||
+ | # set local IP address |
||
+ | echo 192.168.0.111 > local_ip |
||
+ | # set destination IP address |
||
+ | echo 192.168.0.17 > remote_ip |
||
+ | # set local network device name (find it trough ifconfig, examples: eth0, eno1, wlan0) |
||
+ | echo eno1 > dev_name |
||
+ | # find destination MAC address |
||
+ | arping $(cat remote_ip) -f | grep -o ..:..:..:..:..:.. > remote_mac |
||
+ | |||
+ | echo 1 > enabled |
||
+ | </nowiki>}} |
||
+ | |||
+ | これで Netconsole が設定されます。確認するには、{{ic|<nowiki>dmesg | tail</nowiki>}} を実行してください。"netconsole: network logging started" と表示されるはずです。利用可能なログレベルは {{ic|dmesg -h}} を実行することで確認できます。 |
||
+ | |||
+ | == レシーバの設定 == |
||
+ | |||
+ | [[公式リポジトリ]]から {{pkg|gnu-netcat}} または {{pkg|socat}} をインストールしてください。 |
||
+ | |||
+ | nc -u -l 6666 |
||
+ | もしくは: |
||
+ | nc -u -l -p 6666 |
||
+ | |||
+ | ロギングは ''syslog-ng'' など Arch Linux で設定されたロガーによって行われるため、利用可能なログレベル (出力の詳細) はロガーのドキュメントで定義され、ログタイプによって異なる可能性があります。カーネルランタイムに ''netconsole'' パラメータを指定することで (設定ファイルは必要ありません)、監視する PC で2つの ''netconsole'' インスタンスを起動して (片方は出力を読み取り、片方は入力を読み取る)、ランタイム設定のようにログを取る PC やデバイスのインスタンスを再起動できます: |
||
+ | |||
+ | # set log level for kernel messages |
||
+ | dmesg -n 8 |
||
+ | |||
+ | netconsole=6666@192.168.1.28/eth0,6666@192.168.1.19/00:13:32:20:r9:a5 |
||
+ | |||
+ | {{Note|MAC アドレスは任意です。}} |
||
+ | |||
+ | nc -l -u -p 6666 & |
||
+ | nc -u 192.168.1.28 6666 |
||
+ | |||
+ | # socat as alternative to nc in one command |
||
+ | socat - udp4-datagram:192.168.1.28:6666,bind=6666 |
||
+ | |||
+ | ''Netconsole'' でデータを監視・入力するためには、PC やルーターのファイアウォールを無効化して、ルーターの転送ポートを適切に設定する必要があります。netconsole を [http://archlinuxarm.org/forum/viewtopic.php?f=18&t=3355 別のサブネット] でセットアップする場合は柔軟な設定をすることができ、別のネットワーク IP にデバイスを移動してもクラッシュしませんが、イーサネットインターフェイスにエイリアスを設定する [http://archlinuxarm.org/platforms/armv5/seagate-goflex-home#qt-platform_tabs-ui-tabs3 複雑な設定] をレシーバにする必要があります。 |
||
+ | |||
+ | == 参照 == |
||
+ | |||
+ | * [[ブートデバッグ#netconsole]] |
2015年11月28日 (土) 15:02時点における版
netconsole はカーネルのログメッセージ (dmesg) をネットワークを通して他のコンピュータに送信するカーネルモジュールです。ユーザー空間は使いません (例: syslogd)。"netconsole" という名前は紛らわしいですが"コンソール"ではなく、実際は遠隔ログサービスに似ています。
ビルトインまたはモジュールとして使うことができます。ビルトインの netconsole は NIC カードが立ち上がって指定したインターフェイスが使えるようになったらすぐに初期化されます。モジュールは主としてヘッドレスマシンからカーネルパニックの出力をキャプチャするのに使います。もしくはユーザー空間が機能しなくなった場合に用います。
ドキュメントは Linux のカーネルツリー Documentation/networking/netconsole.txt にあります。
センダーの設定
ビルトイン設定
Netconsole は以下のように netconsole
カーネルパラメータで設定することができます:
netconsole=[src-port]@[src-ip]/[<dev>],[tgt-port]@<tgt-ip>/[tgt-macaddr]
それぞれのフィールドの意味は:
src-port
— UDP パケットのソース (デフォルトは 6665)src-ip
— 使用するソース IP (インターフェイスアドレス)dev
— ネットワークインターフェイス (eth0)tgt-port
— ログエージェントのポート (6666)tgt-ip
— ログエージェントの IP アドレスtgt-macaddr
— ログエージェントのイーサネット MAC アドレス (broadcast)
例:
netconsole=6665@192.168.1.28/eth0,6666@192.168.1.19/00:13:32:20:r9:a5'
ログレベルは loglevel
カーネルパラメータで設定することができます、例:
loglevel=7
ランタイム設定
Netconsole は起動後にカーネルモジュールとして手動でロードしたり、モジュール設定によって起動時に自動的にロードさせることができます (詳しくはカーネルモジュールを参照)。
起動後に手動で netconsole
モジュールをロードするには:
# set log level for kernel messages dmesg -n 8 modprobe configfs modprobe netconsole mount none -t configfs /sys/kernel/config # 'netconsole' dir is auto created if the module is loaded mkdir /sys/kernel/config/netconsole/target1 cd /sys/kernel/config/netconsole/target1 # set local IP address echo 192.168.0.111 > local_ip # set destination IP address echo 192.168.0.17 > remote_ip # set local network device name (find it trough ifconfig, examples: eth0, eno1, wlan0) echo eno1 > dev_name # find destination MAC address arping $(cat remote_ip) -f | grep -o ..:..:..:..:..:.. > remote_mac echo 1 > enabled
これで Netconsole が設定されます。確認するには、dmesg | tail
を実行してください。"netconsole: network logging started" と表示されるはずです。利用可能なログレベルは dmesg -h
を実行することで確認できます。
レシーバの設定
公式リポジトリから gnu-netcat または socat をインストールしてください。
nc -u -l 6666
もしくは:
nc -u -l -p 6666
ロギングは syslog-ng など Arch Linux で設定されたロガーによって行われるため、利用可能なログレベル (出力の詳細) はロガーのドキュメントで定義され、ログタイプによって異なる可能性があります。カーネルランタイムに netconsole パラメータを指定することで (設定ファイルは必要ありません)、監視する PC で2つの netconsole インスタンスを起動して (片方は出力を読み取り、片方は入力を読み取る)、ランタイム設定のようにログを取る PC やデバイスのインスタンスを再起動できます:
# set log level for kernel messages dmesg -n 8 netconsole=6666@192.168.1.28/eth0,6666@192.168.1.19/00:13:32:20:r9:a5
nc -l -u -p 6666 & nc -u 192.168.1.28 6666 # socat as alternative to nc in one command socat - udp4-datagram:192.168.1.28:6666,bind=6666
Netconsole でデータを監視・入力するためには、PC やルーターのファイアウォールを無効化して、ルーターの転送ポートを適切に設定する必要があります。netconsole を 別のサブネット でセットアップする場合は柔軟な設定をすることができ、別のネットワーク IP にデバイスを移動してもクラッシュしませんが、イーサネットインターフェイスにエイリアスを設定する 複雑な設定 をレシーバにする必要があります。