使用遥测 API 自定义 Istio 指标

遥测 API 已经作为 Istio 的一等公民 API 存在相当一段时间了。以前,用户必须在 Istio 配置的 telemetry 部分配置指标。

本任务向您展示如何使用遥测 API 自定义 Istio 生成的指标。

开始之前

在您的集群中安装 Istio并部署应用程序。

遥测 API 不能与 EnvoyFilter 同时使用。有关更多详细信息,请查看此问题

  • 从 Istio 版本 1.18 开始,Prometheus EnvoyFilter 将默认不会安装,而是使用 meshConfig.defaultProviders 来启用它。应使用遥测 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,并验证它是否包含您的新维度。

此信息是否有用?
您是否有任何改进建议?

感谢您的反馈!