tcpdumpでFargate内のトラフィックを確認する

はじめに

複数コンテナを起動する構成のアプリケーションを構築するときに、障害に対する原因の切り分け方を覚えておくと便利です。

例えばRuby on Railsなどでアプリケーションコンテナを起動していていて、その前段にNginxなどでWebサーバコンテナを起動しているような構成を考えてみて下さい。

いざAWSにデプロイしてアクセスしてみたら500エラーのレスポンスしか返ってこない場合、どっちのコンテナに原因があるのかパッと見わからないと思います。あるいはロードバランサーなどAWSの設定にミスがある可能性もあります。

こういった時にNginxコンテナに入りtcpdumpでパケットキャプチャして死活監視をするだけで、原因を絞る事ができるのです。今回はFargateインスタンス内でtcpdumpによるパケットキャプチャを行う方法をまとめました。

※Fargateインスタンスとは言いましたが、Fargateに限らずLinux系のOSであれば使える方法です。

準備

各インスタンスは最小構成になっているので、特に設定を加えていない場合はほとんどのコマンドが使用出来ません。まずはWebサーバコンテナのインスタンスに接続して必要なパッケージをインストールしていきます。

※前回Fargateへの接続を簡単にする方法をまとめているので、興味のある方はこちらもご参照下さい。

パケットキャプチャ用にtcpdumpを、また標準設定だとifconfigも使えないのでnet-toolsもインストールします。

$ apt-get install net-tools tcpdump

tcpdumpでパケットキャプチャしてみる

準備が出来たら下記のコマンドを実行して下さい。これは80番のポートで受信するパケットをキャプチャするコマンドです。

$ tcpdump -i eth1 src port 80

上記のコマンドを実行してから、アプリケーションにアクセスしてみてログが流れれば、Nginx(Webサーバコンテナ)は起動していてAWSの設定も概ね完了しているということになります。

つまりこの状態でも500エラーレスポンスが返るのはアプリケーションコンテナの方に問題があるという見方が出来るのです。tcpdumpコマンドを使うとこのような原因の切り分けを行うことが可能になります。

ちなみに-i eth1で指定しているのはtcpdumpが標準だとeth0を見にいってしまうからです。自分の環境の場合AWSリソースはeth1をNWインタフェースに割り当てていたので、オプションを付与しています。

もしパケットをキャプチャ出来ない場合はifconfigで使用しているNWインタフェースと、キャプチャしているNWインタフェースが合致していることを確認してみて下さい。

以上です。

終わりに

障害が起こった時に原因を切り分けて考えることは非常に大切です。
焦っていたり調べながらだとつい忘れてしまいますが、何処まで上手くいっていて何処でエラーが起こっているのかをしつこいくらい意識しなければいけないと思う今日このごろです。

コメントを残す

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

CAPTCHA