Tutorial: Configuración del agente Java de Application Performance Management (APM) con contenedores de inicialización en Azure Container Apps
En este tutorial, configurará el agente Java de Application Performance Management (APM) con contenedores de inicialización en Azure Container Apps. APM ayuda a impulsar la observabilidad de las aplicaciones de contenedor. Puede empaquetar el complemento APM en la misma imagen o Dockerfile con la aplicación, pero enlaza los problemas de administración, como la mitigación de vulnerabilidades y exposiciones comunes (CVE). En lugar de enlazar los problemas juntos, puede usar el agente de Java y los contenedores de inicialización en Azure Container Apps para insertar soluciones de APM sin modificar la imagen de la aplicación.
En este tutorial ha:
- Prepare una imagen para configurar el agente de Java e insertarla en una instancia de Azure Container Registry.
- Cree un entorno de Container Apps y una aplicación contenedora como aplicación Java de destino.
- Configure los contenedores de inicialización y los montajes de volúmenes para configurar la integración de Application Insights.
Requisitos previos
- Suscripción a Azure. Crear uno de forma gratuita..
- Instancia de Application Insights.
- Una instancia de Azure Container Registry u otro registro de imagen de contenedor.
- Docker, para compilar una imagen.
- La versión más reciente de la CLI de Azure.
Configuración del entorno
Use estos pasos para definir variables de entorno y asegurarse de que la extensión Container Apps está actualizada:
Defina variables de entorno mediante los siguientes comandos:
export SUBSCRIPTION_ID="<SUBSCRIPTION_ID>" # Replace with your own Azure subscription ID export APP_INSIGHTS_RESOURCE_ID="/subscriptions/$SUBSCRIPTION_ID/resourceGroups/my-resource-group/providers/microsoft.insights/components/my-app-insights" export CONTAINER_REGISTRY_NAME="myacr" export RESOURCE_GROUP="my-resource-group" export ENVIRONMENT_NAME="my-environment" export CONTAINER_APP_NAME="my-container-app" export LOCATION="eastus"
Inicie sesión en la CLI de Azure mediante los siguientes comandos:
az login az account set --subscription $SUBSCRIPTION_ID
Use los siguientes comandos para asegurarse de que tiene la versión más reciente de las extensiones de la CLI de Azure para Container Apps y Application Insights:
az extension add --name containerapp --upgrade az extension add --name application-insights --upgrade
Recupere la cadena de conexión de la instancia de Application Insights mediante los siguientes comandos:
CONNECTION_STRING=$(az monitor app-insights component show \ --ids $APP_INSIGHTS_RESOURCE_ID \ --query connectionString)
Preparación de la imagen de contenedor
Para compilar una imagen de instalación para el agente de Java de Application Insights, use estos pasos en el mismo directorio:
Cree un Dockerfile con el siguiente contenido:
FROM mcr.microsoft.com/cbl-mariner/base/core:2.0 ARG version="3.5.4" RUN tdnf update -y && tdnf install -y curl ca-certificates RUN curl -L "https://github.com/microsoft/ApplicationInsights-Java/releases/download/${version}/applicationinsights-agent-${version}.jar" > agent.jar ADD setup.sh /setup.sh ENTRYPOINT ["/bin/sh", "setup.sh"]
Cree un archivo setup.sh con el siguiente contenido:
#!/bin/sh if [[ -z "$CONNECTION_STRING" ]]; then echo "Environment variable CONNECTION_STRING is not found. Exiting..." exit 1 else echo "{\"connectionString\": \"$CONNECTION_STRING\"}" > /java-agent/applicationinsights.json cp agent.jar /java-agent/agent.jar fi
Cree una imagen mediante el comando siguiente:
docker build . --tag "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
Inserte la imagen en Azure Container Registry u otro registro de imágenes de contenedor mediante los siguientes comandos:
az acr login --name $CONTAINER_REGISTRY_NAME docker push "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
Sugerencia
Puede encontrar código relevante para este paso en el repositorio de GitHub azure-container-apps-java-samples.
Crear un entorno de Container Apps y una aplicación contenedora como aplicación Java de destino
Para crear un entorno de Container Apps y una aplicación contenedora como aplicación Java de destino, siga estos pasos:
Cree un entorno de Container Apps mediante el comando siguiente:
az containerapp env create \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --location "$LOCATION" \ --query "properties.provisioningState"
Después de crear correctamente el entorno de Container Apps, la línea de comandos devuelve un mensaje
Succeeded
.Cree una aplicación contenedora para una configuración adicional mediante el comando siguiente:
az containerapp create \ --name $CONTAINER_APP_NAME \ --environment $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --query "properties.provisioningState"
Después de crear la aplicación contenedora, la línea de comandos devuelve un mensaje
Succeeded
.
Configuración del contenedor de inicialización, secretos, variables de entorno y volúmenes para configurar la integración de Application Insights
Use estos pasos para configurar el contenedor de inicialización con secretos, variables de entorno y volúmenes. Esta configuración permite usar la información almacenada con la instancia de Application Insights.
Escriba la configuración actual de la aplicación contenedora en ejecución en un archivo app.yaml en el directorio actual mediante el comando siguiente:
az containerapp show \ --resource-group $RESOURCE_GROUP \ --name $CONTAINER_APP_NAME \ --output yaml \ > app.yaml
Use estos pasos para editar el archivo app.yaml. Las ediciones agregan secretos, almacenamiento efímero y un contenedor de inicialización al archivo y actualizan el contenedor de la aplicación.
Agregue un secreto para la cadena de conexión de Application Insights mediante el ejemplo siguiente. Reemplace
$CONNECTION_STRING
por la cadena de conexión de Application Insights.properties: configuration: secrets: - name: app-insights-connection-string value: $CONNECTION_STRING
Agregue un volumen de almacenamiento efímero para los archivos del agente de Java mediante el ejemplo siguiente:
properties: template: volumes: - name: java-agent-volume storageType: EmptyDir
Agregue un contenedor de inicialización con montajes de volúmenes y variables de entorno mediante el ejemplo siguiente. Reemplace
<CONTAINER_REGISTRY_NAME>
por el nombre de Azure Container Registry.properties: template: initContainers: - image: <CONTAINER_REGISTRY_NAME>.azurecr.io/samples/java-agent-setup:1.0.0 name: java-agent-setup resources: cpu: 0.25 memory: 0.5Gi env: - name: CONNECTION_STRING secretRef: app-insights-connection-string volumeMounts: - mountPath: /java-agent volumeName: java-agent-volume
Actualice el contenedor de aplicaciones con montajes de volumen y variables de entorno mediante el ejemplo siguiente:
properties: template: containers: - name: test-java-app image: mcr.microsoft.com/azurespringapps/samples/hello-world:0.0.1 resources: cpu: 0.5 memory: 1Gi env: - name: JAVA_TOOL_OPTIONS value: -javaagent:/java-agent/agent.jar volumeMounts: - mountPath: /java-agent volumeName: java-agent-volume
Actualice la aplicación contenedora con el archivo de app.yaml modificado mediante el comando siguiente:
az containerapp update \ --resource-group $RESOURCE_GROUP \ --name $CONTAINER_APP_NAME \ --yaml app.yaml \ --query "properties.provisioningState"
Después de actualizar la aplicación contenedora, el comando devuelve un mensaje
Succeeded
. Ahora puede comprobar que la aplicación contenedora está conectada; para ello, consulte la instancia de Application Insights en Azure Portal.
Limpieza de recursos
Los recursos que creó en este tutorial contribuyen a la factura de Azure. Si no los necesita a largo plazo, use el siguiente comando para quitar el grupo de recursos y sus recursos:
az group delete --resource-group $RESOURCE_GROUP
Contenido relacionado
Aparte de Aplicación de Azure Insights, hay otras soluciones de APM populares en la comunidad. Si desea integrar la aplicación contenedora de Azure con otros proveedores de APM, reemplace el archivo JAR del agente de Java y los archivos de configuración relacionados.