Métricas personalizadas, eventos y trazas con Application Insights
En este artículo hablaré sobre algunas de las funcionalidades que ofrece Application Insights.
Application Insights es una característica de Azure Monitor usada para supervisar la aplicaciones en directo. Con esta herramienta es posible visualizar la acciones que se realizan sobre nuestras aplicaciones en producción.
Es una herramienta capaz de detectar anomalías en el rendimiento y diagnosticar problemas; también, analiza la actividad de los usuarios dentro de la aplicación.
https://docs.microsoft.com/es-es/azure/azure-monitor/app/app-insights-overview
Para poder usar Application Insights es necesario tener una suscripción a Azure. Aunque sea un recurso gratuito (a pesar de que para usar según qué características sea de pago), hay que tener una cuenta en el Portal.
Teniendo nuestra cuenta de Azure, iniciamos sesión y crearemos un nuevo recurso de tipo Application Insights.
Rellenamos los detalles del proyecto:
Pulsamos sobre Revisar y crear y veremos que nos habrá creado el recurso.
A continuación, vamos a montar una aplicación la cual conectaremos con este recurso para que use Application Insights. Será una ASP .Net Core Web Application y usaré la plantilla Model-View-Controller.
Como ya sabremos, esta plantilla viene con un controlador Home que tiene un método Index con su vista creada por lo cual, en Index.cshtml es dónde voy a trabajar.
Para este ejemplo voy a realizar una aplicación que tendrá un formulario en el que el usuario deberá de poner su nombre, escoger entre una lista de bocadillos y indicar la cantidad que quiere del bocadillo escogido.
Ahora, vamos a conectar la aplicación para que pueda detectar los cambios que luego se visualizan en el portal de Azure. Para hacer esto primero debemos de añadir un nuevo servicio conectado:
Elegimos la opción Service Dependencies:
Añadimos una dependencia de tipo Azure Application Insights:
Seleccionamos el recurso que corresponda:
Y pulsamos sobre Next hasta el final. La última pantalla será un Summary of changes que nos informa de los cambios que va a realizar; entre ellos, los NuGet que va a añadir:
Además de estos NuGet tenemos que añadir algunos más. Y estos son los que habría que tener en total:
Una vez hecho esto, en el fichero app.settings.json se podrá visualizar que ha agregado una clave de instrumentación la cual es la misma que se tiene en el portal:
Cabe destacar que en algunas ocasiones no lo hace automático y se debe de escribir la clave de instrumentación de forma manual.
- Eventos y Métrica Personalizada
Teniendo el proyecto listo, vamos a empezar realizando el código para crear un evento y una métrica personalizada.
En el HomeController haremos la inyección de dependencias de la clase TelemetryClient. Esta clase es la encargada de conectar la aplicación con el servicio de Application Insights en Azure.
Trabajaremos en el método Index de este controlador y le primer paso va a ser agregara un método HttpPost que recibirá los valores que le vengan del formulario:
Dentro de este método configuraremos las acciones para posteriormente visualizar los datos en el portal Azure. Empezaremos usando el método de la clase TelemetryClient: TrackEvent().
Este método servirá para poder realizar el seguimiento de nuestro evento. Como parámetro hay que indicarle un nombre; en este caso, le he llamado «Pedido Realizado«.
Teniendo esto vamos a hacer uso de la clase MetricTelemetry para crear nuestra métrica personalizada. Será una métrica para los pedidos del cliente.
Esta clase tiene distintas propiedades. Para este ejemplo usaré: Name y Sum.
La propiedad Name permite darle un nombre a la métrica y la propiedad Sum llevará la suma de todos los bocadillos que se hayan pedido.
Además de Sum, también hay otras propiedades de agregación: Count, Average, Max, Min.
Para poder realizar el seguimiento de esta métrica usaremos el método de TelemetryClient: TrackMetric() al cual habrá que pasarle el objeto de la métrica que acabamos de crear.
Como efecto visual he añadido un ViewBag que indicará cuando se ha realizado el envío de los datos.
Por el momento, comprobemos la funcionalidad de lo que acabamos de realizar. Para ello, ejecutamos la aplicación y nos dirigimos a nuestro recurso creado en nuestro portal de Azure. Realizamos un pedido:
Para ver nuestra métrica personalizada hay que dirigirse al apartado de Métricas:
En el menú desplegable llamado «Espacio de Nombre de Métricas«, en el apartado de «CUSTOM» pulsamos sobre «azure.applicationinsights«:
En el menú de Métrica deberá de aparecer «Pedidos bocadillos» que es el nombre que le hemos dado a la métrica con la MetricTelemetry y su propiedad Name:
Y en Agregación seleccionar Suma:
Es posible que los datos puedan demorarse un poco (alrededor de 60 segundos) Pero transcurrido este tiempo veremos que ha recibido la cantidad de 2 bocadillos:
En cuanto al evento, si vamos a la zona de Métricas en Directo y realizamos otro pedido veremos que saldrá reflejado en la zona de «Ejemplo de Telemetría»:
Como se puede ver, el nombre del evento es «Pedido Realizado» que es el nombre que le dimos usando el método TrackEvent de la clase TelemetryClient.
También sería posible añadir otro evento así como otra métrica personalizada. Para ver esto, haré unas modificaciones a la vista y al código de mi proyecto.
Añadir un nuevo dropdown con una serie de postres y una nueva caja de texto para que el usuario pueda insertar la cantidad de postres que quiere:
En el método Post de Index añadir los parámetros correspondientes para que reciba el postre y la cantidad que haya insertado:
El evento llamado «Pedido Realizado» lo he llamado «Pedido de Bocadillos«:
Y ahora es cuando añadimos el segundo evento al cual he llamado «Pedido de Postre«
Si ejecutamos la aplicación y realizamos un nuevo pedido podremos verlo reflejado en nuestro Portal de Azure.
Veremos en la zona de Métricas que ya salen ambas, tanto la de «Pedidos bocadillos» como «Pedidos postre»:
Podemos comprobar que también ambas métricas siguen llevando la cuenta de las cantidades insertadas en el formulario:
- Pedidos postre:
- Pedidos bocadillos:
Si nos dirigimos al apartado de Métricas en Directo => Ejemplo de Telemetría veremos ambos eventos que acabamos de crear:
- Trazas.
Application Insights también permite crear y realizar el seguimiento de trazas. De esta forma, podemos tener una idea más explícita de lo que se está haciendo la aplicación. Esto se hace a través de la clase TraceTelemetry que permite recibir en su constructor, entre otras sobrecargas, un String que será el mensaje que se mostrará en Azure.
Para ello primero escribiremos los String con los mensajes que indicarán el pedido del usuario, tanto de los postres como de los bocadillos:
Y ahora usamos el objeto de la clase TraceTelemetry para crear la traza:
Como se ha mencionado antes, a cada objeto se le pasa el mensaje correspondiente.
Con el método TrackTrace() de la clase TelemetryClient mandará los objetos para luego poder visualizar los mensajes en Azure.
Podremos leer este mensaje en el apartado de Métricas en Directo. Por tanto, ejecutamos la aplicación y dentro de nuestro recurso Application Insights nos dirigimos al apartado mencionado para que se conecte con la aplicación. Después, hacemos un pedido.
Y si miramos en la zona «Ejemplo de Telemetría» no sólo se mostrarán los eventos realizado si no que también se mostrarán los dos mensajes que le han pasado al objeto TraceTelemetry.
Y hasta aquí el tutorial.
Estas son solo algunas de las funcionalidades que tiene Application Insights ya que es una herramienta que se encarga de supervisar una variedad de temas como: tasas de solicitud, tiempos de respuesta y error, excepciones, número de usuarios y sesiones, llamadas AJAX desde la página web, etc.
En conclusión, una herramienta de lo más útil para un desarrollador.
Autora: Aurora Moreno López
Curso: Desarrollo Web Full Stack, MultiCloud y Multiplataforma
Centro: Tajamar
Año académico: 2020-2021
Enlace al proyecto de GitHub: https://github.com/auroraMoreno/MvcPedidosAppInsights