可観測性

Istioは、メッシュ内のすべてのサービス通信に関する詳細なテレメトリを生成します。このテレメトリは、サービスの動作を可視化し、運用担当者がアプリケーションのトラブルシューティング、保守、最適化を行うことを可能にします。サービス開発者に追加の負担をかけることなく実現します。Istioを使用することで、運用担当者は、監視対象のサービスが他のサービスやIstioコンポーネント自体とどのように相互作用しているかを詳細に理解できます。

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

  • メトリクス。Istioは、監視の4つの「黄金の指標」(レイテンシ、トラフィック、エラー、飽和)に基づいて、一連のサービスメトリクスを生成します。メッシュコントロールプレーンに関する詳細なメトリクスも提供します。これらのメトリクス上に構築された、メッシュ監視ダッシュボードのデフォルトセットも提供されます。
  • 分散トレース。Istioは各サービスに対して分散トレーススパンを生成し、オペレータにメッシュ内の呼び出しフローとサービス依存関係の詳細な理解を提供します。
  • アクセスログ。トラフィックがメッシュ内のサービスに流れると、Istioはソースと宛先のメタデータを含む各リクエストの完全なレコードを生成できます。この情報は、オペレータがサービスの動作を個々のワークロードインスタンスレベルまで監査することを可能にします。

メトリクス

メトリクスは、集約された動作を監視および理解する方法を提供します。

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

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

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

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

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は、ZipkinJaegerLightstep、およびDatadogを含む多くのトレーシングバックエンドをサポートしています。オペレータは、トレース生成のサンプリングレート(つまり、リクエストごとにトレースデータが生成されるレート)を制御します。これにより、オペレータはメッシュに対して生成されるトレースデータの量とレートを制御できます。

Istioを使用した分散トレーシングの詳細については、分散トレーシングに関するFAQを参照してください。

単一のリクエストに対するIstioが生成した分散トレースの例

Distributed Trace for a single request
単一のリクエストに対する分散トレース

アクセスログ

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

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
この情報は役に立ちましたか?
改善のための提案はありますか?

ご意見ありがとうございます!