socatを使ってみる

複数台のWebサーバ(Apache)が動作している環境で、 アクセスログを簡単に集約できないか調べていた。 アクセスログを、netcat(ncコマンド)を利用して、UDPパケットとしてブロードキャストに投げ、 それをログ収集サーバが受け取ることができないか調べていたが、CentOS付属のnetcatでは出来なかった。 ※詳しくは調べていないが、UDPで待ちうけるように設定した場合、一回通信が開始されると、その待受けポートがなくなってしまう模様。 代わりのものを調べていたら、socatというnetcatの高機能版のようなツールがあった。 TCP/UDPだけではなく、IP,SCTP,PTY,EXEC等多数のプロトコルを扱える。 EPELにsocatパッケージとして登録されている。 [code] # yum install –enablerepo=epel socat [/code] ●利用方法 サーバ側は以下のようにして待受けポートを指定。 [code] # socat UDP-LISTEN:6666 STDOUT [/code] クライアント側は以下のようにして宛先サーバと宛先ポートを指定する。 [code] # socat STDIN UDP-SENDTO:localhost:6666 [/code] すると、クライアント・サーバ間で任意の通信のやり取りが出来る。 ここで、宛先サーバとしてブロードキャストアドレスを指定してあげれば、マルチキャストのように利用できる。 ※ブロードキャストアドレスを指定するには broadcastオプションが必要。 ※クライアントからサーバ方向への片方向通信に制限するには、サーバ側、クライアント側のどちらかに-uオプションをつける。 ※複数回の接続を受け付けるにはforkオプションが必要。 サーバ側 [code] # socat -u UDP-LISTEN:6666,fork STDOUT [/code] クライアント側 [code] # socat -u STDIN UDP-SENDTO:{ブロードキャストアドレス}:6666,broadcast [/code] socatはシリアル回線からの入出力も可能なため、netconsoleの代わりが出来る。 netconsoleではbondingデバイスで利用できない制限があるが、socatにはその制限がない。 通信負荷がかかるので、なるべくならL3スイッチなどでブロードキャストドメインを小さくしたほうがいいかと思う。
カテゴリー: Technology パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)