1.はじめに
EC2インスタンスで、netconsoleを使ってカーネルメッセージを別サーバに飛ばして見る方法のメモです。ncatを利用しnetconsoleサーバを一時的に作る方法と、syslogサーバに飛ばす方法の、2つを説明します。*1
2.前提
3.netconsole serverを一時的に立てて取得
デバックや再現テストとかで一時的に使いたいという場合はncatコマンドで簡易的なサーバを立ててカーネルメッセージを取得することができます。以下の説明の構成概要は以下の通りです。
3.1 netconsole serverの準備
(1) security group設定
今回の例では、UDPの6666port で受診しますので、以下のようなInbound許可ルールを持つセキュリティーグループを設定して、netconsole serverインスタンスにアタッチします。
方向 | タイプ | プロトコル | ポート | ソース |
---|---|---|---|---|
Inbound | custom UDPルール | UDP | 6666 | 172.31.37.0/24 |
(2) ncatのパッケージインストール
ncatコマンドは、nmap-ncatパッケージに含まれていますので、このパッケージをインストールします。
sudo yum -y install nmap-ncat
(3) ifconfigでネット設定を確認
ncatコマンドでlistenするIPアドレスと、そのIPアドレスが割り当てられているMACアドレス(クライアントで利用)を控えます。
$ ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9001 inet 172.31.37.224 netmask 255.255.240.0 broadcast 172.31.47.255 inet6 fe80::410:9aff:feda:c3d2 prefixlen 64 scopeid 0x20<link> ether 06:10:9a:da:c3:d2 txqueuelen 1000 (Ethernet) RX packets 27150 bytes 35693608 (34.0 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 10838 bytes 805351 (786.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
今回の場合での必要情報は、以下になります。
3.2 netconsole client実行
カーネルメッセージを出力するサーバの設定です。netconsoleのカーネルモジュールにオプションをつけてローディングすればOKです。一時的な利用を想定して、netconsoleモジュールを手動でロードする手順にしています。
(1)クライアントのネット設定を確認
利用するIPアドレスと、そのIPアドレスが割り当てられているデバイス名を確認します。
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9001 inet 172.31.37.12 netmask 255.255.240.0 broadcast 172.31.47.255 inet6 fe80::4ca:cdff:fe50:cc8 prefixlen 64 scopeid 0x20<link> ether 06:ca:cd:50:0c:c8 txqueuelen 1000 (Ethernet) RX packets 26294 bytes 35430311 (33.7 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 2764 bytes 318056 (310.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
確認する情報は以下になります。
(2)netconsoleのローディング
modprobeコマンドを利用してnetconsoleカーネルモジュールをローディングします。"netconsole="以下はこのカーネルモジュールのオプション設定です。
sudo modprobe netconsole 'netconsole=6666@172.31.37.12/eth0,6666@172.31.37.224/06:10:9a:da:c3:d2'
netconsoleオプションの書式は以下の通りです。*3
netconsole=[src-port]@[src-ip]/[<dev>],[tgt-port]@<tgt-ip>/[tgt-macaddr]
4.syslog serverでカーネルメッセージを取得する
カーネルメッセージを定常的またはある程度の期間取得し続ける場合は、syslogサーバを立てて取得した方が良いかもしれません。ここではsyslogをUDPの514ポートでlistenする構成の手順を記載します。
4.1 rsyslogサーバの設定
(1)rsyslogにUDPでのListenを有効化
UDPの514番ポートでの受信ができるようにrsyslog.confを設定します。
/etc/rsyslog.conf:
# Provides UDP syslog reception $ModLoad imudp $UDPServerRun 514
(2)設定の有効化
rsyslogを再起動し、設定を有効化します。
$ sudo systemctl restart rsyslog
4.2 クライアント(netconsole)の設定
クライアント側は恒常的なメッセージ収集のため、サーバ起動時にnetconsoleが設定されるように"/etc/sysconfig/netconsole"に送信先となるsyslogサーバのIPアドレス設定を行います。
(1)送信先のsyslogサーバIPとポート設定
/etc/sysconfig/netconsole
# The IP address of the remote syslog server to send messages to SYSLOGADDR=172.31.37.224 # The listening port of the remote syslog daemon SYSLOGPORT=514
(2)netconsoleのサービスの再起動
netconsole.serviceを再起動し設定を反映させます。
またOS再起動後も反映されるようい"systemctl enable・・・"でサービスを有効化します。
$ sudo systemctl restart netconsole.service $ sudo systemctl enable netconsole.service