What is continuous profiling?

Definición de perfilado continuo

El perfilado continuo es el proceso de recopilación constante de datos de rendimiento a partir de aplicaciones en ejecución en entornos de producción en vivo con el objetivo de optimizar el rendimiento y mejorar el uso de recursos.

A diferencia de los métodos tradicionales en los que se hace un muestreo de datos ad-hoc o a demanda, el perfilado continuo captura métricas en tiempo real. Esto brinda un panorama mucho más preciso y actual del rendimiento y el comportamiento de las aplicaciones. Además, se enfoca específicamente en los entornos de producción, hace un seguimiento del uso de recursos y brinda información a nivel del código. Esto no solo es útil a corto plazo, sino que permite un análisis a largo plazo con una sobrecarga mínima.

Su evolución desde las prácticas de perfilado tradicionales se destaca con varios avances importantes. Esto incluye el cambio del análisis ad-hoc a la recopilación continua de datos, un impacto en el rendimiento mucho menor a través de la innovación de eBPF y su integración en las herramientas de observabilidad. Los perfiladores continuos modernos también incorporan características de análisis automatizado que usan AI y machine learning, y pueden brindar soporte a una variedad de lenguajes de programación. También están pensados para funcionar bien con sistemas distribuidos y nativos del cloud.

La importancia del perfilado continuo

Identificación y resolución de cuellos de botella de rendimiento

El perfilado continuo posibilita la detección y resolución de cuellos de botella de rendimiento en tiempo real. Mediante la recopilación constante de datos de uso de recursos, como CPU, memoria, E/S de disco, etc., obtienes información detallada del comportamiento del sistema a medida que ocurre. Esto significa que los desarrolladores pueden localizar con exactitud dónde se encuentran estas ineficiencias en el código, de modo que pueden resolver los problemas de rendimiento y mejorar el rendimiento general de las aplicaciones de forma proactiva.

Ventajas para el equipo de desarrollo

El perfilado continuo también mejorará la calidad del código facilitando a los desarrolladores la identificación y el abordaje de problemas de rendimiento que podrían no aparecer en entornos de desarrollo o prueba. Esto llevará a un código de producción más robusto y eficiente. También mejora la resolución de problemas posibilitando el análisis de datos en tiempo real, lo que significa una identificación más rápida de problemas intermitentes. Esto reduce el tiempo de depuración y mejora la productividad. Al brindar información sobre el rendimiento y el comportamiento de las aplicaciones, el perfilado continuo también ayuda a los equipos de SRE con la escalabilidad y la confiabilidad. Eso se debe a que pueden asegurarse de que una aplicación puede ocuparse de cargas más grandes sin que haya una caída del rendimiento.

Beneficios comerciales

El uso del perfilado continuo para la optimización del uso de recursos puede ayudar a una empresa a reducir los costos disminuyendo el consumo de recursos en el cloud y los costos asociados. También puede ayudar a minimizar la huella de carbono de los centros de datos y ayudar así a las empresas a mejorar su responsabilidad ambiental en general en la industria de la tecnología.

Mejorar el rendimiento de una aplicación también puede crear de forma indirecta una mejor experiencia de usuario para los usuarios, lo que podría mejorar la satisfacción de los clientes y potencialmente mejorar la retención.

Cómo funciona el perfilado continuo

Paso 1: recopilación de datos

El primer paso del perfilado continuo es la recopilación de los datos necesarios. Este proceso suele usar técnicas de muestreo de baja sobrecarga para recopilar métricas, como asignación de memoria, uso de CPU y operaciones de E/S. Esto se hace con la integración de herramientas como eBPF, JProfiler y Universal Profiling de Elastic.

Estas herramientas se integran a los sistemas mediante agentes, bibliotecas o módulos de kernel. El método depende de la tecnología específica que elijas y del nivel de acceso requerido. También hay diferencias en los enfoques de perfilado en cuanto al impacto y los requisitos de recursos:

  1. Perfiladores ligeros siempre activos: tienen una sobrecarga mínima, por lo que son adecuados para su uso continuo en producción.
  2. Perfiladores de muestreo: realizan una recopilación de datos periódica, con sobrecarga baja a moderada.
  3. Perfiladores de instrumentación: recopilan datos más detallados, pero con mayor sobrecarga. Suelen usarse en entornos de desarrollo, prueba u organización.
  4. Herramientas de rastreo: llevan a cabo una recopilación integral de los datos, pero tienen una importante sobrecarga. Por lo general, se usan para sesión de depuración específicas.

Paso 2: análisis

Una vez recopilados los datos, se analizan para identificar cuestiones como cuellos de botella de rendimiento, patrones de uso de recursos y optimizaciones potenciales. Este proceso de análisis suele involucrar la agregación de datos con el tiempo, la referencia cruzada con eventos de las aplicaciones y la aplicación de métodos estadísticos para la detección de anomalías y tendencias. El objetivo de esta etapa es transformar los datos en información procesable.

El perfilado continuo también se puede asociar con datos de monitoreo de rendimiento de aplicaciones (APM), como rastros para comprender exactamente el código que se ejecutó cuando se produjo un rastreo en particular, lo que acelera el tiempo promedio de identificación de la causa raíz, gracias a que mejora el contexto.

En esta etapa se suelen usar técnicas avanzadas para mejorar el análisis, entre las que se incluye el uso de machine learning y herramientas de AI. Pueden resultar particularmente buenas para clasificar de forma automática los problemas, predecir el rendimiento futuro y sugerir optimizaciones que puedan hacerse.

Paso 3: visualización

