Monitorizar aplicaciones en IIS con el agente de Application Insights

Esta semana he estado jugando con diferentes formas de monitorizar aplicaciones con Application Insights. En algunas de ellas ya se estaban utilizando loggers como log4net, Serilog, etcétera y en otras simplemente no teníamos la posibilidad de inyectarle ninguna librería que nos ayudase en la tarea. Para este último escenario podemos utilizar el agente de Application Insights para servidores locales, del cual quiero hablarte hoy.

El objetivo

Imagínate que tengo un IIS con una configuración parecida a la siguiente:

IIS con varias aplicaciones sin instrumentalizar

Todas estas aplicaciones, por el motivo que sea, no se pueden instrumentalizar, es decir que no podemos instalarle la librería de Application Insights (posiblemente porque no tengamos acceso al código fuente). Sin embargo, es importante para nosotros monitorizar las mismas del mismo modo que estamos haciendo con el resto de aplicaciones, con el objetivo de que sea más sencilla la generación de informes, alertas, etcétera. Además cada una de ellas debería de enviar la información que recopile a su propio recurso del servicio.

Cómo instalar agente de Application Insights

Este agente es en realidad un módulo de PowerShell que podemos instalar de manera sencilla. Este solo nos permite monitorizar aplicaciones .NET en IIS. Para instalarlo lo primero que debemos hacer es lanzar los siguientes comandos:

# PowerShellGet installation
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
Set-PSRepository -Name "PSGallery" -InstallationPolicy Trusted
Install-Module -Name PowerShellGet -Force 

Con ellos lo que consigo es instalar en mi servidor PowerShellGet si no lo tenía previamente. Gracias a este podré instalar fácilmente el agente de Application Insights como sigue:

#Application Insights Installation
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force
Install-Module -Name Az.ApplicationMonitor -AllowPrerelease -AcceptLicense

Configurar la supervisión paras las diferentes aplicaciones en IIS

Si nuestro IIS solo tuviera una aplicación la forma de habilitar la supervisión sería simplemente haciendo uso del siguiente comando:

#Configure just one web site
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force
Enable-ApplicationInsightsMonitoring -ConnectionString 'InstrumentationKey=YOUR_INSTRUMENTTION_KEY;IngestionEndpoint=https://REGION.in.applicationinsights.azure.com/'

Nota: la cadena de conexión que espera esta configuración puedes encontrarla en la sección Overview, apartado Essentials, del recurso de Application Insights que quieres asociar:

Application Insights – Connection String

Sin embargo, la realidad es que normalmente nuestros IIS suelen hospedar más de una aplicación. Es por ello que nuestra configuración debería de ser un poco más elaborada. Siguiendo el ejemplo anterior, donde tengo tres aplicaciones (Default Web Site, WebAppOnIIS y WebFormsOnIIS) la configuración podría de ser como la que sigue:

#Configure multiple web sites
 Enable-ApplicationInsightsMonitoring -InstrumentationKeyMap `
       @(@{MachineFilter='.*';AppFilter='Default Web Site'},
          @{MachineFilter='.*';AppFilter='WebAppOnIIS';[email protected]{InstrumentationKey='WebAppOnIIS_INSTRUMENTATION_KEY'}},
          @{MachineFilter='.*';AppFilter='WebFormsOnIIS';[email protected]{InstrumentationKey='WebFormsOnIIS_INSTRUMENTATION_KEY'}},
          @{MachineFilter='.*';AppFilter='.*';[email protected]{InstrumentationKey='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxdefault'}}) 

Como puedes ver que es posible configurar diferentes casuísticas: En primer lugar, para la aplicación Default Web Site no se le asigna ninguna configuración de Application Insights y por lo tanto quedará sin monitorizar. Para las aplicaciones WebAppOnIIS y WebFormsOnIIS se han configurado dos instrumentation keys independientes. Por último para el resto de aplicaciones que no cumplen con lo anterior se podría asignar otra instrumentation key adicional, aunque lo recomendable es que cada aplicativo tenga su propio Application Insights.

La forma más sencilla de comprobar que la configuración funciona correctamente es accediendo a cada uno de los recursos y a través del apartado de Live Metrics ver si se genera movimiento cuando se accede a cada uno de estos aplicativos en tu Internet Information Services.

Live Metrics funcionando después de configurar el agente de Application Insights

¡Saludos!