本チュートリアルでは、本番環境の OpenResty または Nginx サーバーにおける HTTP 504 ゲートウェイタイムアウトエラーの根本原因を診断する方法をご紹介します。OpenResty XRay は、問題のある TCP 接続内のネットワークパケットのみをキャプチャすることで、パフォーマンスへの影響を最小限に抑えています。この特徴により、パフォーマンスとレイテンシーに厳しい要件がある本番環境に非常に適しています。これは、当社の強力なインテリジェントパケットキャプチャ技術です。

504.png

問題:HTTP 504 ゲートウェイタイムアウトエラー

まず、アプリケーションのアクセスログを確認しましょう。

スクリーンショット

ログに 504 エラーが表示されていることがわかります。

スクリーンショット

ps コマンドを実行して、アプリケーションの完全なコマンドラインを確認します。

スクリーンショット

これは OpenResty 公式パッケージリポジトリが提供する標準的な nginx バイナリ実行ファイルであることがわかります。

Screenshot

エラーの診断

OpenResty XRay を使用して、これらの 504 エラーレスポンスをリアルタイムで分析し、根本原因を特定することができます。

ブラウザで OpenResty XRay の Web コンソールを開きます。

Screenshot

現在分析中のマシンが正しいことを確認してください。

Screenshot

正しくない場合は、リストから再選択することができます。

Screenshot

「Guided Analysis」ページに移動します。

Screenshot

ここでは、システムが分析可能な様々な種類の問題を確認できます。

Screenshot

「Errors & exceptions」を選択します。

Screenshot

「Next」をクリックします。

Screenshot

先ほどの OpenResty アプリケーションを選択します。

Screenshot

ここでは特定のプロセスを指定しません。

Screenshot

「Whole Application」を選びます。

Screenshot

アプリケーションのタイプが正しいことを確認します。通常、デフォルト値が正しいです。

Screenshot

OpenResty XRay は、様々な言語レベルで分析を行うことができます。ここでは Lua と C/C++ の両方を選択したままにします。

Screenshot

最長分析時間を設定することも可能です。ここではデフォルトの 300 秒のままにします。

Screenshot

分析を開始します。

Screenshot

システムの分析は継続的に複数回実行します。現在、初回の分析を実行中です。

Screenshot

初回の分析が完了し、現在 2 回目のラウンドに入っております。この例では、1 回の分析で十分です。

Screenshot

分析を停止します。

Screenshot

自動生成された分析レポートをご確認しましょう。

Screenshot

自動生成された分析レポートが表示されます。

Screenshot

これが分析対象の問題タイプ、Errors & Exceptions です。

Screenshot

最初の問題は HTTP レスポンスステータスコード 504 に関するものです。

スクリーンショット

HTTP リクエスト全体の処理時間が 3 秒を超えています。

スクリーンショット

前のネットワークパケットと比較して、最も遅延が大きいネットワークパケットは、この「Push と ACK」の TCP パケットです。

スクリーンショット

前のネットワークパケットは ACK パケットです。

スクリーンショット

これら 2 つのパケット間の遅延は 3 秒を超えています。

スクリーンショット

最も遅延が大きいネットワークパケットは、アップストリームサーバーから現在のサーバーに送信されたものです。アップストリームサーバーのエンドポイントアドレスがここに表示されています。

スクリーンショット

現在のサーバーのエンドポイントアドレスも確認できます。

スクリーンショット

OpenResty XRay は、実際に 504 エラーが発生した TCP 接続のみをキャプチャするため、パフォーマンスへの影響が極めて低くなっています。これは、パフォーマンスとレイテンシーに非常に厳しい要件がある本番環境に適しています。これは当社の強力なスマート・パケット・キャプチャー技術です。

「More」をクリックすると、さらに詳細な情報が表示されます。

スクリーンショット

これは HTTP リクエストの URI です。

スクリーンショット

横軸はネットワークパケットの番号を示しており、1 から単調に増加しています。

スクリーンショット

縦軸は、ネットワークパケットの前のパケットからの相対的な遅延を示しています。値が大きいほど、遅延が長くなります。

スクリーンショット

小さな四角は、現在のサーバーから送信されたネットワークパケットを表しています。

スクリーンショット

一方、小さな丸は現在のサーバーが受信したネットワークパケットを表しています。

