Personalización de Métricas de Istio con la API de Telemetría

La API de Telemetría ha estado en Istio como una API de primera clase desde hace algún tiempo. Anteriormente, los usuarios tenían que configurar las métricas en la sección telemetry de la configuración de Istio.

Esta tarea muestra cómo personalizar las métricas que genera Istio con la API de Telemetría.

Antes de empezar

Instale Istio en su cluster y despliegue una application.

La API de Telemetría no puede funcionar junto con EnvoyFilter. Para más detalles, consulte este problema.

  • A partir de la versión 1.18 de Istio, el EnvoyFilter de Prometheus no se instalará por defecto, y en su lugar se utiliza meshConfig.defaultProviders para habilitarlo. La API de Telemetría debe utilizarse para personalizar aún más la pipeline de telemetría.

  • Para versiones de Istio anteriores a la 1.18, debe instalar con la siguiente configuración de IstioOperator:

    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:
      values:
        telemetry:
          enabled: true
          v2:
            enabled: false

Anular métricas

La sección metrics proporciona valores para las dimensiones de las métricas como expresiones, y le permite eliminar o anular las dimensiones de métricas existentes. Puede modificar las definiciones de métricas estándar usando tags_to_remove o redefiniendo una dimensión.

  1. Eliminar tags grpc_response_status de la métrica REQUEST_COUNT

    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. Agregar tags personalizados para la métrica 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: filter_state.upstream_peer.app
            - match:
                metric: REQUEST_COUNT
                mode: SERVER
              tagOverrides:
                source_x:
                  value: filter_state.downstream_peer.app
          providers:
            - name: prometheus

Deshabilitar métricas

  1. Deshabilitar todas las métricas con la siguiente configuración:

    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. Deshabilitar métricas REQUEST_COUNT con la siguiente configuración:

    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. Deshabilitar métricas REQUEST_COUNT para el cliente con la siguiente configuración:

    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. Deshabilitar métricas REQUEST_COUNT para el servidor con la siguiente configuración:

    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

Verificar los resultados

Envíe tráfico a la malla. Para la muestra de Bookinfo, visite http://$GATEWAY_URL/productpage en su navegador web o emita el siguiente comando:

$ curl "http://$GATEWAY_URL/productpage"

Use el siguiente comando para verificar que Istio genera los datos para sus nuevas o modificadas dimensiones:

$ 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

Por ejemplo, en la salida, localice la métrica istio_requests_total y verifique que contiene su nueva dimensión.

¿Fue útil esta información?
¿Tienes alguna sugerencia para mejorar?

¡Gracias por tus comentarios!