Compartir a través de


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

Configuración del entorno

Use estos pasos para definir variables de entorno y asegurarse de que la extensión Container Apps está actualizada:

  1. 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"
    
  2. Inicie sesión en la CLI de Azure mediante los siguientes comandos:

    az login
    az account set --subscription $SUBSCRIPTION_ID
    
  3. 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
    
  4. 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:

  1. 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"]
    
  2. 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
    
  3. Cree una imagen mediante el comando siguiente:

    docker build . --tag "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
    
  4. 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:

  1. 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.

  2. 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.

  1. 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
    
  2. 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.

    1. 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
      
    2. 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
      
    3. 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
      
    4. 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
      
  3. 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

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.