tldr
勉強がてらにEnvoyのドキュメントを邦訳してみました。ベースはGoogle Translateで、ところどころ不自然な箇所を直しています。
原文としたのEnvoyのドキュメントはこちらのディレクトリ以下にあります(ライセンス:Apache License 2.0, NOTICE)。
異常値検出
異常値の検出と排除は、アップストリームクラスタ内のいくつかのホストが他のホストとは異なるパフォーマンスを示しているかどうかを動的に判断し、それらを正常な負荷分散セットから削除するプロセスです。パフォーマンスは、連続した失敗、一時的な成功率、一時的な待ち時間など、さまざまな軸に沿っている可能性があります。異常値の検出は、受動的なヘルスチェックの一種です。 Envoyは積極的な健康診断もサポートしています。パッシブヘルスチェックとアクティブヘルスチェックは、一緒にまたは個別に有効にでき、アップストリームヘルスチェックソリューション全体の基盤を形成します。
排出アルゴリズム
異常値検出のタイプに応じて、排出はインラインで(たとえば連続5xxの場合)または指定された間隔で(たとえば定期的な成功率の場合)実行されます。排出アルゴリズムは次のように機能します。
- ホストは異常値と判断されます。
- ホストが削除されていない場合、Envoyはすぐにホストを削除します。それ以外の場合は、排出されたホストの数が許可されたしきい値(outlier_detection.max_ejection_percent設定で指定)を下回っていることを確認します。排出されたホストの数がしきい値を超えると、そのホストは排出されません。
- ホストは数ミリ秒の間排出されます。排出とは、ロードバランサがパニックに陥っている場合を除き、ホストが異常とマークされ、ロードバランシング中に使用されないことを意味します。ミリ秒数は、outlier_detection.base_ejection_time_ms値にホストが排出された回数を掛けたものです。これが原因で、ホストが失敗し続けると、ホストはどんどん排出されます。
- 排出されたホストは、排出時間が経過した後で自動的に稼働状態に戻ります。一般に、異常値の検出は、包括的なヘルスチェックソリューションのためのアクティブヘルスチェックと一緒に使用されます。
検出タイプ
Envoyは、以下の異常値検出タイプをサポートしています。
連続5xx
上流のホストが5xxの連続した数を返すなら、それは排出されます。この場合、5xxは実際の5xx応答コード、またはHTTPルーターがアップストリームに代わって1を返すイベント(リセット、接続失敗など)を意味することに注意してください。排出に必要な連続5xxの数は、outlier_detection.consecutive_5xx値によって制御されます。
連続ゲートウェイ障害
上流のホストが連続した「ゲートウェイエラー」(502、503、または504のステータスコード)を連続して返した場合、それは排出されます。これには、HTTPルーターがアップストリームの代わりにこれらのステータスコードの1つを返す原因となるイベント(リセット、接続失敗など)が含まれることに注意してください。取り出しに必要な連続ゲートウェイ障害の数は、outlier_detection.consecutive_gateway_failure値によって制御されます。
成功率
成功率ベースの異常値排除は、クラスタ内のすべてのホストからの成功率データを集計します。次に、一定の間隔で、統計的な異常値の検出に基づいてホストを除外します。集約間隔中の要求量がoutlier_detection.success_rate_request_volume値より小さい場合、成功率の異常値排出はホストに対して計算されません。さらに、間隔内の最小要求要求量を持つホストの数がoutlier_detection.success_rate_minimum_hosts値より少ない場合、クラスターの検出は実行されません。
排出イベントログ
外れ値排出イベントのログは、オプションでEnvoyによって生成することができます。グローバル統計では、どのホストが排除されているのか、またその理由について十分な情報が提供されないため、これは日常業務で非常に役立ちます。ログは、プロトタイプベースのOutlierDetectionEventメッセージのダンプとして構造化されています。排出イベントロギングは、Cluster Managerの異常値検出設定で設定されます。
構成の参照
- クラスタマネージャのグローバル設定
- クラスタ構成ごと
- 実行時設定
- 統計の参照