Compartir a través de


Integrar la supervisión del rendimiento de la aplicación en imágenes de contenedor

Nota:

Los planes de Básico, Estándar y Enterprise quedarán en desuso a partir de mediados de marzo de 2025, con un período de retiro de 3 años. Se recomienda realizar la transición a Azure Container Apps. Para más información, consulte el anuncio de retirada de Azure Spring Apps.

El plan de consumo estándar y dedicado quedará obsoleto a partir del 30 de septiembre de 2024, con un cierre completo al cabo de seis meses. Se recomienda realizar la transición a Azure Container Apps. Para obtener más información, consulte Migrar el plan de consumo y dedicado Azure Spring Apps Standard a Azure Container Apps.

Este artículo se aplica a: Enterprise ✅ Básico/Estándar ✅

En este artículo se explica cómo integrar el agente de Java de Application Insights en la imagen de contenedor. De forma similar, también puede integrar otros agentes de supervisión del rendimiento de aplicaciones (APM) en la imagen de contenedor, como AppDynamics, New Relic y Dynatrace.

Azure Spring Apps se integra sin problemas con los agentes de APM. Al migrar aplicaciones a Azure Container Apps o Azure Kubernetes Service (AKS), debe integrarse con APM al compilar la imagen. El proceso es similar al enfoque que usa Azure Spring Apps. También puede agregar un agente de APM en un contenedor init-container independiente e insertarlo en una aplicación contenedora durante su inicialización.

Requisitos previos

Elegir el agente de Java de Application Insights

Actualmente, Azure Spring Apps usa el agente de Java de Application Insights 3.5.2. Puede elegir otra versión en función de sus necesidades. Puede encontrar todas las versiones en la página de versiones de Java de Application Insights.

Puede encontrar la cadena de conexión de Application Insights en Azure Portal en el panel Información general de la instancia de Application Insights. Esta cadena es necesaria para las instrucciones de este artículo.

Hay algunas opciones de configuración para el agente de Java de Application Insights, como el porcentaje de muestreo y el nombre del rol en la nube. Para obtener más información, consulte Opciones de configuración de Application Insights para Java.

Si usa un Dockerfile para compilar una imagen de contenedor, consulte la sección Uso de Dockerfile. Si usa Paketo Buildpacks para compilar una imagen de contenedor, consulte la sección Usar Paketo Buildpacks.

Usar Dockerfile

Siga estos pasos para modificar el Dockerfile:

  1. Descargue el agente de Java de Application Insights y cree un archivo de configuración para él, denominado applicationinsights.json.
  2. Agregue la opción -javaagent al punto de entrada de la imagen de contenedor.

Para obtener más información sobre cómo compilar un archivo JAR o un archivo WAR con un Dockerfile, consulte Compilar una imagen de contenedor a partir de un archivo JAR o WAR.

Compilación de un archivo JAR

En el ejemplo siguiente Dockerfile se compila un archivo JAR con los cambios anteriores:

FROM mcr.microsoft.com/openjdk/jdk:17-mariner

ARG APP_INSIGHTS_VERSION
ARG APP_INSIGHTS_CONNECTION_STRING
ARG JAR_FILENAME

# Set up Application Insights agent
ADD https://github.com/microsoft/ApplicationInsights-Java/releases/download/${APP_INSIGHTS_VERSION}/applicationinsights-agent-${APP_INSIGHTS_VERSION}.jar \
  /java-agent/applicationinsights-agent.jar
RUN echo "{\"connectionString\": \"${APP_INSIGHTS_CONNECTION_STRING}\"}" > applicationinsights.json \
    && mv applicationinsights.json /java-agent/applicationinsights.json

COPY $JAR_FILENAME /opt/app/app.jar

# Add -javaagent option
ENTRYPOINT ["java", "-javaagent:/java-agent/applicationinsights-agent.jar", "-jar", "/opt/app/app.jar"]

Al compilar una imagen de contenedor con este Dockerfile, debe agregar argumentos de compilación mediante --build-arg, como se muestra en el ejemplo siguiente:

