Application Insights loves Java

Estas semanas estoy trabajando mucho, mucho, mucho con entornos Java, integrándolos con la plataforma Microsoft Azure desde diferentes perspectivas. Una de ellas, que creo que es muy importante que la conozcas, y es la relacionada con la telemetria. De hecho, no es necesario que modifiques tu código más que un par de puntos: la configuración  de tu web.xml y la cabecera de tu layout.

En este post quiero contarte qué necesitas modificar y mostrarte lo fácil que es obtener datos utilizando Application Insights en tu aplicación Java, en tan sólo tres pasos.

Paso 1: crea una cuenta de Application Insights para Java

Lo primero que necesitas es crear en el nuevo portal de Microsoft Azure una cuenta de Application Insights. Para ello haz clic en New y busca Application Insights.

New - Application Insights
New – Application Insights

Durante la creación, debes selecciona como Application type el tipo Java web application.

Application Insights - Application Type
Application Insights – Application Type

Una vez que tengas el servicio creado tendrás los datos necesarios para integrar tu aplicación con la plataforma.

Paso 2: Descarga el SDK

Lo siguiente es descargar el SDK de Application Insights para Java. Está disponible a través de este enlace. Como puedes ver, se trata de un conjunto de archivos jar que permitirán a tu aplicación comunicarse con el servicio y enviar la información que recolecte.

Application Insights SDK for Java
Application Insights SDK for Java

Paso 3: Configura tu aplicación

La información que recoge Application Insights proviene de dos sitios: del lado del cliente y el del servidor. Para ello, tienes que modificar la aplicación desde estos dos puntos:

Desde el lado del servidor, lo que vas a configurar es un filter en el archivo web.xml el cual necesitará las librerías que descargaste en el paso anterior. En este ejemplo voy a mostrarte dónde deberías ubicar dichas librerías en un servidor Tomcat en una web app en Microsoft Azure, pero puede estar ubicado en cualquier otro sitio. Accede a la ruta /site/wwwroot/bin/apache-tomcat-X.X.X/lib y copia los jar de la carpeta sdk que descargaste. Además debes crear un archivo llamado ApplicationInsights.xml con la siguiente información:

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings" schemaVersion="2014-05-30">

  <!-- The key from the portal: -->
  <InstrumentationKey>YOUR_INSTRUMENTATION_KEY</InstrumentationKey>

  <!-- HTTP request component (not required for bare API) -->
  <TelemetryModules>
    <Add type="com.microsoft.applicationinsights.web.extensibility.modules.WebRequestTrackingTelemetryModule"/>
    <Add type="com.microsoft.applicationinsights.web.extensibility.modules.WebSessionTrackingTelemetryModule"/>
    <Add type="com.microsoft.applicationinsights.web.extensibility.modules.WebUserTrackingTelemetryModule"/>
  </TelemetryModules>
  <!-- Events correlation (not required for bare API) -->
  <!-- These initializers add context data to each event -->
  <TelemetryInitializers>
    <Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebOperationIdTelemetryInitializer"/>
    <Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebOperationNameTelemetryInitializer"/>
    <Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebSessionTelemetryInitializer"/>
    <Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebUserTelemetryInitializer"/>
    <Add type="com.microsoft.applicationinsights.web.extensibility.initializers.WebUserAgentTelemetryInitializer"/>
  </TelemetryInitializers>
</ApplicationInsights>

Como puedes ver en el XML anterior, necesitas recuperar tu Instrumentation Key. Esta se encuentra en la cuenta de Application Insights que acabas de crear.

Application Insights - Instrumentation key
Application Insights – Instrumentation key

Ubica el archivo en el mismo directorio donde pusiste los jars. La configuración en este ejemplo está a nivel de tomcat, ya que suponemos que al ser un servicio Web App sólo se ocupará de hospedar un sitio web, o pequeños sitios que trabajan como uno solo y comparten la misma cuenta de Application Insights. Si fuera el segundo caso, movería el filter al archivo web.xml que está a nivel de tomcat, no a nivel de webapp.

Ahora accede a tu webapp y modifica el archivo web.xml, ubicado en el directorio WEB-INF.

 <filter>
    <filter-name>ApplicationInsightsWebFilter</filter-name>
    <filter-class>
        com.microsoft.applicationinsights.web.internal.WebRequestTrackingFilter
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>ApplicationInsightsWebFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

Ya has completado la configuración necesaria para enviar los datos del lado del servidor. El último paso es añadir el siguiente script en el layout de tu sitio web, justo antes del cierre de la etiqueta head. El mismo puedes encontrarlo en el portal de Microsoft Azure, accediendo al servicio y haciendo clic en el icono Quick Start.

Application Insights - End-user usage analytics code
Application Insights – End-user usage analytics code

Reinicia tu sitio web y comienza a navegar y a realizar acciones. Verás que al cabo de unos minutos tendrás tus primeros datos.

Application Insights - Azure portal - Dashboard
Application Insights – Azure portal – Dashboard

Para este ejemplo, he aprovechado la personalización del portal de Azure para poder ver de un simple vistazo qué es lo que está ocurriendo con mi aplicación, nada más entrar al portal.

¡Saludos!