Configurar el muestreo de trazas

Istio proporciona múltiples formas de configurar el muestreo de trazas. En esta página aprenderá y comprenderá todas las diferentes formas en que se puede configurar el muestreo.

Antes de empezar

  1. Asegúrese de que sus applications propaguen las cabeceras de trazado como se describe aquí.

Configuraciones de muestreo de trazas disponibles

  1. Muestreador de Porcentaje: una tasa de muestreo aleatoria para el porcentaje de solicitudes que se seleccionarán para la generación de trazas.

  2. Muestreador de OpenTelemetry Personalizado: una implementación de muestreador personalizada, que debe emparejarse con el OpenTelemetryTracingProvider.

Muestreador de Porcentaje

El porcentaje de la tasa de muestreo aleatorio utiliza el valor de porcentaje especificado para elegir qué solicitudes muestrear.

La tasa de muestreo debe estar en el rango de 0.0 a 100.0 con una precisión de 0.01. Por ejemplo, para trazar 5 solicitudes de cada 10000, use 0.05 como valor aquí.

Hay tres formas de configurar la tasa de muestreo aleatorio:

API de Telemetría

El muestreo se puede configurar en varios ámbitos: en toda la malla, en el namespace o en el workload, lo que ofrece una gran flexibilidad. Para obtener más información, consulte la documentación de la API de Telemetría.

Instale Istio sin establecer sampling dentro de defaultConfig:

$ cat <<EOF | istioctl install -y -f -
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    enableTracing: true
    extensionProviders:
    - name: otel-tracing
      opentelemetry:
        port: 4317
        service: opentelemetry-collector.observability.svc.cluster.local
        resource_detectors:
          environment: {}
EOF

Habilite el proveedor de trazado a través de la API de Telemetría y establezca el randomSamplingPercentage:

$ kubectl apply -f - <<EOF
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
   name: otel-demo
spec:
  tracing:
  - providers:
    - name: otel-tracing
    randomSamplingPercentage: 10
EOF

Usando MeshConfig

El muestreo de porcentaje aleatorio se puede configurar globalmente a través de MeshConfig.

$ cat <<EOF | istioctl install -y -f -
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    enableTracing: true
    defaultConfig:
      tracing:
        sampling: 10
    extensionProviders:
    - name: otel-tracing
      opentelemetry:
        port: 4317
        service: opentelemetry-collector.observability.svc.cluster.local
        resource_detectors:
          environment: {}
EOF

Luego, habilite el proveedor de trazado a través de la API de Telemetría. Tenga en cuenta que no establecemos randomSamplingPercentage aquí.

$ kubectl apply -f - <<EOF
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: mesh-default
  namespace: istio-system
spec:
  tracing:
  - providers:
    - name: otel-tracing
EOF

Usando la anotación proxy.istio.io/config

Puede agregar la anotación proxy.istio.io/config a la especificación de metadatos de su Pod para anular cualquier configuración de muestreo de toda la malla.

Por ejemplo, para anular el muestreo de toda la malla anterior, agregaría lo siguiente a su manifiesto de pod:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: curl
spec:
  ...
  template:
    metadata:
      ...
      annotations:
        ...
        proxy.istio.io/config: |
          tracing:
            sampling: 20
    spec:
      ...

Muestreador de OpenTelemetry Personalizado

La especificación de OpenTelemetry define la API del Muestreador. La API del Muestreador permite construir un muestreador personalizado que puede tomar decisiones de muestreo más inteligentes y eficientes, como el muestreo de probabilidad.

Dichos muestreadores se pueden emparejar con el OpenTelemetryTracingProvider.

Configuraciones actuales de muestreadores personalizados en Istio:

Los muestreadores personalizados se configuran a través de MeshConfig. Aquí hay un ejemplo de cómo configurar el muestreador de Dynatrace:

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    extensionProviders:
    - name: otel-tracing
      opentelemetry:
        port: 443
        service: abc.live.dynatrace.com/api/v2/otlp
        http:
          path: "/api/v2/otlp/v1/traces"
          timeout: 10s
          headers:
            - name: "Authorization"
              value: "Api-Token dt0c01."
        dynatrace_sampler:
          tenant: "abc"
          cluster_id: 123

Orden de precedencia

Con múltiples formas de configurar el muestreo, es importante comprender el orden de precedencia de cada método.

Cuando se utiliza el muestreador de porcentaje aleatorio, el orden de precedencia es:

API de Telemetría > Anotación de Pod > MeshConfig

Esto significa que, si se define un valor en todos los anteriores, el valor en la API de Telemetría es el que se selecciona.

Cuando se configura un muestreador de OpenTelemetry personalizado, el orden de precedencia es:

Muestreador de OTel Personalizado > (API de Telemetría | Anotación de Pod | MeshConfig)

Esto significa que, si se configura un muestreador de OpenTelemetry personalizado, anula todos los demás métodos. Además, el valor del porcentaje aleatorio se establece en 100 y no se puede cambiar. Esto es importante, porque el muestreador personalizado necesita recibir el 100% de los spans para poder realizar correctamente su decisión.

Desplegar el OpenTelemetry Collector

Crea un namespace para el Recopilador de OpenTelemetry:

$ kubectl create namespace observability

Despliega el Recopilador de OpenTelemetry. Puedes usar esta configuración de ejemplo como punto de partida.

Zip
$ kubectl apply -f @samples/open-telemetry/otel.yaml@ -n observability

Desplegar la Application Bookinfo

Despliegue la application de ejemplo Bookinfo.

Generar trazas usando la muestra de Bookinfo

  1. Cuando la application Bookinfo esté en funcionamiento, acceda a http://$GATEWAY_URL/productpage una o más veces para generar información de traza.

    Para ver los datos de seguimiento, debes enviar solicitudes a tu servicio. El número de solicitudes depende de la tasa de muestreo de Istio y se puede configurar mediante la API de Telemetría. Con la tasa de muestreo predeterminada del 1%, debes enviar al menos 100 solicitudes antes de que el primer seguimiento sea visible. Para enviar 100 solicitudes al servicio productpage, usa el siguiente comando:

    $ for i in $(seq 1 100); do curl -s -o /dev/null "http://$GATEWAY_URL/productpage"; done

Limpieza

  1. Elimine el recurso Telemetry:

    $ kubectl delete telemetry otel-demo
  2. Elimine cualquier proceso istioctl que aún pueda estar ejecutándose usando control-C o:

    $ istioctl uninstall --purge -y
  3. Desinstale el OpenTelemetry Collector:

    Zip
    $ kubectl delete -f @samples/open-telemetry/otel.yaml@ -n observability
    $ kubectl delete namespace observability
¿Fue útil esta información?
¿Tienes alguna sugerencia para mejorar?

¡Gracias por tus comentarios!