docker build -t <image-name>:<image-tag> \
    -f JAR.dockerfile \
    --build-arg APP_INSIGHTS_VERSION=3.5.2 \
    --build-arg APP_INSIGHTS_CONNECTION_STRING="<connection-string>" \
    --build-arg JAR_FILENAME=<path-to-jar> \
    .

Compilar un archivo WAR

En el ejemplo siguiente Dockerfile se compila un archivo WAR con los cambios anteriores:

FROM mcr.microsoft.com/openjdk/jdk:17-mariner

ARG TOMCAT_VERSION
ARG TOMCAT_MAJOR_VERSION
ARG APP_INSIGHTS_VERSION
ARG APP_INSIGHTS_CONNECTION_STRING
ARG WAR_FILENAME
ARG TOMCAT_HOME=/opt/tomcat

# Set up Application Insights agent
ADD https://github.com/microsoft/ApplicationInsights-Java/releases/download/${APP_INSIGHTS_VERSION}/applicationinsights-agent-${APP_INSIGHTS_VERSION}.jar \
  /java-agent/applicationinsights-agent.jar
RUN echo "{\"connectionString\": \"${APP_INSIGHTS_CONNECTION_STRING}\"}" > applicationinsights.json \
    && mv applicationinsights.json /java-agent/applicationinsights.json

# Set up Tomcat
ADD https://archive.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR_VERSION/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz \
    $TOMCAT_HOME/apache-tomcat-$TOMCAT_VERSION.tar.gz
