Service Mesh (ASM) は、非侵襲的なサーキットブレーキング、スロットリング、トラフィックモニタリングに対応しています。このトピックでは、サーキットブレーキングとスロットリングに関する一般的なダッシュボード構成とアラートルールについて説明します。
サーキットブレーカー
サーキットブレーカーは、急なトラフィックスパイクによるシステムのクラッシュを防ぐための過負荷保護メカニズムです。クラウドネイティブサービス間の East-West トラフィックを持つアーキテクチャでは、応答の遅延や高いエラーレートといった単一サービスの障害が、呼び出しチェーン全体にわたるカスケード障害を引き起こす可能性があります。
サービス間の East-West トラフィックに対してサーキットブレーカールールを設定することで、リクエストの失敗レートまたは応答タイムアウトの数がしきい値に達したときに、アップストリームサービスからのリクエストを自動的に拒否できます。このアプローチにより、アップストリームサービスを保護し、呼び出しチェーン全体への障害の波及を防ぎます。
サーキットブレーカールールを設定すると、各 ASM プロキシは、プロキシするリクエストに基づいて、リクエストの失敗レートまたは応答タイムアウトの数を独立して計算します。したがって、同じ障害が発生しているアップストリームサービスに対して、クライアント側の異なる ASM プロキシがわずかに異なるタイミングでサーキットブレーカーをトリガーする可能性があります。
ダッシュボードの例

次の表に各パネルの説明を示します:
|
パネル |
説明 |
|
Requests |
リクエストの概要を提供します。これには次のメトリックが含まれます:
|
|
Requests OK percent |
総リクエスト数に対する成功したリクエストの割合。 |
|
Requests throttled percent |
総リクエスト数に対するスロットリングされたリクエストの割合。 |
次の JSON を Grafana にインポートして、お使いのクラスター用のサーキットブレーカーダッシュボードを作成できます。また、この JSON を変更したり、テンプレートとして使用して独自のダッシュボードを作成することもできます。
アラートルールの例
|
設定 |
例 |
説明 |
|
カスタム PromQL 式 |
(sum by(cluster, namespace) (increase(envoy_asm_circuit_breaker_total_broken_requests[1m]))) > 10 |
クラスターと名前空間でグループ化し、過去 1 分間のスロットリングされたリクエスト数を計算します。カウントが 10 を超えると、アラートがトリガーされます。 |
|
アラート内容 |
サービスレベルのサーキットブレーカーが発生しました!名前空間:{{$labels.namespace}}、ターゲットサービス:{{$labels.cluster}}。過去 1 分間のスロットリングされたリクエスト数:{{ $value }} |
アラートメッセージの形式を定義します。メッセージには、名前空間、ターゲットサービス、および過去 1 分間のスロットリングされたリクエスト数が含まれます。 |
グローバルスロットリング
Envoy プロキシでは、グローバルスロットリングはサービスメッシュ全体のリクエストレートを制御するメカニズムです。Envoy のレートリミットサービスを利用して、トラフィックを一元的に処理し、定義済みのルールとクォータに基づいて制限を適用します。
グローバルスロットリングは、ローカルスロットリングと組み合わせて、階層的な保護を提供できます。
ダッシュボードの例

次の表に各パネルの説明を示します。
|
パネル |
説明 |
|
Requests |
リクエストの概要を提供します。これには次のメトリックが含まれます。
|
|
Requests OK Percent |
「リクエスト OK」の割合。 |
|
Requests Reached Limits Percent |
「上限に達したリクエスト」の割合。 |
次の JSON を Grafana ダッシュボードにインポートして、クラスター用のグローバルスロットリングダッシュボードを作成できます。 また、この JSON を変更したり、これをもとに独自のダッシュボードを作成したりすることもできます。
アラートルールの例
|
アラート設定 |
例 |
説明 |
|
PromQL 式 |
sum (increase(envoy_cluster_ratelimit_over_limit[1m])) by (namespace, service_istio_io_canonical_name) > 10 |
過去 1 分間の上限に達したリクエスト数を、名前空間とサービス名でグループ化して計算します。カウントが 10 を超えると、アラートがトリガーされます。 |
|
アラートメッセージ |
Throttling triggered! Namespace: {{$labels.namespace}}, Target service: {{$labels.service_istio_io_canonical_name}}. Number of throttled requests in the last minute: {{ $value }} |
アラートメッセージの形式を定義します。メッセージには、名前空間、サービス名、および過去 1 分間の上限に達したリクエスト数が含まれます。 |
ローカルスロットリング
Envoy プロキシは、トークンバケットアルゴリズムを使用してローカルスロットリングを実装します。このアルゴリズムは、一定のレートで補充されるトークンのバケットを維持することで、サービスに送信されるリクエスト数を制限します。サービスへの各リクエストは 1 つのトークンを消費します。バケットが空の場合、Envoy プロキシはリクエストを拒否します。
ローカルスロットリングとグローバルスロットリングを組み合わせて、階層型保護を提供できます。
ダッシュボードの例

次の表で、各パネルについて説明します。
|
パネル |
説明 |
|
Requests |
次のメトリクスを含むリクエストの概要を表示します:
|
|
Requests OK Percent |
総リクエスト数に対する許可されたリクエストの割合。 |
|
Requests Reached Limits Percent |
総リクエスト数に対するスロットリングされたリクエストの割合。 |
次の JSON をGrafana ダッシュボードにインポートして、クラスター用のローカルスロットリングダッシュボードを作成します。この JSON を変更したり、テンプレートとして使用してカスタムダッシュボードを作成したりすることもできます。
アラートルールの例
|
パラメータ |
例 |
説明 |
|
PromQL 式 |
sum (increase(envoy_http_local_rate_limiter_http_local_rate_limit_enforced[1m])) by (namespace, service_istio_io_canonical_name) > 10 |
直近 1 分間のスロットリングされたリクエスト数を namespace と Service 名ごとにグループ化してクエリします。カウントが 10 を超えるとアラートが発火します。 |
|
アラートメッセージ |
Throttling triggered! Namespace: {{$labels.namespace}}, Target service: {{$labels.service_istio_io_canonical_name}}. Number of throttled requests in the last minute: {{ $value }} |
アラートメッセージの形式を定義します。namespace、Service 名、および直近 1 分間のスロットリングされたリクエスト数が表示されます。 |
関連操作
Grafana ダッシュボードのインポート
にログインします。 ARMSコンソールを使用します。
-
左側のナビゲーションペインで、アクセス管理 をクリックします。
-
[統合環境] タブで [コンテナーサービス] を選択し、クラスター名で目的の環境を検索してクリックします。[ダッシュボードディレクトリ] をクリックします。
[ダッシュボードディレクトリ] は、コンテナサービスの詳細ページにある [基本情報] セクションにあります。その値をクリックすると、Grafana ダッシュボードディレクトリが開きます。
-
[ダッシュボード] タブの右側で、[インポート] をクリックします。
-
JSON コンテンツを [パネル JSON でインポート] ボックスに貼り付けて [ロード] をクリックし、デフォルト設定のまま [インポート] をクリックします。
説明JSON ファイルをアップロードしてダッシュボードをインポートすることもできます。