テレメトリーAPI

Istioは、テレメトリーAPIを提供しており、メトリクスアクセスログ、およびトレーシングの柔軟な構成を可能にします。

API の使用

スコープ、継承、オーバーライド

テレメトリーAPIリソースは、Istio構成階層内の親リソースから構成を継承します。

  1. ルート構成名前空間(例:istio-system
  2. ローカル名前空間(ワークロードselectorなしの名前空間スコープのリソース)
  3. ワークロード(ワークロードselector付きの名前空間スコープのリソース)

通常istio-systemであるルート構成名前空間のテレメトリーAPIリソースは、動作のメッシュ全体のデフォルトを提供します。ルート構成名前空間内のワークロード固有のセレクターは無視/拒否されます。ルート構成名前空間に複数のメッシュ全体のテレメトリーAPIリソースを定義することは無効です。

メッシュ全体の構成の名前空間固有のオーバーライドは、目的の名前空間に新しいTelemetryリソースを適用することで実現できます(ワークロードセレクターなし)。名前空間の構成で指定されたフィールドは、親構成(ルート構成名前空間)のフィールドを完全にオーバーライドします。

ワークロード固有のオーバーライドは、目的の名前空間にワークロードセレクター付きで新しい Telemetry リソースを適用することで実現できます。

ワークロードの選択

名前空間内の個々のワークロードは、selectorによって選択されます。これにより、ラベルベースでワークロードを選択できます。

2つの異なるTelemetryリソースが、selectorを使用して同じワークロードを選択することは無効です。同様に、selectorが指定されていない名前空間内に、2つの異なるTelemetryリソースが存在することも無効です。

プロバイダーの選択

Telemetry APIは、使用するプロトコルまたは統合タイプを示すためにプロバイダーの概念を使用します。プロバイダーはMeshConfigで構成できます。

MeshConfigにおけるプロバイダー構成の例を次に示します。

data:
  mesh: |-
      extensionProviders: # The following content defines two example tracing providers.
      - name: "localtrace"
        zipkin:
          service: "zipkin.istio-system.svc.cluster.local"
          port: 9411
          maxTagLength: 56
      - name: "cloudtrace"
        stackdriver:
          maxTagLength: 256

便宜上、Istioには、いくつかのプロバイダーがデフォルト設定で事前に構成されています。

プロバイダー名機能
prometheusメトリクス
stackdriverメトリクス、トレース、アクセスログ
envoyアクセスログ

さらに、デフォルトプロバイダーを設定できます。これは、Telemetryリソースがプロバイダーを指定しない場合に使用されます。

メッシュ全体の動作の構成

Telemetry APIリソースは、メッシュのルート構成名前空間(通常はistio-system)から継承します。メッシュ全体の動作を構成するには、ルート構成名前空間に新しい(または既存の)Telemetryリソースを追加します。

前のセクションのプロバイダー構成を使用する構成例を次に示します。

apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: mesh-default
  namespace: istio-system
spec:
  tracing:
  - providers:
    - name: localtrace
    customTags:
      foo:
        literal:
          value: bar
    randomSamplingPercentage: 100

この構成は、MeshConfigからのデフォルトプロバイダーをオーバーライドし、メッシュのデフォルトをlocaltraceプロバイダーに設定します。また、メッシュ全体のサンプリング率を100に設定し、fooという名前とbarという値を持つすべてのトレーススパンに追加されるタグを構成します。

名前空間スコープのトレーシング動作の構成

個々の名前空間の動作を調整するには、目的の名前空間にTelemetryリソースを追加します。名前空間リソースで指定されたフィールドは、構成階層から継承されたフィールド構成を完全にオーバーライドします。例を次に示します。

apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: namespace-override
  namespace: myapp
spec:
  tracing:
  - customTags:
      userId:
        header:
          name: userId
          defaultValue: unknown

前のメッシュ全体の構成例を使用してメッシュにデプロイした場合、これはmyapp名前空間でのトレース動作につながり、トレーススパンをlocaltraceプロバイダーに送信し、100%のレートでトレース対象のリクエストをランダムに選択しますが、各スパンのカスタムタグを、userIdリクエストヘッダーから取得したuserIdという名前と値で設定します。重要なのは、親構成のfoo: barタグは、myapp名前空間では使用されないということです。カスタムタグの動作は、mesh-default.istio-systemリソースで構成された動作を完全にオーバーライドします。

ワークロード固有の動作の構成

個々のワークロードの動作を調整するには、目的の名前空間にTelemetryリソースを追加し、selectorを使用します。ワークロード固有のリソースで指定されたフィールドは、構成階層から継承されたフィールド構成を完全にオーバーライドします。

例を次に示します。

apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: workload-override
  namespace: myapp
spec:
  selector:
    matchLabels:
      service.istio.io/canonical-name: frontend
  tracing:
  - disableSpanReporting: true

この場合、myapp名前空間のfrontendワークロードのトレースは無効になります。Istioは引き続きトレースヘッダーを転送しますが、構成済みのトレースプロバイダーにはスパンは報告されません。

この情報は役に立ちましたか?
改善のための提案はありますか?

フィードバックありがとうございます!