top of page
  • Foto del escritorAlejandro Caravantes Molina

Envío de trazas desde Plugins hacia Application Insights


Aunque estemos en un cada vez más extendido concepto "low-code/no-code", es muchísimo más frecuente de lo que en un principio puede parecer, necesitar implementar alguna funcionalidad escribiendo código customizado. Para estos casos en los que nos encontramos en un entorno de desarrollo, implementando funcionalidad con Plugins de Dataverse, resulta muy útil activar las trazas y logging a nivel de instancia para depurar y optimizar lo que estamos programando. Si no sabes como hacerlo, aquí tienes la documentación oficial.


Pero también es cierto que si necesitamos tener información detallada sobre la ejecución de los Plugins en entornos productivos, la funcionalidad que comento en el párrafo anterior puede no ser la mejor solución.


Por si no lo conocías, Application Insights es el componente de Azure Monitor que nos permite analizar, monitorizar y supervisar prácticamente cualquier tipo de aplicación. Es cada vez maz común encontrarnos en algún cliente donde ya se esté utilizando este componente como destino de las trazas y los logs de las aplicaciones existentes. Por lo que si te encuentras en este escenario, te invito a que sigas leyendo y exprimas al máximo Application Insights para analizar y monitorizar tambien tus aplicaciones basadas en modelos y en concreto los Plugins que hayas implementado.


Manos a la obra.

Lo primero que necesitamos es crear un recurso Application Insights en una suscripción de Azure que resida en el mismo tenant del entorno de Dataverse con el que vamos a trabajar. No me voy a detener en esto, ya que es algo extremandamente sencillo como puedes ver aquí.


Una vez esté creado el recurso en Azure, ve al portal de administración de Microsoft Power Platform, y selecciona Análisis, Exportación de datos y haz clic en el botón Nueva exportación de datos. Se abrirá un panel lateral donde debes seleccionar el entorno con el que vas a trabajar.







Cuando lo hayas hecho selecciona Siguiente e introduce los datos del recurso Application Insights que has creado en el paso anterior: Suscripción, Grupo de Recursos y Recurso.


Fíjate que sólo haciendo lo que acabamos de hacer ya se están enviando datos de telemetría y logs hacia el recurso de Azure, por lo que ya podemos explotar cierta información sobre el rendimiento del entorno que acabamos de conectar.


Ahora vamos a actualizar el código de nuestro Plugin para que envíe las trazas al componente Application Insights que acabamos de configurar. Para ello lo único que tenemos que hacer es obtener el servicio de log, desde el ServiceProvider de nuestro Plugin con la siguiente sentencia:


Es importante recalcar que aunque tengamos la integración con Application Insights, y estas se envíen al componente de Azure a través de la variable logger, si quieres seguir enviando trazas a la tabla Plug-in Trace Logs de Dataverse, debes seguir utilizando la variable tracer como siempre se ha hecho.


A partir de aquí sólo hay que utilizar el método LogInformation para que las trazas lleguen a Application Insights. En este caso yo dispongo de dos Plugins: uno que se ejecuta al actualizar Contactos y otro que se desencadena al actualizar Cuentas.


Fíjate el mensaje que utilizo, para generar la traza que se envía a Azure y observa además los campos que obtengo de PostImage para evitar hacer llamadas innecesarias a Dataverse:


Cuando hayas incluido todas las trazas necesarias en el Plugin, actualízalo con Plugin Registration Tool y cuando se hayan desencadenado varias ejecuciones, dirígete a la consulta de Registros de tu componente Application Insights. Primero lanza una consulta sobre la tabla traces y comprueba que estan llegando trazas. Observa la estructura de los datos que se almacenan en el componente. Verás que hay un montón de información adicional al mensaje que hemos construido que... ¡puedes explotar como quieras!


¿Como quiera?. Si. Has leido bien. Si juegas un poquito con Kusto Query, verás que puedes explotar estas trazas a tu antojo y utilizando consultas con una estructura parecida a la que ves a continuación...

...puedes construir gráficos que de un simple vistazo te cuenten qué Plugins son los que más se están ejecutando...


...o qué usuarios son los que están desencadenando la ejecución de los Plugins.


Application Insights almacena en distintas tablas toda la información de telemetría que podamos necesitar:

  • Page Views para registrar todas las acciones que cada usuario realiza sobre nuestras aplicaciones basadas en modelos.

  • Exceptions para almacenar todas las excepciones no manejadas o customizadas.

  • Requests, donde se van a guardar todas las llamadas a través de Web Api y Organization Service.

  • Dependencies, donde podremos consultar todas las operaciones como ExecuteMultipleRequest, Retrieve, etc

  • Traces, el cajón de sastre donde va todo lo que se invoque desde lel método LogInformation.


Esto no se queda sólo en construir gráficos. Por si no lo sabías, también podemos configurar Application Insights para "monitorizar" las trazas, y si alguna de estas trazas muestra información no esperada, el propio componente genera alertas vía mail/sms o incluso desencadena la ejecución de una Azure Function o Logic App. Aquí tienes la documentación oficial.


Gracias por tu tiempo y.... ¡Nos vemos en la próxima!

bottom of page