コンテンツにスキップ

プラクティス@Envoy

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. dial tcp lookup timeoutを解決する

dial tcp lookup timeoutとは

EnvoyがCoreDNSとの通信に失敗している可能性がある。


解決方法

以下が原因である可能性がある。

  • CoreDNSが停止している。
  • CoreDNSへのリクエスト経路のネットワークパフォーマンスが低い

これらを解決する。


02. upstream request timeoutを解決する

upstream request timeoutとは

Gateway Timeout (504ステータス) である。

Envoyからアップストリーム (宛先) への送信処理エラーである。

Envoyからのリクエスト処理が、リスナーからルートへのタイムアウト時間を超過し、宛先にリクエストを送信できなかったことを表している。

アウトバウンド通信またはインバウンド通信の違いで、宛先に当たる箇所が異なる。


宛先に当たる箇所

▼ Envoyからのアウトバウンド通信の場合

Envoyからのアウトバウンド通信の場合、Envoyの宛先は他のEnvoyや外部システムである。

Envoyから他のEnvoyや外部システムへのリクエストでタイムアウトになっている。

マイクロサービス # 送信元

Envoy

... # 宛先

envoy_upstream-request-timeout_outbound

▼ Envoyへのインバウンド通信の場合

Envoyへのインバウンド通信の場合、Envoyの宛先はマイクロサービスである。

Envoyからマイクロサービスへのリクエストがタイムアウトになっている。

... # 送信元

Envoy
⬇️
マイクロサービス # 宛先

envoy_upstream-request-timeout_inbound


解決方法

以下が原因である可能性がある。

  • 宛先 (アウトバウンド通信の場合はEnvoy、インバウンド通信の場合はマイクロサービス) がハードウェアリソース不足や高負荷状態にあり、処理し切れなかった
  • タイムアウト時間が短すぎる
  • ネットワークに問題がある。
  • 処理に時間がかかりすぎている。

これらを解決する。


03. upstream response timeoutを解決する

upstream response timeoutとは

Gateway Timeout (504ステータス) である。

Envoyからアップストリーム (宛先) への送信処理エラーである。

しかし、宛先からのレスポンス処理がタイムアウト時間を超過し、Envoyが宛先からレスポンスを受信できなかったことを表している。

アウトバウンド通信またはインバウンド通信の違いで、いずれが原因かが異なる。


宛先に当たる箇所

▼ Envoyからのアウトバウンド通信の場合

アウトバウンド通信の場合、Envoyの宛先は他のEnvoyや外部システムがである。

他のEnvoyや外部システムからのレスポンス処理がタイムアウトになっている。

マイクロサービス # 送信元

Envoy

... # 宛先

▼ Envoyへのインバウンド通信の場合

インバウンド通信の場合、Envoyの宛先はマイクロサービスである。

マイクロサービスからのレスポンス処理がタイムアウトになっている。

... # 送信元
⬇️
Envoy
⬇️
マイクロサービス # 宛先


解決方法

以下が原因である可能性がある。

  • 宛先 (アウトバウンド通信の場合はEnvoy、インバウンド通信の場合はマイクロサービス) がハードウェアリソース不足や高負荷状態にあり、処理し切れなかった
  • タイムアウト時間が短すぎる
  • ネットワークに問題がある。
  • 処理に時間がかかりすぎている。

これらを解決する。


04. downstream_remote_disconnectを解決する

downstream_remote_disconnectとは

Gateway Timeout (504ステータス) である。

Envoyのダウンストリーム (送信元) の返信処理エラーである。


送信元に当たる箇所

▼ Envoyからのアウトバウンド通信の場合

Envoyからのアウトバウンド通信の場合、Envoyの送信元はマイクロサービスである。

マイクロサービス # 送信元

Envoy

... # 宛先

マイクロサービスからのリクエストがタイムアウトになっている。

マイクロサービスからDBへのトランザクションで問題が起こると、Envoyでdownstream_remote_disconnectが出ることがある。

▼ Envoyへのインバウンド通信の場合

Envoyへのインバウンド通信の場合、Envoyの送信元はブラウザやEnvoyである。

... # 送信元

Envoy
⬇️
マイクロサービス # 宛先

ブラウザやEnvoyからのリクエストがタイムアウトになっている。


解決方法

以下が原因である可能性がある。

  • 送信元 (アウトバウンド通信の場合はマイクロサービス、インバウンド通信の場合はブラウザやEnvoy) が通信を切断した。
  • タイムアウト時間が短すぎる
  • ネットワークに問題がある。

これらを解決する。


05 ヘッダー

1. 送信元Envoyから宛先Envoyへのリクエストヘッダー

記入中...


2. 宛先Envoyから送信元Envoyへのレスポンスヘッダー

▼ 宛先Envoyから送信元Envoyへのレスポンスヘッダーとは

送信元Envoyのアウトバウンド通信時に、宛先Envoyから送信元ENvoyへのレスポンスに設定されたヘッダーである。

▼ x-envoy-immediate-health-check-fail

宛先でヘルスチェックに失敗していることを表す。

送信元Envoyは、このEnvoyをロードバランシングの宛先から外す。


3. 送信元Envoyからアプリへのレスポンスヘッダー

▼ 送信元Envoyからアプリへのレスポンスヘッダーとは

送信元Envoyのアウトバウンド通信時に、送信元Envoyからアプリへのレスポンスに設定されたヘッダーである。

▼ x-envoy-upstream-service-time

宛先マイクロサービスの処理時間と宛先Envoyからのレスポンスタイムの合計時間を表す。

▼ x-envoy-overloaded

送信元Envoyのアウトバウンド通信時に、サーキットブレイカーまたはメンテナンスモードによってリクエストが遮断されたことを表す。

▼ x-envoy-loadl-overloaded

送信元Envoyのインバウンド通信時に、サーキットブレイカーによってリクエストが遮断されたことを表す。