Monitorizar aplicación Java con Spring Boot con Azure Application Insights

Si estás trabajando con aplicaciones en Java y con Microsoft Azure quizás te interesa saber que puedes monitorizarlas de manera súper sencilla y poco intrusiva con Application Insights, esté donde esté la aplicación. En este artículo quiero contarte muy brevemente cómo configurar el agente de java que Microsoft pone a tu disposición.

Crear un recurso de Application Insights

Lo primero que necesitas es un recurso de Application Insights y este, a su vez, necesita de un workspace de Log Analytics, que será el lugar donde resida toda la telemetría. Para crearlo puedes utilizar los siguientes comandos:

# Variables
RESOURCE_GROUP="tour-of-heroes-java-env"
LOCATION="northeurope"
APPLICATION_NAME="tour-of-heroes-java"
# Create a resource group
az group create --name $RESOURCE_GROUP --location $LOCATION
# Create a Log Analytics workspace
az monitor log-analytics workspace create \
--resource-group $RESOURCE_GROUP \
--workspace-name $APPLICATION_NAME-log-analytics \
--location $LOCATION
# Get Log Analytics workspace id
LOG_ANALYTICS_WORKSPACE_ID=$(az monitor log-analytics workspace show \
--resource-group $RESOURCE_GROUP \
--workspace-name $APPLICATION_NAME-log-analytics \
--query "id" -o tsv)

Una vez que lo tengas, ya puedes crear el recurso de Application Insights asociado al workspace anterior:

# Create Application Insights
az monitor app-insights component create \
--app $APPLICATION_NAME-insights --location $LOCATION \
--kind web -g $RESOURCE_GROUP \
--application-type web \
--workspace $LOG_ANALYTICS_WORKSPACE_ID

Cuando finalice la creación recupera la cadena de conexión que utilizará el agente para enviar la telemetría:

# Get Application Insights instrumentation key
APP_INSIGHTS_CONNECTION_STRING=$(az monitor app-insights component show \
--app $APPLICATION_NAME-insights -g $RESOURCE_GROUP \
--query "connectionString" -o tsv)

Usar el agente de Java para inyectar Application Insights

Existen dos formas de enviar la telemetría en aplicaciones Java: una de ellas es añadiendo la librería de Application Insights como parte del proyecto y la otra utilizando el agente que Microsoft proporciona a través de su repositorio en GitHub, que se añade como parte de la ejecución de la máquina virtual de java (JVM). En este ejemplo he utilizado esta segunda opción para que puedas usar el servicio sin tener que tocar tu código:

# There are two options for enabling Application Insights Java with Spring Boot: JVM argument and programmatically.
#### JVM argument ####
# Download Application Insights Java agent from GitHub
curl -L https://github.com/microsoft/ApplicationInsights-Java/releases/download/3.4.10/applicationinsights-agent-3.4.10.jar -o applicationinsights-agent-3.4.10.jar
# Build app
./gradlew build
### JVM argument ###
APPLICATIONINSIGHTS_CONNECTION_STRING=$APP_INSIGHTS_CONNECTION_STRING \
java -javaagent:./applicationinsights-agent-3.4.10.jar \
-jar build/libs/tour-of-heroes-0.0.2-SNAPSHOT.jar
### Programmatically ###
# https://learn.microsoft.com/en-us/azure/azure-monitor/app/java-spring-boot#enabling-programmatically

Una vez que arranque la aplicación y comiences a usar la misma comprobarás que la telemetría comienza a llegar al servicio y podrás visualizarla desde diferentes perspectivas a través del portal de Azure.

En este repositorio tienes un ejemplo completo con diferentes componentes, que además puedes arrancar como Dev Container.

¡Saludos!