Monitoriza tu aplicación ASP.NET Core con Application Insights
¿QUÉ ES APPLICATION INSIGHTS?
Application Insights es una herramienta de ASP.NET Core que se utiliza para realizar un seguimiento de nuestra aplicación en el portal de Azure. Esta herramienta nos ayuda a visualizar información del usuario, y por tanto, a comprender qué está haciendo realmente el propio usuario con nuestra aplicación. Además, podremos diagnósticar todo tipo de problemas de rendimiento y errores con facilidad. Está enfocada principalmente para desarrolladores, y que estos puedan ir mejorando el rendimiento y uso de la app, comprendiendo mejor las necesidades del usuario.
Entre las funcionalidades de App Insights destacan las siguientes:
- Personalizar trazas o líneas de texto (tracking) en cualquier parte del entorno de mi aplicación y visualizarlas en el portal de Azure. Su comportamiento es semejante a los Logger con la diferencia de que una traza la puedo implementar en App Insights, y el funcionamiento de Logger se restringe a App Service.
- Realizar métricas (telemetría) para crear cálculos como la media, suma, máxima, mínima, etc.
- Personalizar eventos para saber en qué acción ha pulsado el usuario.
TUTORIAL
En este tutorial voy a explicar paso por paso la realización una aplicación ASP.NET Core para que los usuarios puntúen el rendimiento de los jugadores del Atlético de Madrid de la última temporada. Por otro lado, en el panel de Application Insights de Azure haré un seguimiento de la aplicación en función de la información registrada.
Antes crear nuestro proyecto lo primero que tenemos que hacer es ir al portal de Azure y buscar App Insights para crear los recursos.
Le ponemos un nombre, seleccionamos Aplicación web ASP.NET en el tipo de aplicación, y creamos un recurso nuevo de Application Insights.
A continuación, vamos a crear un proyecto ASP.NET Core Web Application donde vamos a incluir las siguientes características:
- Una vista que mostrará una lista de jugadores del Atlético de Madrid dónde el usuario podrá puntuar el rendimiento del jugador del 1 al 10 durante la última temporada. Además, el usuario podrá introducir su nombre antes de realizar el submit.
- Un controlador donde incluiremos las trazas, las métricas y los eventos para poder monitorizar nuestra aplicación en el portal de Azure con App Insights.
Crearemos un proyecto Web Application con la plantilla propia de MVC, es decir, con vistas, controladores y modelos.
Ahora vamos a enlazar nuestra aplicación con Aplication Insights para poder monitorizarla en Azure.
Hacemos clic derecho en “Connected Services” y clicamos sobre “Add Connected Service”
Seleccionamos la opción “Monitoring with Application Insights”
A continuación, clicamos sobre “Get Started”.
Seleccionamos nuestro recurso creamos previamente en el portal de Azure y le clicamos en “Register”.
Si clicamos en “Configure settings” vemos que nos configura todo por defecto
Ahora vamos al portal de Azure y nos aseguramos que la clave de instrumentación de los recursos de Aplication Insights es la misma que la que ha creado en el archivo “appsettings.json” de nuestra aplicación Core.
A continuación, también debemos asegurarnos de que dentro de “Program.cs” el servidor usará Application Insights.
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseApplicationInsights()
.UseStartup<Startup>();
Ahora actualizamos el Nuget de Microsoft.ApplicationInsights.AspNetCore a la última versión.
Instalamos el Nuget de Microsoft.ApplicationInsights.Web
Instalamos el Nuget de Microsoft.ApplicationInsights.TraceListener
Ahora nos vamos a Statup.cs y en el método Configure() indicamos que utilizaremos las trazas de Azure Application Insights añadiendo la siguiente línea de código:
Trace.Listeners.Add(new ApplicationInsightsTraceListener());
En nuestra aplicación vamos a crear métricas personalizadas, es decir, los usuarios podrán introducir su nombre, y las puntuaciones de cada jugador. Cada vez que hagan la petición nosotros podremos visualizar los valores que ha introducido cada usuario en el portal de Azure mediante trazas.
Nos creamos el controlador HomeController
A continuación, nos creamos un ActionResult llamado PuntuarFutbolistas con HttpGet y HttpPost. En el Post es donde recibiremos el nombre de usuario y la puntuación de cada futbolista.
Ahora vamos a crear la vista PuntuarFutbolistas
Le damos funcionalidad a la página de tal forma que al realizar el submit, le mandemos al controlador el nombre de usuario y la puntuación de cada jugador.
Para cada futbolista he creado 10 input radio, de tal modo que le podremos dar una puntuación del 1 al 10.
Aquí vemos el resultado de la vista renderizada.
Ahora crearemos todo lo necesario en el HttpPost de la acción PuntuarFutbolistas para poder monitorizar la aplicación dentro del panel de Application Insights en Azure.
Creamos una traza para cada jugador con la clase Trace, dónde guardamos un texto con el nombre de usuario y la puntuación de cada jugador utilizando el método TraceInformation().
Con las trazas podemos ver que en que orden se han ejecutan las acciones y si lo hacen de forma correcta.
A continuación, utilizamos la clase MetricTelemetry() para crear una métrica por cada jugador, donde guardamos el nombre de la métrica en la propiedad Name y la puntuación en la propiedad Sum.
La puntuación será el valor que tomará la métrica para realizar las operaciones de count, media, máximo, mínimo y sum en base al número de usuarios que han puntuado al jugador.
Por último, creamos un evento para cada jugador con la clase TelemetryClient(), y los métodos TrackEvent() para asignarle un nombre, y TrackMetric() para asignarle una métrica.
Cada vez que un usuario puntúa a un jugador se lanza el evento para dicho jugador. De esta forma podemos comprobar si las acciones se están ejecutando.
Una vez terminado el código, cargamos la página e introducimos las puntuaciones y el nombre de usuario. Si está todo listo, hacemos el submit y ya podremos comprobar los cambios en la página de Azure.
Entramos en nuestros recursos de App Insights, y en la ventana Live Metric Stream vemos los eventos que estamos realizando en tiempo real, además de las trazas.
Ahora si nos vamos a la zona de Métricas podemos visualizar las métricas de cada jugador.
Nota: las métricas suelen tardar un minuto en actualizarse más o menos.
En el ESPACIO DE NOMBRES DE MÉTRICAS elegimos nuestras métricas personalizadas
Y en MÉTRICA vemos todas las métricas que nos hemos creado. En este caso seleccionamos «Votación Koke«
Y por último en agregación podemos visualizar todas las operaciones de cada métrica:
- Count indica el número de usuarios que han puntuado al jugador. En este caso 2 usuarios han votado Koke.
- Avg indica la media de puntuación de un jugador en función del número de usuarios que hayan votado. En este caso Koke tiene una media de 8 sobre 10.
- Max muestra la puntuación máxima de un jugador en función del número de usuarios que hayan votado. En este caso Koke tiene una puntuación máxima de 9.
- Min muestra la puntuación mínima de un jugador en función del número de usuarios que hayan votado. En este caso Koke tiene una puntuación mínima de 7.
- Sum indica la suma de todas las puntuaciones registradas de un jugador. En este caso la suma total de puntuaciones de Koke es 16.
Además de estas dos zonas hay muchas otras en el panel que te permiten supervisar la aplicación como Errores, Rendimiento, Servidores, Usuarios, Sesiones, etc.
Por otro lado, en la ventana Diagnostic Tools de Visual Studio podemos visualizar las acciones de Application Insights que se van realizando (métricas, trazas, eventos, etc.) y almacenando en Azure estando en local.
Si queremos deshabilitar Application Insights en la aplicación, incluiremos esta línea de código dentro de Startpup.cs al inicio del método Configure().
var configuration = app.ApplicationServices.GetService<Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration>();
configuration.DisableTelemetry = true;
CONCLUSIÓN
La información que se registra en una aplicación es fundamental para saber qué características de nuestra aplicación gustan a los usuarios o cuáles deberíamos mejorar. Por tanto, la monitorización con Application Insights es una herramienta muy útil para conocer dicha información y supervisar fallos de desarrollo o rendimiento.
Autor: Carlos Busón Matutano
Curso: Microsoft MCSA Web Applications + Microsoft MCSD App Builder + Xamarin
Centro: Tajamar
Año académico: 2018-2019
GitHub: https://github.com/cbumat/ProyectoVotarFutbolistas
Fichero .rar: http://www.mediafire.com/file/9r4divb5pe12s1f/ProyectoVotarFutbolista.rar/file