使用遙測 API 自訂 Istio 指標

遙測 API 作為第一級 API 已在 Istio 中存在相當長的時間。先前,使用者必須在 Istio 組態的 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 範例,請在您的網路瀏覽器中訪問 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 並驗證它是否包含您的新維度。

這個資訊對您有幫助嗎?
您有任何改進的建議嗎?

感謝您的回饋!