Twilioブログ

502エラー発生時の問題切り分け方法

haruka.sugimoto

初めまして。今年2月からTwilioチームサポートを担当している杉本です。

毎年恒例のAdvent Calender2日目を担当させて頂くことになりました。初めてのブログなので、何について書こうか迷っていたところ、多くのお客様からお問い合わせを頂いた502エラー発生時の対応方法について少しでも参考になればと思いこのサブジェクトに決めました。

Twilioを利用されている最中に突然に通話断が発生したり、一部の処理が正常に実行されていなかった事が後に発覚したりした時に、エラーを確認すると502エラーが発生していたというケースを過去に経験された方々も少なくないと思います。

502エラーは、通信時にサーバー間で通信の不具合などが発生し、タイムアウト後エラーが返される時に表示されるコードになります。

Twilioのようにクラウドに環境を設けているサービスを利用されている場合、パブリックインターネットや利用されているネットワーク環境、およびTwilio ネットワーク環境のように複数の通信要因が加わるので、発生箇所を特定するのは非常に困難な事ですが、発生した可能性がある箇所を切り分けることは可能です。どの箇所で発生している可能性があるかを特定出来れば、次に対処すべき手段を検討するのに役立ちます。

お客様からもしばしば502エラーのお問い合わせを頂きます。502エラーがTwilioシステムが返していることもあり、、このエラーがTwilioによる不具合や問題で発生したと感じられるお客様も多いかと思います。しかし、この502エラーは「お客様のWebサーバー(TwilioがアクションURLを叩く先)と通信ができなかった」ものすべてが含まれるため、必ずしもTwilioが原因であったことを示しません。

この記事では、502エラーを発生させた部位を切り分けるご案内をいたします。


■ステップ1:利用環境を調査


502エラーが発生したら、ご利用のTwilioアカウントで管理画面にログインし、502エラーが発生したコールやSMSのログ詳細を確認します。このとき叩かれたURLのWebサーバー環境で、この時間帯にWebサーバー負荷やネットワーク障害などの問題が発生していないかを確認します。

特に問題が確認出来なかった場合は、Webサーバー側のアクセスログとアプリケーションログを確認し、Twilioからアクセスが来たのか、来ている場合は実行されたアプリケーションの処理が正常に終了したかを確認します。処理が正常に実行されなかった場合、Twilioはこの応答を得られなかったために502エラーを出したという結論になります。そもそもアクセスが来ていなかった場合は、Twilioからお客様のWebサーバーまでのどこまで通信が届いたのかを調べる必要があります。


■ステップ2:URL間違えかどうか・Webサーバーのネットワーク要因かどうかの切り分け


同じURLへ別の手法(ブラウザやwgetコマンド等) を使ってアクセスしてください。ここでエラーになる、接続できない場合には、指定しているURLが間違えていると考えられます。アクセスできる場合は、時間帯をかえて複数回リクエストしてみます。この時、何回かに1度の割合で失敗する、ないしは、特定の時間で失敗する頻度があがる等の特徴が見られた場合、お客様のWebサーバーの負荷またはネットワーク要因であると切り分けできます。問題がない場合は、次のステップへ進みます。


■ステップ3:Webサーバー周辺の要因であるかどうかの切りわけ


ロードバランサをご利用の方、ダイナミックDNSをご利用の方は、それぞれこれらを抜きでアクセスできる手法で前述の切り分けを行います。WebサーバーとWebサーバーのネットワークに原因がなくても、ロードバランサやダイナミックDNSが通信を阻害する要因を持っていることがあります。ファイヤーウォールを設置している場合も、可能性の有無を切り分けてください。これらのコンポーネントが多段構成なっている場合、それぞれのコンポーネントのアクセスログを確認し、どこまで通信が通っているのかを確認します。例えば、以下のような構成の場合、

インターネット → ファイヤーウォール → ロードバランサ → Webサーバー

ファイヤーウォールへは当該URLのアクセスログがあるが、ロードバランサにはない、という場合、ファイヤーウォールが原因です。ロードバランサにはあるが、Webサーバーにはない、という場合はロードバランサが原因です。

お客様の環境へ通信が届いていない、つまり、上記の例でいえば、ファイヤーウォールにもアクセスが来ていない(ログが存在しない) 場合、Twilio と お客様ネットワーク に入る手前 で問題が発生していることになります。


■ステップ4:Twilioとお客様ネットワークの間で問題が発生している場合

Twilioのネットワーク外になるため、調査できる範囲が限られますが可能な範囲で追跡調査を行わせていただきます。以下の情報をお書き添えの上、お問い合わせフォームより調査依頼をお申し付けください。

・Accound SID

・502エラーが発生したコールやSMSの CallSID/MessageSID (管理画面からログをCSVでエクスポートしていただいても大丈夫です)

・発生頻度や発生傾向・特徴など

・このコールやSMSを利用している簡単なフローのご説明

・上記で切り分けを行っていただいた際の結果、デバッグログ等、お出しいただける情報や記録があれば合わせて添付してください。些細なものでも結構です、手がかりになることがあります。

502エラーの多くは、当サービスが管理できない外側のネットワークで発生するため、再現性がない事例のほうが多く、また一過性のものである場合、原因の特定が困難であるという性質がございます。対処療法になりますが、 fallbackURLをTwimlbinまたは現在メインでご利用のWebサーバーのネットワークとは別のネットワークにあるサブWebサーバー等で設定することを推奨します。 fallbackURL は、メインで指定しているURLへのアクセスが失敗した際に叩かれるURLです。これをご利用いただくことで、そもそもTwilioがURLを発行したのかしなかったのかの切り分けが可能となり、また、中間のネットワークが原因だった場合、fallbackURL側へのアクセスにより処理を再度実行できるため、サービス断を防ぐことができます。

Facebook コメント