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.

Captura de pantalla (1122)

Rellenamos los detalles del proyecto:

Captura de pantalla (1124)

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.

Captura de pantalla (1125) Captura de pantalla (1126)

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:

Captura de pantalla (1128)

Elegimos la opción Service Dependencies:

Captura de pantalla (1129)

Añadimos una dependencia de tipo Azure Application Insights:

Captura de pantalla (1130)

Seleccionamos el recurso que corresponda:

Captura de pantalla (1131)

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:

Captura de pantalla (1133)

Además de estos NuGet tenemos que añadir algunos más. Y estos son los que habría que tener en total:

Captura de pantalla (1179)

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:

Captura de pantalla (1142) Captura de pantalla (1143)

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.

Captura de pantalla (1147)

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:

Captura de pantalla (1144)

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().

Captura de pantalla (1153)

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.

Captura de pantalla (1154)

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.

Captura de pantalla (1154)

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:

Captura de pantalla (1160) Captura de pantalla (1161)

Para ver nuestra métrica personalizada hay que dirigirse al apartado de Métricas:

Captura de pantalla (1159)

En el menú desplegable llamado «Espacio de Nombre de Métricas«, en el apartado de «CUSTOM» pulsamos sobre «azure.applicationinsights«:

Captura de pantalla (1156)

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:

Captura de pantalla (1157)

Y en Agregación seleccionar Suma:

Captura de pantalla (1158)

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:

Captura de pantalla (1163)

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»:

Captura de pantalla (1164)

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:

Captura de pantalla (1165)

En el método Post de Index añadir los parámetros correspondientes para que reciba el postre y la cantidad que haya insertado:

Captura de pantalla (1166)

El evento llamado «Pedido Realizado» lo he llamado «Pedido de Bocadillos«:

Captura de pantalla (1173)

Y ahora es cuando añadimos el segundo evento al cual he llamado «Pedido de Postre«

Captura de pantalla (1167)

Si ejecutamos la aplicación y realizamos un nuevo pedido podremos verlo reflejado en nuestro Portal de Azure.

Captura de pantalla (1168)

Veremos en la zona de Métricas que ya salen ambas, tanto la de «Pedidos bocadillos» como «Pedidos postre»:

Captura de pantalla (1170)

Podemos comprobar que también ambas métricas siguen llevando la cuenta de las cantidades insertadas en el formulario:

  • Pedidos postre:
Captura de pantalla (1171)
  • Pedidos bocadillos:
Captura de pantalla (1172)

Si nos dirigimos al apartado de Métricas en Directo => Ejemplo de Telemetría veremos ambos eventos que acabamos de crear:

Captura de pantalla (1169)
  • 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:

Captura de pantalla (1173)

Y ahora usamos el objeto de la clase TraceTelemetry para crear la traza:

Captura de pantalla (1173)

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.

Captura de pantalla (1173)

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.

Captura de pantalla (1176)

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.

Captura de pantalla (1175)

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

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.