Publié le : 10/05/2026 à 10:00 Vues : 569

Descubra cómo configurar el perfilado continuo (Continuous Profiling) en sus entornos utilizando Grafana Alloy y Pyroscope para identificar los cuellos de botella de sus aplicaciones.

1. Introducción al perfilado continuo

El perfilado continuo con Pyroscope.

Ir más allá de las métricas

Allí donde las métricas le informan que una aplicación consume demasiada CPU o memoria, el perfilado continuo (Continuous Profiling) le indica *qué líneas de código* exactas son las responsables. Grafana Pyroscope es la base de datos dedicada a esta necesidad. Grafana Alloy incluye los componentes necesarios para consultar (scraper) los endpoints de perfilado de sus aplicaciones (como /debug/pprof en Go) y enviar estos datos a Pyroscope.

2. Implementación de la recopilación

Configuración del scraping y el envío para Pyroscope.

El pipeline de Pyroscope

El pipeline de perfilado se asemeja mucho al de Prometheus. Generalmente comienza por un mecanismo de descubrimiento (ej: discovery.kubernetes) para encontrar los pods. A continuación, el componente pyroscope.scrape consulta periódicamente estos objetivos para recuperar los perfiles de CPU, memoria o goroutines. Finalmente, el componente pyroscope.write formatea y envía estos perfiles complejos hacia su backend Pyroscope (local o Grafana Cloud), donde podrán visualizarse en forma de Flame Graphs.


Buena Práctica: Asegúrese de que las etiquetas aplicadas en pyroscope.scrape (ej: app, env, cluster) coincidan exactamente con las utilizadas en sus métricas y registros (logs). Es esencial para permitir la correlación automática de los Flame Graphs en Grafana.
Error Común: Dejar el perfilado continuo en un entorno de producción con parámetros básicos (pprof) no optimizados, lo que puede añadir una sobrecarga de CPU (overhead) demasiado grande en sus procesos objetivo.
pyroscope.scrape "prod_apps" {
  targets    = discovery.kubernetes.pods.targets
  forward_to = [pyroscope.write.cloud.receiver]
  
  profiling_config {
    profile.process_cpu {
      enabled = true
    }
    profile.godgoroutine {
      enabled = true
    }
  }
}
Lien copié dans le presse-papiers !