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
- Asegúrese de que sus applications propaguen las cabeceras de trazado como se describe aquí.
Configuraciones de muestreo de trazas disponibles
Muestreador de Porcentaje: una tasa de muestreo aleatoria para el porcentaje de solicitudes que se seleccionarán para la generación de trazas.
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.
$ 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
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
Elimine el recurso Telemetry:
$ kubectl delete telemetry otel-demo
Elimine cualquier proceso
istioctl
que aún pueda estar ejecutándose usando control-C o:$ istioctl uninstall --purge -y
Desinstale el OpenTelemetry Collector:
$ kubectl delete -f @samples/open-telemetry/otel.yaml@ -n observability $ kubectl delete namespace observability