Telemetry APIを使用したIstioメトリクスのカスタマイズ
Telemetry APIは、Istioにおいて以前からファーストクラスAPIとして存在しています。以前は、ユーザーはIstio設定のtelemetry
セクションでメトリクスを構成する必要がありました。
このタスクでは、Telemetry APIを使用してIstioが生成するメトリクスをカスタマイズする方法を示します。
始める前に
クラスタにIstioをインストールし、アプリケーションをデプロイしてください。
Telemetry APIは、EnvoyFilter
と連携できません。詳細については、このissueを確認してください。
Istioバージョン
1.18
以降、PrometheusEnvoyFilter
はデフォルトではインストールされず、代わりにmeshConfig.defaultProviders
を使用して有効化されます。Telemetry APIは、テレメトリパイプラインをさらにカスタマイズするために使用する必要があります。Istioの
1.18
より前のバージョンでは、以下のIstioOperator
構成でインストールする必要があります。apiVersion: install.istio.io/v1alpha1 kind: IstioOperator spec: values: telemetry: enabled: true v2: enabled: false
メトリクスのオーバーライド
metrics
セクションでは、メトリクスディメンションの値を式として提供し、既存のメトリクスディメンションを削除またはオーバーライドできます。tags_to_remove
を使用するか、ディメンションを再定義することで、標準のメトリクス定義を変更できます。
REQUEST_COUNT
メトリクスからgrpc_response_status
タグを削除apiVersion: telemetry.istio.io/v1 kind: Telemetry metadata: name: remove-tags namespace: istio-system spec: metrics: - providers: - name: prometheus overrides: - match: mode: CLIENT_AND_SERVER metric: REQUEST_COUNT tagOverrides: grpc_response_status: operation: REMOVE
REQUEST_COUNT
メトリクスにカスタムタグを追加apiVersion: telemetry.istio.io/v1 kind: Telemetry metadata: name: custom-tags namespace: istio-system spec: metrics: - overrides: - match: metric: REQUEST_COUNT mode: CLIENT tagOverrides: destination_x: value: upstream_peer.labels['app'].value - match: metric: REQUEST_COUNT mode: SERVER tagOverrides: source_x: value: downstream_peer.labels['app'].value providers: - name: prometheus
メトリクスの無効化
以下の構成で、すべてのメトリクスを無効にする
apiVersion: telemetry.istio.io/v1 kind: Telemetry metadata: name: remove-all-metrics namespace: istio-system spec: metrics: - providers: - name: prometheus overrides: - disabled: true match: mode: CLIENT_AND_SERVER metric: ALL_METRICS
以下の構成で、
REQUEST_COUNT
メトリクスを無効にするapiVersion: telemetry.istio.io/v1 kind: Telemetry metadata: name: remove-request-count namespace: istio-system spec: metrics: - providers: - name: prometheus overrides: - disabled: true match: mode: CLIENT_AND_SERVER metric: REQUEST_COUNT
以下の構成で、クライアントの
REQUEST_COUNT
メトリクスを無効にするapiVersion: telemetry.istio.io/v1 kind: Telemetry metadata: name: remove-client namespace: istio-system spec: metrics: - providers: - name: prometheus overrides: - disabled: true match: mode: CLIENT metric: REQUEST_COUNT
以下の構成で、サーバーの
REQUEST_COUNT
メトリクスを無効にするapiVersion: telemetry.istio.io/v1 kind: Telemetry metadata: name: remove-server namespace: istio-system spec: metrics: - providers: - name: prometheus overrides: - disabled: true match: mode: SERVER metric: REQUEST_COUNT
結果の検証
メッシュにトラフィックを送信します。Bookinfoサンプルでは、Webブラウザでhttp://$GATEWAY_URL/productpage
にアクセスするか、次のコマンドを実行します
$ curl "http://$GATEWAY_URL/productpage"
次のコマンドを使用して、Istioが新しいディメンションまたは変更されたディメンションのデータを生成していることを確認します。
$ istioctl x es "$(kubectl get pod -l app=productpage -o jsonpath='{.items[0].metadata.name}')" -oprom | grep istio_requests_total | grep -v TYPE |grep -v 'reporter="destination"'
$ istioctl x es "$(kubectl get pod -l app=details -o jsonpath='{.items[0].metadata.name}')" -oprom | grep istio_requests_total
たとえば、出力でメトリクスistio_requests_total
を見つけ、新しいディメンションが含まれていることを確認してください。