特定の Web ロケーションへの会社全体の接続の問題を追跡するにはどうすればよいですか?

特定の Web ロケーションへの会社全体の接続の問題を追跡するにはどうすればよいですか?

StackOverflow で質問してみましたがうまくいかなかったので、このコミュニティがこの問題の解決に役立つことを願っています。社内の多くの人がアクセスする必要のある Web アプリがあります。ときどき、Web アプリがリクエストに応答しなくなるようです。

たとえば、リソース インデックス ページ (例: 注文テーブル) が停止中にリソース リストを更新しようとすると、API 経由でデータを要求しますが、しばらくすると要求はサイレントに失敗します。社内のほぼ全員に同時に数分間長時間の要求が送られ、アプリにアクセスできなくなりますが、この停止/低速期間中に別のネットワーク (例: モバイル データ) からアプリにアクセスすると機能します。この期間中、他の Web サイトも影響を受けないようです。

ブラウザのネットワーク タブには、20 ~ 40 秒後にリクエストが失敗したと表示されますが、ステータス コードはありません。リクエストが選択されたときのステータス テキストは、failed net::ERR_CONNECTION_TIMED_OUT です。処理中にリクエストをクリックせずに後で詳細を開くと、タイミング タブに Stalled フェーズで停止したことが表示されるようです。ただし、処理中にリクエストの詳細を開くと、代わりに Initial connection フェーズで停止したことが表示されます。これにより、リクエストの詳細のタイミング タブは信頼できないように見えます。表示される内容は、リクエストが処理されているときにリクエストを検査していたかどうかによって異なるようです。

サーバーのセットアップ:

この間、サーバーは大きな過負荷状態にはなっていないようです (CPU/メモリ使用率は最大 30%)。サーバーは Digital Ocean ドロップレット上で実行されており、nginx を使用して Laravel アプリをホストしています。

検討・試したこと: 会社の接続は同じ IP から行われます。ただし、アプリ自体ではスロットリングが有効になっていますが、ユーザー ID にバインドされており、「試行回数が多すぎます」というエラー メッセージと 429 ステータス コードを返します。これがスロットリングの場合、エラー メッセージとステータス コードによってスロットリングが認識できるため、アプリ レベルでは発生しないはずです。

nginx の設定を調べてスロットリングが有効になっているかどうかを確認しようとしましたが、nginx が何らかのデフォルトを強制しない限り、明示的に有効になっているようには見えません。ただし、有効になっている場合でも、私が読んだ内容から理解する限り、nginx は 429/503 を返すはずです。ただし、私たちのケースでは、エラーやコードは返されないようです。

DigitalOcean と会社の ISP の両方に連絡してみましたが、どちらもスロットリング/レート制限メカニズムを一切使用していないと主張しています。会社のネットワーク管理者も、そのようなメカニズムは実行されていないと言っています。

問題の原因をデバッグ/調査するにはどうすればよいでしょうか? 私の理解では、問題は nginx の構成から ISP プロバイダーのスロットリングまで、あらゆる場所にある可能性があります。現時点では、これは何らかのスロットリングであると考えていますが、何か見落としている可能性があります。

答え1

診断ツールを使用して、インフラストラクチャ (nginx、Digital Ocean、内部ネットワーク) のさまざまな部分におけるボトルネックやエラーを特定します。停止中にデータを記録して、後で分析します。

# nginx logs
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log

# Network diagnostics (replace x.x.x.x with server IP)
traceroute x.x.x.x
mtr --report --report-cycles=10 x.x.x.x

# Laravel logs
tail -f /path/to/laravel/storage/logs/laravel.log

# Digital Ocean droplet metrics
# Check droplet metrics via Digital Ocean dashboard

これにより、問題が nginx セットアップ、Digital Ocean ドロップレット、内部ネットワーク、またはその他の場所にあるかどうかを正確に特定できます。ログとネットワーク診断から手がかりを得ることができます。

コメントに返信

tc•コマンドを使用して、ネットワーク トラフィックのフローに影響を与える可能性のあるトラフィック シェーピングまたはスロットリング ルールが適用されているかどうかを検査するには、次の手順を実行します。

# Display all the traffic control (qdisc) settings on all interfaces:
tc qdisc show dev [interface-name]

# Example for eth0 interface:
tc qdisc show dev eth0

特定のトラフィック制御ルールが適用されている場合は、ここにリストされます。それらをさらに分析して、報告されたタイムアウトの原因となっているかどうかを判断できます。

関連情報