スクリーンショット

最も遅延が大きいこのネットワークパケットにマウスを合わせると、遅延データが表示されます。これは現在のサーバーが受信したものです。

スクリーンショット

これらのデータに基づいて、システムは以下の結論を導き出しました:現在のサーバーがアップストリームサーバーからのネットワークパケットを待っている間にタイムアウトエラーが発生しました。

スクリーンショット

また、この問題の根本原因分析も提供しています:アップストリームサーバーの応答が遅いです。

スクリーンショット

あるいは、現在のサーバーとそのアップストリームサーバー間のネットワーク接続が遅いです。

スクリーンショット

もしくは、現在のサーバーのそのアップストリームサーバーに対するタイムアウト設定が短すぎます。

スクリーンショット

詳細な推奨事項も提供されています。

スクリーンショット

これは別の種類の HTTP 504 エラーです。現在のサーバーが、アップストリームサーバーが長時間応答しないため、現在の接続を積極的に閉じました。

スクリーンショット

ここから、FIN と ACK フラグを持つ TCP ネットワークパケットが前のネットワークパケットと比較して、最も長い遅延を持っていることが明確にわかります。これは、現在のサーバーが積極的に接続を閉じる操作を開始したことを示しています。

スクリーンショット

したがって、結論として、現在のサーバーがアップストリームサーバーからのネットワークパケットを待っている間に設定されたタイムアウト保護がトリガーされ、待機を放棄して現在の接続を積極的に閉じたということになります。

スクリーンショット

システムは、この問題の根本原因分析を提供しています:アップストリームサーバーの応答が遅いです。

スクリーンショット

または、アップストリームと現在のサーバー間のネットワーク接続が遅いです。

スクリーンショット

あるいは、現在のサーバーのそのアップストリームサーバーに対するタイムアウト設定が短すぎます。

Screenshot

完全自動化された分析とレポート

OpenResty XRay は、オンラインプロセスを自動的に監視し、分析レポートを表示することもできます。「Insights」ページに切り替えます。

Screenshot

「Insights」ページでは、日次および週次のレポートを確認することができます。

Screenshot

したがって、「Guided Analysis」機能を必ずしも使用する必要はありません。

Screenshot

もちろん、「Guided Analysis」はアプリケーションの開発やデモンストレーションに非常に有用です。

OpenResty XRay について

OpenResty XRay動的トレーシング製品であり、実行中のアプリケーションを自動的に分析して、パフォーマンスの問題、動作の問題、セキュリティの脆弱性を解決し、実行可能な提案を提供いたします。基盤となる実装において、OpenResty XRay は弊社の Y 言語によって駆動され、Stap+、eBPF+、GDB、ODB など、様々な環境下で複数の異なるランタイムをサポートしております。

著者について

章亦春(Zhang Yichun)は、オープンソースの OpenResty® プロジェクトの創始者であり、OpenResty Inc. の CEO および創業者です。

章亦春(GitHub ID: agentzh)は中国江蘇省生まれで、現在は米国ベイエリアに在住しております。彼は中国における初期のオープンソース技術と文化の提唱者およびリーダーの一人であり、Cloudflare、Yahoo!、Alibaba など、国際的に有名なハイテク企業に勤務した経験があります。「エッジコンピューティング」、「動的トレーシング」、「機械プログラミング」 の先駆者であり、22 年以上のプログラミング経験と 16 年以上のオープンソース経験を持っております。世界中で 4000 万以上のドメイン名を持つユーザーを抱えるオープンソースプロジェクトのリーダーとして、彼は OpenResty® オープンソースプロジェクトをベースに、米国シリコンバレーの中心部にハイテク企業 OpenResty Inc. を設立いたしました。同社の主力製品である OpenResty XRay動的トレーシング技術を利用した非侵襲的な障害分析および排除ツール)と OpenResty XRay(マイクロサービスおよび分散トラフィックに最適化された多機能ゲートウェイソフトウェア)は、世界中の多くの上場企業および大企業から高い評価を得ております。OpenResty 以外にも、章亦春は Linux カーネル、Nginx、LuaJITGDBSystemTapLLVM、Perl など、複数のオープンソースプロジェクトに累計 100 万行以上のコードを寄与し、60 以上のオープンソースソフトウェアライブラリを執筆しております。

翻訳

英語版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!