RUN tdnf update -y \
    && tdnf install -y tar \
    && tar -zxf $TOMCAT_HOME/apache-tomcat-$TOMCAT_VERSION.tar.gz -C $TOMCAT_HOME --strip-components 1 \
    && rm $TOMCAT_HOME/apache-tomcat-$TOMCAT_VERSION.tar.gz \
    && rm -r $TOMCAT_HOME/webapps/*

COPY $WAR_FILENAME $TOMCAT_HOME/webapps/app.war

# Add the -javaagent option
ENTRYPOINT ["/bin/sh", "-c" , "export CATALINA_OPTS=-javaagent:/java-agent/applicationinsights-agent.jar && /opt/tomcat/bin/catalina.sh run"]

Al compilar una imagen de contenedor con este Dockerfile, debe agregar argumentos de compilación mediante --build-arg, como se muestra en el ejemplo siguiente:

docker build -t <image-name>:<image-tag> \
    -f WAR.dockerfile \
    --build-arg APP_INSIGHTS_VERSION=3.5.2 \
    --build-arg APP_INSIGHTS_CONNECTION_STRING="<connection-string>" \
    --build-arg WAR_FILENAME=<path-to-war> \
    --build-arg TOMCAT_VERSION=<version> \
    --build-arg TOMCAT_MAJOR_VERSION=<major-version> \
    .

Integrar otros agentes de supervisión del rendimiento de aplicaciones mediante Dockerfile

Puede integrar otros agentes de supervisión del rendimiento de aplicaciones (APM) de forma similar. En la lista siguiente se muestran algunos otros agentes de APM, junto con una breve descripción sobre cómo integrarlos. Para obtener instrucciones de descarga, consulte la documentación oficial de APM.

  • Dynatrace
  • AppDynamics
    • Descargar el agente de AppDynamics en Dockerfile.
    • Agregue -javaagent:<path-to-agent> a las opciones de JVM.
    • Establezca las variables de entorno necesarias, incluidas APPDYNAMICS_AGENT_ACCOUNT_NAME, APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY y las demás, en runtime. Para obtener una lista completa de las propiedades de configuración, consulte Propiedades de configuración del agente de Java de AppDynamics.
  • New Relic
    • Descargar agente de New Relic en el Dockerfile. Si tiene un archivo de configuración del agente de Java de New Relic, cópielo de la máquina local en el contenedor. Para obtener más información sobre los archivos de configuración, vea Configuración del agente de Java: Archivo de configuración.
    • Agregue -javaagent:<path-to-agent> a las opciones de JVM.
    • Establezca las variables de entorno NEW_RELIC_LICENSE_KEY=<license-key> y NEW_RELIC_APP_NAME=<app-name> en runtime, si no las ha establecido en un archivo de configuración o desea invalidar los valores de un archivo de configuración.

Hay otro enfoque para integrar un agente de APM, que consiste en precompilar una imagen de contenedor para el agente de APM y ejecutarla como un contenedor de inicialización. Para más información sobre este enfoque, consulte Tutorial: Configurar el agente java de Administración de rendimiento de aplicaciones (APM) con contenedores de inicialización en Azure Container Apps.

Usar Paketo Buildpacks

Para integrar el agente de Application Insights en la imagen de contenedor, necesita un enlace. Para obtener más información sobre los enlaces, consulte Enlaces en la documentación de Paketo.

En primer lugar, use los siguientes comandos para crear un enlace denominado application-insights en los enlaces del directorio en el equipo local. El enlace consta de un solo archivo, denominado tipo. El contenido del tipo archivo es el texto ApplicationInsights, que indica un enlace de Application Insights.

mkdir -p bindings/application-insights
echo "ApplicationInsights" > bindings/application-insights/type

En el diagrama siguiente se muestra la estructura de directorios:

bindings
└── application-insights
    └── type

A continuación, use el siguiente comando para compilar la imagen. Proporcione el enlace a la compilación mediante la opción --volume. La CLI del paquete monta el directorio de enlace en el contenedor de compilación. A continuación, el paquete de compilación de Application Insights lo detecta y participa en el proceso de compilación.

pack build <image-name>:<image-tag> \
    --volume $(pwd)/bindings/application-insights:/platform/bindings/application-insights" \
    --path <path-to-source-root> \
    --builder <builder-name>

Para implementar la imagen de contenedor en un entorno de Azure Container Apps, puede usar la CLI de Azure. Para más información, consulte Implementar Azure Container Apps con el comando az containerapp up. Hay dos enfoques para pasar la cadena de conexión de Application Insights al agente de Application Insights en tiempo de ejecución. Un enfoque consiste en pasar la cadena de conexión como una variable de entorno. Para obtener más información, consulte la sección Configurar con variables de entorno. El otro enfoque consiste en pasar la cadena de conexión a través de enlaces. Para obtener más información, consulte la sección Configurar con enlaces.

Configurar con variables de entorno

Para pasar una cadena de conexión a Application Insights, especifique APPLICATIONINSIGHTS_CONNECTION_STRING en la opción --env-vars, como se muestra en el ejemplo siguiente. Puede especificar otras variables de entorno si desea pasar más opciones de configuración al agente.

az containerapp up \
    --name <container-app-name> \
    --image <image-name>:<image-tag> \
    --resource-group <resource-group> \
    --environment <environment-name> \
    --location <location> \
    --env-vars "APPLICATIONINSIGHTS_CONNECTION_STRING=<connection-string>"

Configurar con enlaces

Para configurar el agente de Application Insights con enlaces, puede almacenar la cadena de conexión, el tipo de enlace y cualquier otra configuración como secretos en la aplicación contenedora. Monte los secretos en un volumen para que el paquete de compilación de Application Insights pueda leerlos en tiempo de ejecución.

Con el comando siguiente, se declaran dos secretos en el nivel de aplicación: type y connection-string. Se montan en /bindings/application-insights en el contenedor. El paquete de compilación busca enlaces en el directorio /enlaces porque se establece la variable de entorno SERVICE_BINDING_ROOT.

az containerapp create \
    --name <container-app-name> \
    --image <image-name>:<image-tag> \
    --resource-group <resource-group> \
    --environment <environment-name> \
    --secrets "type=ApplicationInsights" "connection-string=<connection-string>" \
    --secret-volume-mount "/bindings/application-insights" \
    --env-vars "SERVICE_BINDING_ROOT=/bindings"

Como alternativa, puede almacenar la cadena de conexión en Azure Key Vault y hacer referencia a ella en secretos. Para obtener más información, consulte Secretos administrados en Azure Container Apps.

Para implementar la imagen de contenedor en Azure Kubernetes Service, consulte Cómo usar paquetes de compilación en Kubernetes para Java.

Integrar otros agentes de supervisión del rendimiento de aplicaciones mediante Paketo Buildpacks

Hay paquetes de compilación para varios agentes de APM, incluidos los siguientes agentes. Para obtener más información sobre la configuración y las configuraciones de enlace, consulte la documentación de cada agente.