Istioの可観測性と拡張性メカニズム

Istioの可観測性

Istioはサービスメッシュ内の全通信に関する詳細なテレメトリデータを生成します。このテレメトリ機能により、サービスの可観測性が確保され、運用チームは開発者に追加の負担をかけることなく、アプリケーションのトラブルシューティング、保守、最適化を実行できます。Istioを通じて、運用チームは監視対象のサービスが他のサービスやIstioコンポーネントとどのように相互作用するかを包括的に理解できます。

Istioはサービスメッシュ全体の可観測性を提供するために、以下のタイプのテレメトリデータを生成します。

  • メトリクス:Istioは4つの主要監視指標(レイテンシ、トラフィック、エラー、飽和度)に基づいて一連のサービスメトリクスを生成します。さらに、メッシュコントロールプレーンの詳細なメトリクスも提供します。これらのメトリクスに基づくデフォルトの監視ダッシュボードも含まれています。
  • 分散トレーシング:Istioは各サービスに対して分散トレーシングスパンを生成し、運用チームがメッシュ内のサービス依存関係と呼び出しフローを理解できるようにします。
  • アクセスログ:メッシュ内のサービスにトラフィックが流入する際、Istioはソースと宛先のメタデータを含む各リクエストの完全な記録を生成できます。この情報により、運用チームは個々のワークロードインスタンスレベルでサービス動作を監査できます。

メトリクス

メトリクスは、動作を集約された方法で監視・理解するための手段を提供します。

サービス動作を監視するため、Istioはメッシュ内外のすべてのサービストラフィックに対してメトリクスを生成します。これらのメトリクスは、総トラフィック量、エラー率、リクエスト応答時間などの動行情報を提供します。

メッシュ内のサービス動作に加えて、メッシュ自体の動作を監視することも重要です。Istioコンポーネントは自身の内部動作に関するメトリクスをエクスポートし、メッシュコントロールプレーンの機能と健全性に関する洞察を提供します。

プロキシレベルメトリクス

Istioのメトリクス収集はサイドカープロキシ(Envoy)から開始されます。各プロキシは、通過するすべてのトラフィック(インバウンドとアウトバウンド)に対して豊富なメトリクスセットを生成します。プロキシは、設定情報や健全性情報など、自身の管理機能に関する詳細な統計も提供します。

Envoyが生成するメトリクスは、リソース(リスナーやクラスターなど)粒度でのメッシュ監視を提供します。したがって、Envoyメトリクスを監視するには、メッシュサービスとEnvoyリソース間の接続を理解する必要があります。

Istioでは、各ワークロードインスタンスで生成・収集するEnvoyメトリクスを選択できます。デフォルトでは、Istioはバックエンドサービスへの過剰な依存を避け、メトリクス収集に関連するCPUオーバーヘッドを削減するため、Envoyが生成する統計の一部のみをサポートします。しかし、必要に応じて収集するプロキシメトリクスセットを簡単に拡張できます。これにより、メッシュ全体の監視コストを抑えながら、ネットワーク動作の的を絞ったデバッグが可能になります。

Envoyドキュメントには、Envoy統計収集の詳細な説明が含まれています。Envoy統計の操作ガイドでは、プロキシレベルメトリクス生成の制御に関する詳細情報が提供されています。

プロキシレベルメトリクスの例:

envoy_cluster_internal_upstream_rq{response_code_class="2xx",cluster_name="xds-grpc"} 7163
envoy_cluster_upstream_rq_completed{cluster_name="xds-grpc"} 7164
envoy_cluster_ssl_connection_error{cluster_name="xds-grpc"} 0
envoy_cluster_lb_subsets_removed{cluster_name="xds-grpc"} 0
envoy_cluster_internal_upstream_rq{response_code="503",cluster_name="xds-grpc"} 1

サービスレベルメトリクス

プロキシレベルメトリクスに加えて、Istioはサービス通信を監視するためのサービス指向のメトリクスセットを提供します。これらのメトリクスは、4つの基本的なサービス監視要件(レイテンシ、トラフィック、エラー、飽和)をカバーします。Istioには、これらのメトリクスに基づくサービス動作を監視するためのデフォルトのダッシュボードセットが含まれています。

