RousselTMLEARNING

TP · OpenTelemetry: del descubrimiento a la experiencia

Práctica: Perfilar una aplicación y vincular perfiles y trazas

Lo que vas a aprender en este TP
  • Enviar perfiles continuos
  • Leer un flame graph
  • Vincular spans y perfiles

Introducción #

Lo que vas a aprender en esta sección
  • Enviar perfiles continuos
  • Leer un flame graph
  • Vincular spans y perfiles

Contexto. Un servicio de cálculo de descuentos es lento y consume mucha CPU, pero sus trazas solo muestran un span largo. Añades la cuarta señal para encontrar la línea responsable.

Requisitos previos: Docker y Python 3.10 o superior; la pila grafana/otel-lgtm (Collector, Tempo, Loki, Prometheus, Pyroscope y Grafana en un solo contenedor)  ·  Duración estimada: 45 min

Un cuello de botella identificado en el código gracias al vínculo span-perfil, corregido y medido.

Puesta en práctica #

Pasos guiados, con su corrección.

  1. 1. Arrancar la pila de observabilidad

    ¿Por qué? Una sola imagen proporciona un Collector OTLP y todos los backends: nos centramos en la señal.

    Lanza grafana/otel-lgtm, crea un entorno Python y apunta los exportadores al puerto OTLP/HTTP 4318.
  2. 2. Un servicio lento

    ¿Por qué? El código contiene un defecto clásico: una expresión regular recompilada y una concatenación costosa en cada llamada.

    Instala el SDK de Pyroscope y su integración con OpenTelemetry y escribe remises.py: trazas hacia Tempo, perfiles hacia Pyroscope con el mismo nombre de servicio y el PyroscopeSpanProcessor.
  3. 3. Leer el flame graph

    ¿Por qué? El flame graph muestra dónde se consume realmente la CPU, sin añadir ni un span.

    En Explore > Pyroscope (o Drilldown > Profiles), selecciona la aplicación remises y el tipo CPU. Identifica las mesetas más anchas y la parte de code_valide y re.compile.
  4. 4. Del span al perfil

    ¿Por qué? El span processor etiqueta las muestras con el span_id: se obtiene el perfil de una petición concreta.

    En Tempo, abre una traza calculer remise larga y usa Profiles for this span. Si el enlace no aparece, configura Trace to profiles en la fuente de datos de Tempo (fuente Pyroscope, tipo CPU).
  5. 5. Corregir y comparar

    ¿Por qué? El perfil demuestra el efecto de una optimización en lugar de suponerlo.

    Compila la expresión una sola vez a nivel de módulo y sustituye la concatenación por ';'.join(). Vuelve a lanzarlo y compara los dos periodos con la vista Diff de Pyroscope y la duración de los spans en Tempo.
  6. 6. Situar los perfiles de OpenTelemetry

    ¿Por qué? El SDK de Pyroscope es una solución probada; la señal OTLP Profiles busca unificar la recogida, pero aún no es estable.

    Consulta la página de estado de la señal profiles en opentelemetry.io y la documentación del perfilador eBPF de OpenTelemetry. Redacta en tres líneas qué haría falta para sustituir el SDK por el perfilador eBPF y un Collector, y detén la pila.

Nivel de dificultad : ●●●○○ (3/5)

Mi seguimiento

  • ⏱ Duración estimada : ≈ 45 min

Inicia sesión para seguir tu progreso y tomar notas. Iniciar sesión

✉️ Hacer una pregunta

Artículos recomendados

Les profils, le quatrième signal d'OpenTelemetry : profilage continu et corrélation avec les traces

Comprendre le nouveau signal profile d'OpenTelemetry : profilage continu, flame graphs, modèle de...

Grafana Alloy: Perfilado Continuo con Pyroscope

Descubra cómo configurar el perfilado continuo (Continuous Profiling) en sus entornos utilizando ...