Telemetry APIを使用したIstioメトリクスのカスタマイズ

Telemetry APIは、Istioにおいて以前からファーストクラスAPIとして存在しています。以前は、ユーザーはIstio設定のtelemetryセクションでメトリクスを構成する必要がありました。

このタスクでは、Telemetry APIを使用してIstioが生成するメトリクスをカスタマイズする方法を示します。

始める前に

クラスタにIstioをインストールし、アプリケーションをデプロイしてください。

Telemetry APIは、EnvoyFilterと連携できません。詳細については、このissueを確認してください。

  • Istioバージョン1.18以降、Prometheus EnvoyFilterはデフォルトではインストールされず、代わりに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を使用するか、ディメンションを再定義することで、標準のメトリクス定義を変更できます。

  1. 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
    
  2. 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
    

メトリクスの無効化

  1. 以下の構成で、すべてのメトリクスを無効にする

    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
    
  2. 以下の構成で、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
    
  3. 以下の構成で、クライアントの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
    
  4. 以下の構成で、サーバーの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を見つけ、新しいディメンションが含まれていることを確認してください。

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

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