En la actualidad, para la industria de desarrollo de software, las aplicaciones basadas en microservicios y Kubernetes son la norma para garantizar escalabilidad, flexibilidad y despliegue rápido. Sin embargo, estas arquitecturas presentan desafíos únicos para la monitorización, especialmente cuando las aplicaciones están desarrolladas en lenguajes como Go, que no utilizan un servidor web tradicional. Este artículo proporciona una guía resumen sobre cómo implementar Dynatrace Real User Monitoring (RUM) para capturar datos de experiencia del usuario en estos entornos.
1. Introducción a Dynatrace RUM
Dynatrace Real User Monitoring (RUM) es una herramienta poderosa que captura y analiza las interacciones de los usuarios con las aplicaciones web. Permite a los equipos de desarrollo comprender cómo los usuarios experimentan su aplicación, identificando problemas de rendimiento y puntos de fricción. Normalmente, el RUM se implementa mediante la inyección automática de un script JavaScript en las páginas HTML de la aplicación, un proceso que funciona bien en servidores web estándar como Apache o NGINX.
El Desafío: Aplicaciones Go en Kubernetes
En entornos donde las aplicaciones están escritas en Go y operan en un clúster de Kubernetes, no hay un servidor web tradicional que permita la inyección automática del script de RUM. En estos casos, es necesario implementar una inyección manual del código JavaScript, lo que requiere coordinación entre los equipos de monitorización y desarrollo.
2. Escenario Actual
Características del entorno:
- Aplicaciones desarrolladas en Go: Las aplicaciones son responsables de abrir puertos HTTP(s) y procesar directamente las solicitudes REST JSON.
- Ejecutadas en Kubernetes: Las aplicaciones están contenidas en pods que se despliegan en un namespace de Kubernetes.
- Sin servidor web tradicional: La inyección automática de Dynatrace RUM no es posible debido a la falta de un servidor web intermedio compatible con Dynatrace OneAgent.
Requisitos:
- Monitorizar la experiencia del usuario final (RUM).
- Mantener bajo control la complejidad del despliegue.
- Capturar métricas sin impactar negativamente el rendimiento de la aplicación.
3. Solución Propuesta: Inyección Manual del Código RUM
La solución para este entorno es la inyección manual del código JavaScript de RUM en las páginas HTML generadas por la aplicación Go.
Pasos para Implementar Dynatrace RUM
Paso 1: Configurar Dynatrace y Obtener el Código RUM
- Accede a Dynatrace:
- Inicia sesión en tu cuenta de Dynatrace.
- Ve a la sección de configuración de Aplicaciones Web.
- Crea o selecciona una aplicación:
- Si no tienes una aplicación configurada para esta monitorización, crea una nueva y configura los detalles básicos (nombre, URL, etc.).
- Obtén el fragmento de código RUM:
- Dynatrace generará un fragmento de código JavaScript único para tu aplicación web.
- Este código será el que se inyectará manualmente en los documentos HTML generados por la aplicación.
Paso 2: Insertar el Código en las Páginas HTML
La aplicación Go necesita agregar el fragmento de código de RUM en la sección <head>
de cada documento HTML generado.
- Proporcionar el código a los desarrolladores:
- Si no tienes acceso al código fuente de la aplicación Go, entrega el fragmento de código y las instrucciones al equipo de desarrollo.
- Indica que el código debe ser el primer elemento dentro de la sección
<head>
para garantizar una monitorización precisa.
- Ejemplo de inclusión manual:
<html> <head> <script> // Código de Dynatrace RUM proporcionado (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "https://<url-de-dynatrace>/agent/js/rum.js"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'dt-rum')); </script> </head> <body> <h1>Bienvenido a mi aplicación</h1> </body> </html>
Paso 3: Validar la Inyección
- Pruebas Locales:
- Verifica que el fragmento de código se incluya correctamente en los documentos HTML generados por la aplicación.
- Usa las herramientas para desarrolladores del navegador para inspeccionar la sección
<head>
y confirmar la presencia del script de Dynatrace.
- Revisión en Dynatrace:
- Accede al panel de Dynatrace y confirma que la aplicación comienza a reportar datos de experiencia del usuario.
- Verifica métricas como tiempo de carga, errores de JavaScript y transacciones de usuario.
Paso 4: Consideraciones de Kubernetes
Si deseas realizar esta implementación en Kubernetes, asegúrate de que:
- Los Pods Incluyan el Código RUM:
- Configura los contenedores de la aplicación para garantizar que las páginas HTML generadas incluyen el fragmento de código.
- Pruebas en el Entorno de Producción:
- Ejecuta pruebas en los pods de producción para garantizar que la inyección funciona en el entorno final.
4. Retos y Soluciones
Coordinación con el Equipo de Desarrollo
- Dado que la inyección manual requiere modificar el código HTML generado, la colaboración con los desarrolladores es esencial. Asegúrate de proporcionarles una guía clara y un fragmento de código actualizado.
Rendimiento
- Aunque el código de RUM de Dynatrace está optimizado, es importante evaluar el impacto en el tiempo de carga de las páginas.
Actualización de Código
- Si realizas cambios en la configuración de Dynatrace, será necesario actualizar el fragmento de código en las páginas HTML. Coordina con los desarrolladores para implementar los cambios de manera oportuna.
5. Beneficios de Implementar Dynatrace RUM
- Visibilidad Completa: Obtendrás métricas detalladas sobre la experiencia del usuario, incluyendo tiempos de carga, interacción y errores.
- Detección de Problemas: Dynatrace te alertará sobre problemas en la experiencia del usuario, permitiéndote tomar medidas correctivas rápidamente.
- Monitoreo en Tiempo Real: Los datos se capturan y reportan en tiempo real, facilitando la toma de decisiones basada en datos.
6. Resumiendo
La monitorización de aplicaciones web en entornos Kubernetes desarrollados en Go presenta desafíos únicos debido a la falta de un servidor web tradicional. Sin embargo, con la inyección manual del código JavaScript de Dynatrace RUM, es posible capturar datos detallados de experiencia del usuario.
Al coordinar con los equipos de desarrollo y seguir las mejores prácticas descritas en este artículo, tu equipo puede implementar Dynatrace RUM de manera efectiva, garantizando que las aplicaciones brinden una experiencia de usuario óptima. Esto no solo mejorará la satisfacción del cliente, sino que también fortalecerá la confianza en la calidad de las aplicaciones desplegadas en Kubernetes.