El paso de visualización transforma los datos de rendimiento complejos recopilados en representaciones visuales intuitivas fáciles de procesar. Este es el paso que ayuda a los desarrolladores y los equipos de operaciones a identificar con rapidez los cuellos de botella de rendimiento, los patrones de uso y las áreas de optimización. Las técnicas comunes incluyen gráficos de llamas, que facilitan la identificación de rutas de código calientes, y diagramas de témpanos, en los que se representa en qué se dedica el tiempo relativo en distintas partes del código.

Estas visualizaciones suelen ser interactivas y permitir al visualizador acercar, filtrar datos y desglosar funciones o áreas problemáticas específicas. La mayoría de las herramientas proporcionan dashboards que reúnen varias visualizaciones y métricas en un sitio.

Perfilado continuo en práctica

Casos de uso

  1. Optimización de plataforma de comercio electrónico: usa el perfilado continuo para identificar búsquedas de la base de datos lentas que afecten el proceso de finalización de la compra y reduce el tiempo de carga de la página optimizando las funciones que requieren un uso intensivo de recursos.
  2. Rendimiento de la arquitectura de microservicios: identifica cuellos de botella específicos en comunicaciones entre servicios y optimiza la asignación de recursos en todos los sistemas distribuidos. Optimización de costos del cloud: identifica el código ineficiente que provoca un uso excesivo de memoria o CPU, y reduce los costos de hospedaje en el cloud optimizando el uso de recursos.
  3. Sistemas de procesamiento de datos en tiempo real: detecta y aborda cuellos de botella de procesamiento de datos y optimiza los pipelines de procesamiento de transmisión con el objetivo de reducir la latencia.
  4. Gestión y resolución de incidentes: identifica la causa raíz de problemas de rendimiento con rapidez, lo que disminuye el tiempo promedio de resolución (MTTR).

Mejores prácticas

  1. Integra el perfilado continuo de forma temprana en el proceso de desarrollo y usa técnicas de muestreo de baja sobrecarga.
  2. Automatiza la recopilación de datos, el análisis y las alertas para lograr consistencia y respuestas rápidas.
  3. Conéctalo con tus herramientas de APM y observabilidad existentes para obtener información integral.
  4. Implementa la integración del pipeline de CI/CD para obtener perfilado continuo para las ejecuciones de prueba de la unidad.
  5. Establece rutinas de revisión regulares y bucles de retroalimentación para toda optimización en curso.
  6. Mantén todas las herramientas de perfilado actualizadas y realízales mantenimiento regular.
  7. Entrena a los miembros del equipo sobre cómo interpretar y analizar de manera efectiva los datos de perfilado.
Perfilado continuo de Elastic Observability
Perfilado continuo de Elastic Observability
Visualización de gráfico de llamas de Elastic Observability
Visualización de gráfico de llamas de Elastic Observability

Desafíos y limitaciones de perfilado continuo

Sobrecarga de rendimiento

Incluso con técnicas de muestreo de baja sobrecarga, cada tipo de perfilado continuo presentará cierta sobrecarga de rendimiento para los sistemas que se monitorean. Podrían afectar el rendimiento de las aplicaciones, en especial en entornos con limitaciones de recursos. Puedes realizar estas tres acciones, cuando resulte posible, para minimizar la sobrecarga de rendimiento:

  • Si es posible, usa perfiladores basados en eBPF que tengan una sobrecarga mínima.
  • Implementa el perfilado adaptativo para reducir la frecuencia durante periodos de carga alta.
  • Enfócate en perfilar solo componentes esenciales, en lugar de sistemas completos.

Inquietudes sobre la privacidad de los datos

Como con cualquier proceso que incluya la recopilación de datos, existe el riesgo de que los datos recopilados incluyan información confidencial, en especial datos de los usuarios. A fin de abordar estos problemas:

  • Implementa controles de acceso estrictos y encriptación para todos los datos de perfilado.
  • Anonimiza u ofusca los datos confidenciales antes de almacenarlos, compartirlos o mostrarlos.
  • Adhiere de forma estricta a toda normativa de protección de datos.

Almacenamiento y gestión de datos

El perfilado continuo puede generar grandes volúmenes de datos que deberán almacenarse y gestionarse. Esto debe hacerse de forma eficiente, con estrategias como las siguientes:

  • Implementar políticas de retención de datos que limiten la duración del almacenamiento
  • Comprimir los datos
  • Aprovechar el almacenamiento en el cloud para mejorar la escalabilidad

Perfilado continuo con Elastic

Elastic lanzó Universal Profiling, que brinda a las empresas un perfilado del sistema completo y siempre activo en todo su pipeline de desarrollo. Usa perfilado eBPF para capturar solo los datos necesarios y se integra a OpenTelemetry para mejorar la observabilidad y revelar información más profunda. Elastic ofrece lo siguiente a los equipos:

  • Visibilidad del sistema completo: Elastic Universal Profiling captura y analiza datos de tu kernel, código de aplicaciones y bibliotecas de terceros.
  • Despliegue sin inconvenientes: el agente puede desplegarse sin hacer cambios ni operaciones intrusivas en el código fuente de la aplicación, por lo que es fácil comenzar a recibir datos de perfilado en cuestión de minutos.
  • Visualización de datos: el perfilado puede inspeccionarse a través de rastreos de la pila, gráficos de llamas y vistas de funciones en Kibana, lo que simplifica el filtrado y la comparación de datos con el tiempo a fin de identificar mejoras de rendimiento o detectar regresiones.

Recursos de perfilado continuo