テレメトリーAPI
Istioは、テレメトリーAPIを提供しており、メトリクス、アクセスログ、およびトレーシングの柔軟な構成を可能にします。
API の使用
スコープ、継承、オーバーライド
テレメトリーAPIリソースは、Istio構成階層内の親リソースから構成を継承します。
- ルート構成名前空間(例:
istio-system
) - ローカル名前空間(ワークロード
selector
なしの名前空間スコープのリソース) - ワークロード(ワークロード
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は引き続きトレースヘッダーを転送しますが、構成済みのトレースプロバイダーにはスパンは報告されません。