Una de las peticiones que me llegó esta semana era ver la viabilidad de instrumentar WebSphere con Application Insights de la misma forma que te mostré con IIS, es decir sin tener que tocar las aplicaciones que en él se aloja. En este artículo te muestro cómo conseguirlo.
Entorno con WebSphere
Para que puedas probar de una forma sencilla esta configuración voy a utilizar un WebSphere contenerizado 🙂 Para ello voy me voy a apoyar en la imagen websphere-traditional que hay disponible en Docker Hub. Para hacer todo en uno, voy a generar una nueva imagen con este Dockerfile:
FROM ibmcom/websphere-traditional:latest
ENV APPLICATIONINSIGHTS_CONNECTION_STRING="<APP_INSIGHTS_INSTRUMENTATION_KEY>"
COPY applicationinsights-agent-3.2.0.jar /app/applicationinsights-agent-3.2.0.jar
Como ves, estoy usando la imagen mencionada como base pero además estoy definiendo la variable de entornoAPPLICATIONINSIGHTS_CONNECTION_STRING, que es necesaria para poder configurar el recurso al que se hará la ingesta de la telemetría. El valor de esta puedes encontrarlo en el recurso en el apartado Overview:

Además estoy copiando el archivo applicationinsights-agent-3.2.0.jar el cuál puedes descargar desde aquí. Este nos permitirá instalar el agente de java para este tipo de entorno, tal y como se detalla en la documentación oficial. Para crear y ejecutar este nuevo servidor solo te queda ejecutar estos dos comandos:
# My own image with App Insights in it
docker build -t websphere-traditional-with-app-insights .
# Run WebSphere on Docker
docker run --name websphere-traditional -h websphere-traditional \
-p 9043:9043 -p 9443:9443 -d \
-e APPLICATIONINSIGHTS_CONNECTION_STRING="<APP_INSIGHTS_INSTRUMENTATION_KEY>" \
websphere-traditional-with-app-insights
A partir de este momento ya tienes tu servidor ejecutándose, aunque suele tardar unos segundos en estar operativo. Para ver el progreso puedes usar el siguiente comando:
docker logs --tail=all -f $(docker ps -lq)
Una vez que finalice puedes acceder a esta URL: https://localhost:9043/ibm/console/login.do?action=secure Si todo ha ido bien deberías de ver una página como la siguiente:

Para recuperar la contraseña (el usuario es wsadmin) puedes hacerlo utilizando este comando:
docker exec websphere-traditional cat /tmp/PASSWORD
Configurar Application Insights en WebSphere
Ahora que ya tienes un servidor en el que probar, lo siguiente que vamos a hacer es configurar el servicio en este, ya que por ahora solo tenemos una variable de entorno y el .jar del agente en un directorio del servidor, pero no se está haciendo uso de ello. Una vez logado en la consola de administración debes ir a servers > WebSphere application servers:

y selecciona el servidor que te aparece en la parte derecha (server1):

Ahora haz clic en la opción Java and Process Management y dentro de esta selecciona Process definition:

Por último accede al apartado Java Virtual Machine:

y ya habremos llegado 🙂 Lo único que tienes que añadir en este apartado es en el cuadro llamado Generic JVM arguments lo siguiente:
-javaagent:/app/applicationinsights-agent-3.2.0.jar
Como ves le tengo que indicar la ruta donde copie el .jar, cuando definí mi Dockerfile. Debería de quedar de la siguiente manera:

Aplica los cambios a través del botón Apply y haz clic en Save en el siguiente cuadro:

El último paso es reiniciar el servidor. No tengo ni idea de WebSphere, y lo cambiaré cuando lo descubra, pero para hacerlo he reiniciado el contenedor de Docker:
#Restart the server
docker restart websphere-traditional
A partir de este momento ya tienes tu servidor enviado la telemetría a tu recurso de Application Insights.
Aplicación de prueba
Si además quieres probarlo con una aplicación de ejemplo puedes usar el petclinic.war que he subido como parte del ejemplo (Gracias David por generarme este war 😀 ). Esta se corresponde con una aplicación de ejemplo de Spring Boot, con alguna pequeña modificación para que pete de verdad 😛 Para desplegarla, solo tienes que hacer clic en el menú izquierdo en Applications > New Application > New Enterprise Application, seleccionar el .war de tu local y hacer Next x 8 🙂 hasta que finalice el asistente. Por último haz clic en Save directly to the master configuration. Ahora ves al apartado Applications > WebSphere enterprise applications selecciona la aplicación y haz clic en el botón Start.

Si todo ha ido bien deberías de ver la aplicación en el raíz de tu servidor, al cual puedes acceder desde aquí: https://localhost:9443/ y verás algo como lo siguiente:

Si navegas por ella verás que tu Application Insights va mostrando la telemetría que va ingestando.

El código de ejemplo lo tienes en mi GitHub.
¡Saludos!

Bootcamp Backend
Si tienes ganas de ponerte al día con tecnologías de backend, formo parte del
equipo de docentes del Bootcamp Backend de Lemoncode, ¿Te animas a
aprender con nosotros?