デフォルトでは、標準IstioメトリクスはPrometheusにエクスポートされます。

サービスレベルメトリクスの使用は完全にオプションです。運用チームは、ニーズに応じてメトリクスの生成と収集を無効にすることができます。

サービスレベルメトリクスの例:

istio_requests_total{
  connection_security_policy="mutual_tls",
  destination_app="details",
  destination_canonical_service="details",
  destination_canonical_revision="v1",
  destination_principal="cluster.local/ns/default/sa/default",
  destination_service="details.default.svc.cluster.local",
  destination_service_name="details",
  destination_service_namespace="default",
  destination_version="v1",
  destination_workload="details-v1",
  destination_workload_namespace="default",
  reporter="destination",
  request_protocol="http",
  response_code="200",
  response_flags="-",
  source_app="productpage",
  source_canonical_service="productpage",
  source_canonical_revision="v1",
  source_principal="cluster.local/ns/default/sa/default",
  source_version="v1",
  source_workload="productpage-v1",
  source_workload_namespace="default"
} 214

コントロールプレーンメトリクス

Istioコントロールプレーンも自己監視用のメトリクスセットを提供します。これらのメトリクスにより、メッシュ内のサービスとは異なるIstio自身の動作を監視できます。

分散トレーシング

分散トレーシングは、メッシュを通過する個々のリクエストを監視することにより、動作を監視・理解する方法を提供します。トレーシングにより、メッシュ運用チームはサービス依存関係とサービスメッシュ内のレイテンシ源を理解できます。

IstioはEnvoyプロキシによる分散トレーシングをサポートします。プロキシは、アプリケーションが適切なリクエストコンテキストを転送するだけで、自動的にアプリケーション用のトレーシングスパンを生成します。

IstioはZipkin、Jaeger、LightStep、Datadogを含む多くのトレーシングシステムをサポートします。運用チームはトレーシングのサンプリングレート(各リクエストがトレーシングデータを生成する割合)を制御できます。これにより、メッシュが生成するトレーシングデータの量と速度を制御できます。

Istioの分散トレーシングに関する詳細情報は、分散トレーシングFAQで見つけることができます。

アクセスログ

アクセスログは、個々のワークロードインスタンスの観点から動作を監視・理解する方法を提供します。

Istioは、サービストラフィックのアクセスログを設定可能な形式セットで生成でき、運用チームはログ記録の方法、内容、タイミング、場所を完全に制御できます。詳細については、Envoyアクセスログの取得を参照してください。

Istioアクセスログの例:

[2019-03-06T09:31:27.360Z] "GET /status/418 HTTP/1.1" 418 - "-" 0 135 5 2 "-" "curl/7.60.0" "d209e46f-9ed5-9b61-bbdd-43e22662702a" "httpbin:8000" "127.0.0.1:80" inbound|8000|http|httpbin.default.svc.cluster.local - 172.30.146.73:80 172.30.146.82:38618 outbound_.8000_._.httpbin.default.svc.cluster.local

Istioの拡張性

WebAssemblyは、Istioプロキシ(Envoy)の機能を拡張するために使用できるサンドボックス技術です。Proxy-WasmサンドボックスAPIは、Mixerに代わってIstioの主要な拡張機構として機能します。

Istio拡張(Proxy-Wasmプラグイン)はいくつかのコンポーネントで構成されます:

  • フィルタサービス提供インターフェース(SPI):フィルタ用のProxy-Wasmプラグインを構築するために使用されます。
  • サンドボックス:EnvoyにV8 Wasmランタイムを埋め込みます。
  • ホストAPI:リクエストヘッダー、トレーラー、メタデータを処理するために使用されます。
  • アウトバウンド呼び出しAPI:gRPCおよびHTTPリクエスト用です。
  • 統計・ロギングAPI:メトリクス収集と監視に使用されます。

タグ: Istio Service Mesh 可観測性 分散トレーシング WebAssembly

7月7日 16:04 投稿