Diagnósticos detallados para servicios y aplicaciones web con Application Insights
En este artículo se explica cómo encaja Application Insights en el ciclo de DevOps.
¿Por qué necesito Application Insights?
Application Insights supervisa la ejecución de la aplicación web. Indica los errores y problemas de rendimiento, y le permite analizar el modo en que los clientes usan las aplicaciones. Funciona para aplicaciones que se ejecutan en plataformas como ASP.NET, Java EE y Node.js. Se hospeda en la nube o en el entorno local.
Resulta fundamental para supervisar una aplicación moderna mientras se ejecuta. Quiere detectar los errores antes de que lo hagan los clientes. También quiere detectar y resolver problemas de rendimiento que ralentizan la velocidad del sistema u ocasionan algún inconveniente a los usuarios. Cuando el sistema rinde como espera, también quiere saber el uso que le dan los usuarios. Por ejemplo, ¿usan la característica más reciente? ¿Les funcionan bien?
Las aplicaciones web modernas se desarrollan en un ciclo de entrega continua:
- Publique una característica o mejora nueva.
- Observe cómo funciona para los usuarios.
- Planifique el incremento de desarrollo siguiente en función de esos conocimientos.
Una parte fundamental de este ciclo es la fase de observación. Application Insights proporciona las herramientas para supervisar el rendimiento y uso de una aplicación web.
El aspecto más importante de este proceso es el diagnóstico. Si la aplicación produce un error, el negocio se pierde. El rol principal de un marco de supervisión es el siguiente:
- Detectar errores de forma fiable.
- Notificarlos de inmediato.
- Presentarle la información necesaria para diagnosticar el problema.
Application Insights realiza estas tareas.
¿De dónde proceden los errores?
Los errores de los sistemas web proceden normalmente de problemas de configuración o de interacciones incorrectas entre sus muchos componentes. La primera tarea al abordar un incidente en un sitio activo es identificar la raíz del problema. ¿Qué componente o relación provoca este incidente?
En una época más sencilla, un programa se ejecutaba en un equipo. Los desarrolladores lo probaban exhaustivamente antes de enviarlo y, después del envío, rara vez lo veían o pensaban en él de nuevo. Los usuarios tenían que aguantar los errores residuales durante muchos años.
En la actualidad el proceso es muy diferente. La aplicación se ejecuta en muchísimos dispositivos diferentes y puede ser difícil garantizar el mismo comportamiento exacto en cada uno. El hospedaje de aplicaciones en la nube significa que los errores se pueden corregir rápidamente. Pero también conlleva una continua rivalidad y la expectativa de nuevas características a intervalos frecuentes.
En estas condiciones, la única manera de mantener un control estricto sobre el número de errores es la prueba unitaria automatizada. Es imposible volver a probarlo todo manualmente en cada entrega. La prueba unitaria es ahora una parte común del proceso de compilación. Herramientas como la ayuda de Xamarin Test Cloud ayudan al proporcionar pruebas automatizadas de la interfaz de usuario en varias versiones de explorador. Estos regímenes de pruebas nos permiten tener la esperanza de que la tasa de errores encontrados en una aplicación se pueda mantener al mínimo.
Las aplicaciones web típicas tienen muchos componentes activos. Junto con el cliente (en una aplicación de explorador o dispositivo) y el servidor web, es probable que haya bastante procesamiento de back-end. Quizás el back-end es una canalización de componentes o una colección de piezas de colaboración flexible. Muchas de ellas no las podrá controlar. Son servicios externos de los que depende.
En este tipo de configuraciones, puede ser difícil y costoso probar, o predecir, cada posible modo de error, que no sea el propio sistema activo.
Preguntas
Estas son algunas preguntas que se deben formular al desarrollar un sistema web:
- ¿Se bloqueará la aplicación?
- ¿Qué ha sucedido exactamente? Si una solicitud ha dado error, quiere saber cómo se ha llegado hasta él. Necesita un seguimiento de eventos.
- ¿Mi aplicación es lo suficientemente rápida? ¿Cuánto tarda en responder a solicitudes normales?
- ¿Puede administrar el servidor la carga? Cuando aumenta la tasa de solicitudes, ¿se mantiene estable el tiempo de respuesta?
- ¿Cuál es la capacidad de respuesta de las dependencias, como las API REST, las bases de datos y otros componentes a los que llama la aplicación? En concreto, si el sistema es lento, ¿se debe al componente o está obteniendo respuestas lentas de otra cosa?
- ¿La aplicación está activa o inactiva? ¿se puede ver desde cualquier parte del mundo? Necesitas saber si se detiene.
- ¿Cuál es la causa principal? ¿El error estaba en el componente o en una dependencia? ¿Es un problema de comunicación?
- ¿Cuántos usuarios están afectados? Si tiene varios problemas a los que hacer frente, ¿cuál es el más importante?
¿Qué es Application Insights?
- Application Insights instrumenta la aplicación y envía datos de telemetría sobre ella mientras esta se ejecuta. Puede generar el SDK de Application Insights en la aplicación o aplicar la instrumentación en tiempo de ejecución. El primer método es más flexible, ya que puede agregar sus propios datos de telemetría a los módulos normales.
- Estos datos de telemetría se envían al portal de Application Insights, donde se almacenan y procesan. Aunque Application Insights se hospeda en Azure, puede supervisar cualquier aplicación web, no solo las de Azure.
- La información de telemetría se presenta en forma de gráficos y tablas de eventos.
Hay dos tipos principales de telemetría: instancias agregadas y sin formato.
- Los datos de instancia pueden incluir un informe de una solicitud que ha recibido la aplicación web. Se pueden buscar e inspeccionar los detalles de una solicitud mediante la herramienta de búsqueda del portal de Application Insights. La instancia puede incluir datos, como el tiempo que la aplicación ha tardado en responder a la solicitud, la dirección URL solicitada y la ubicación aproximada del cliente.
- Los datos agregados incluyen recuentos de eventos por unidad de tiempo, de modo que puede comparar la tasa de solicitudes con los tiempos de respuesta. También incluyen los promedios de las métricas, como los tiempos de respuesta de las solicitudes.
Las principales categorías de datos son:
- Solicitudes a la aplicación (normalmente solicitudes HTTP), con datos sobre dirección URL, tiempo de respuesta, y éxito o error.
- Dependencias como llamadas de REST y SQL que realiza la aplicación, también con identificador URI, tiempos de respuesta y éxito.
- Excepciones, que incluyen seguimientos de pila.
- Datos de vista de página, que proceden de los exploradores de los usuarios.
- Métricas como contadores de rendimiento y métricas que las escribe por su cuenta.
- Eventos personalizados que puede utilizar para realizar el seguimiento de eventos empresariales.
- Seguimientos de registros usados para la depuración.
Caso práctico: Real Madrid C.F.
El servicio web del Club de fútbol del Real Madrid presta servicio a aproximadamente 450 millones de aficionados de todo el mundo. Los aficionados acceden a él mediante exploradores web y aplicaciones móviles del club. Los aficionados pueden reservar entradas y también acceder a información y a clips de vídeo sobre resultados, jugadores y próximos partidos. Pueden realizar búsquedas con filtros, como el número de goles marcados. También hay vínculos a redes sociales. La experiencia del usuario está muy personalizada y está diseñada como una comunicación bidireccional para favorecer la participación de los aficionados.
La solución es un sistema de servicios y aplicaciones en Azure. La escalabilidad es un requisito clave. El tráfico es variable y puede alcanzar volúmenes elevados antes y durante los partidos.
Para el Real Madrid, es fundamental supervisar el rendimiento del sistema. Application Insights ofrece una vista completa del sistema para garantizar un nivel de servicio alto y fiable.
El club también obtiene un profundo conocimiento de sus aficionados: dónde están (solo el 3 % está en España), qué interés tienen en los jugadores, los resultados históricos y los próximos partidos y cómo responden a los resultados de los partidos.
La mayoría de estos datos de telemetría se recopilan automáticamente sin ningún código adicional, lo que simplifica la solución y reduce la complejidad operacional. Para el Real Madrid, Application Insights trata con 3800 millones de puntos de datos de telemetría al mes.
El Real Madrid utiliza el módulo Power BI para ver estos datos de telemetría.
Detección inteligente
Proactive diagnostics es una característica reciente. Sin ninguna configuración especial por parte del usuario, Application Insights detecta y le avisa automáticamente de cualquier aumento en la tasa de errores en la aplicación. Es lo suficientemente inteligente como para omitir un trasfondo de errores ocasionales y también de aumentos que son simplemente proporcionales a un incremento en las solicitudes.
Por ejemplo, puede haber un error en uno de los servicios de los que depende. O quizás la nueva compilación que ha implementado no funciona bien. Lo sabrá tan pronto como compruebe su correo electrónico. También hay webhooks para que pueda desencadenar otras aplicaciones.
Otro aspecto de esta característica es que realiza un análisis exhaustivo a diario de los datos de telemetría, buscando patrones de rendimiento poco habituales difíciles de detectar. Por ejemplo, puede encontrar un rendimiento lento asociado a una zona geográfica determinada, o a una versión de explorador específica.
En ambos casos, la alerta indica los síntomas detectados. También ofrece datos que necesita para diagnosticar el problema, como los informes de excepciones pertinentes.
El cliente Samtec afirmaba: "Durante una migración reciente de características, nos encontramos con una base de datos no escalada lo suficiente que estaba llegando al límite de sus recursos y provocando tiempos de espera. Las alertas de detección proactiva nos salvaron literalmente mientras clasificábamos el problema, casi en tiempo real como anunciábamos. Estas alertas junto con las alertas de la plataforma Azure nos ayudaron a solucionar el problema de forma casi instantánea. Tiempo de inactividad total < 10 minutos".
Secuencia de métricas en directo
La implementación de la compilación más reciente puede ser una experiencia Implementar la compilación más reciente puede ser una experiencia inquietante. Si hay problemas, querrá saberlo enseguida para poder dar marcha atrás en caso necesario. La secuencia de métricas activas le proporciona métricas claves con una latencia de aproximadamente un segundo.
Le permite inspeccionar inmediatamente una muestra de los errores o excepciones.
Mapa de aplicación
El mapa de aplicación detecta automáticamente la topología de la aplicación. Sitúa la información de rendimiento en primer lugar del mapa, para que pueda identificar fácilmente los cuellos de botella y los flujos problemáticos en su entorno distribuido. Con el mapa de aplicación, puede detectar dependencias de aplicaciones en los servicios de Azure.
Puede evaluar un problema comprendiendo si está relacionado con el código o la dependencia. Desde un solo lugar, puede profundizar en la experiencia de diagnóstico relacionada. Por ejemplo, la aplicación puede estar produciendo un error debido a la degradación del rendimiento en un nivel de SQL. Con el mapa de aplicación, puede verlo inmediatamente y profundizar en la experiencia de SQL Index Advisor o de Query Insights.
Análisis de registros de Application Insights
Con Análisis de registros, puede escribir consultas arbitrarias en un lenguaje eficaz de tipo SQL. El diagnóstico en toda la pila de aplicaciones pasa a ser sencillo a medida que se conectan varias perspectivas. Después, puede formular las preguntas adecuadas para correlacionar el rendimiento del servicio con las métricas empresariales y la experiencia del cliente.
Puede consultar todas instancias de telemetría y los datos sin procesar de métricas en el portal. El lenguaje incluye el filtro, unión, agregación y otras operaciones. Puede calcular campos y realizar análisis estadísticos. Hay visualizaciones tabulares y gráficas disponibles.
Por ejemplo, es fácil:
- Segmentar los datos de rendimiento de solicitud de la aplicación por niveles de clientes para comprender su experiencia.
- Buscar códigos de error específicos o nombres de eventos personalizado durante las investigaciones del sitio activo.
- Profundizar en el uso de aplicaciones de clientes específicos para entender cómo se adquieren y adoptar las características.
- Realizar un seguimiento de las sesiones y los tiempos de respuesta para usuarios específicos para que los equipos de operaciones y soporte técnico puedan proporcionar soporte al cliente al instante.
- Determinar las características de aplicaciones utilizadas con frecuencia para responder a preguntas de priorización de características.
El cliente DNN afirma: "Application Insights nos ha proporcionado la parte que faltaba de la ecuación para poder combinar, ordenar, consultar y filtrar los datos de acuerdo con nuestras necesidades. Al permitir que nuestro equipo use su propio ingenio y experiencia para buscar datos con un lenguaje de consulta avanzado, hemos podido descubrir cosas y resolver problemas que ni siquiera sabíamos que teníamos. Un gran número de respuestas interesantes proceden de las preguntas que comienzan con 'Me pregunto si...' ".
Integración de herramientas de desarrollo
Application Insights se integra con herramientas de desarrollo.
Configuración de Application Insights
Visual Studio y Eclipse tienen herramientas a fin de configurar los paquetes SDK correctos para el proyecto que está desarrollando. Hay un comando de menú para agregar Application Insights.
Si usa una plataforma de registro de seguimiento, como Log4N, NLog o System.Diagnostics.Trace, tiene la opción de enviar los registros a Application Insights junto con los demás datos de telemetría, de modo que pueda correlacionar fácilmente los seguimientos con solicitudes, llamadas de dependencia y excepciones.
Telemetría de búsqueda en Visual Studio
A medida que desarrolla y depura una característica, puede ver y buscar los datos de telemetría directamente en Visual Studio. Puede usar las mismas instalaciones de búsqueda que en el portal web.
Cuando Application Insights registra una excepción, puede ver el punto de datos en Visual Studio y saltar directamente al código pertinente.
Durante la depuración, puede mantener los datos de telemetría en la máquina de desarrollo. Puede verlo en Visual Studio sin necesidad de enviarlo al portal. Esta opción local evita mezclar la depuración con la telemetría de producción.
Elementos de trabajo
Cuando se genera una alerta, Application Insights puede crear automáticamente un elemento de trabajo en su sistema de seguimiento de trabajos.