¿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.

11ba214bc0fe0d83eb94cbb5bb710f13

Le ponemos un nombre, seleccionamos Aplicación web ASP.NET en el tipo de aplicación, y creamos un recurso nuevo de Application Insights.

8d3a9ac2921c57d7138cffd7d9587709

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.
18e6634438cfac3af212fae9788387a4

Crearemos un proyecto Web Application con la plantilla propia de MVC, es decir, con vistas, controladores y modelos.

ee6dd8af7f70f1ad761bd13e2509f403

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

tghghbfdghfrdgtjhty6

Seleccionamos la opción Monitoring with Application Insights

dfgh354635687jhggk

A continuación, clicamos sobre “Get Started”.

8351aeec423c7060f9450216c40728dd

Seleccionamos nuestro recurso creamos previamente en el portal de Azure y le clicamos en “Register”.

dgfhfghfg45hgrtf567

Si clicamos en “Configure settings” vemos que nos configura todo por defecto

62247dedb593fab2d09f2446316e702c

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.

dfgh354635687jhggk457hygrh

771494a94333f207b053f5fe73f228ec

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.

dfgh32wqef87jhggk457hygrh

Instalamos el Nuget de Microsoft.ApplicationInsights.Web

dfgh32wqef87fggk457hygrh

Instalamos el Nuget de Microsoft.ApplicationInsights.TraceListener

dfgh2532wqef87fggk457hygrh

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

438a899589781f168ec3d34845275923

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.

bcf07bef5444f0eae3b1a5c5a6dedd20

Ahora vamos a crear la vista PuntuarFutbolistas

a23f3d4ec3f9a9d551154deb1168584d

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.

ee056fec5854c97486822bea15bdd05e

Aquí vemos el resultado de la vista renderizada.

77179e74e2c43b7b8e1baa297a46945a

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.

9e801cc059f4d469a517f32e56ee2a53

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.

5d71b1837d9d4f0fdab15c92b242bdb8

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.

f50bf918f97daf062eea3a2d1020d7fb

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.

5eegdfh4565hrth

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.

4e492575f90c6809a0bd106216493b0d
9a7a856b5e9e6fa4c50582007eb979a9

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

5eegdfh4565hrth5gfhg

Y en MÉTRICA vemos todas las métricas que nos hemos creado. En este caso seleccionamos «Votación Koke«

5eegdfh4565hrth5gfhg56453

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.
dfff57ef869faab223cee339d63413a5
  • 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.
fa728cd8f4d0506b5e458acfbdb3f2ed
  • 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.
fcb4066a959b25c3d9b2135e83e8be5c
  • 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.
439d269a17ad31eb1f45e92eace76c9a
  • Sum indica la suma de todas las puntuaciones registradas de un jugador. En este caso la suma total de puntuaciones de Koke es 16.
6e92d845968298bf58be1c9b7f618845

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.

07836ca79df2c4febd71ea26911bbded
905c9287f5499bae3b8904e86bad912d

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

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.