Dela via


Integrera övervakning av programprestanda i containeravbildningar

Kommentar

Basic-, Standard- och Enterprise-planerna kommer att vara inaktuella från och med mitten av mars 2025, med en 3-årig pensionsperiod. Vi rekommenderar att du övergår till Azure Container Apps. Mer information finns i meddelandet om azure Spring Apps-pensionering.

Standardförbrukningen och den dedikerade planen kommer att vara inaktuell från och med den 30 september 2024, med en fullständig avstängning efter sex månader. Vi rekommenderar att du övergår till Azure Container Apps. Mer information finns i Migrera Azure Spring Apps Standard-förbrukning och dedikerad plan till Azure Container Apps.

Den här artikeln gäller för:✅ Basic/Standard ✅ Enterprise

Den här artikeln beskriver hur du integrerar Application Insights Java-agenten i containeravbildningen. På liknande sätt kan du också integrera andra APM-agenter (application performance monitoring) i containeravbildningen, inklusive AppDynamics, New Relic och Dynatrace.

Azure Spring Apps integreras smidigt med APM-agenter. När du migrerar program till Azure Container Apps eller Azure Kubernetes Service (AKS) måste du integrera med APM när du skapar avbildningen. Processen liknar den metod som används av Azure Spring Apps. Du kan också lägga till en APM-agent i en separat init-container och mata in den i en containerapp under initieringen.

Förutsättningar

Välj Application Insights Java-agenten

Azure Spring Apps använder för närvarande Application Insights Java-agent 3.5.2. Du kan välja en annan version beroende på dina behov. Du hittar alla versioner på sidan Med Application Insights Java-versioner.

Du hittar Application Insights-anslutningssträng i Azure Portal i fönstret Översikt för din Application Insights-instans. Den här strängen krävs för instruktionerna i den här artikeln.

Det finns vissa konfigurationsalternativ för Application Insights Java-agenten, till exempel samplingsprocent och molnrollnamn. Mer information finns i Konfigurationsalternativ för Application Insights för Java.

Om du använder en Dockerfile för att skapa en containeravbildning läser du avsnittet Använd Dockerfile . Om du använder Paketo Buildpacks för att skapa en containeravbildning läser du avsnittet Använd Paketo Buildpacks .

Använda Dockerfile

Använd följande steg för att ändra Dockerfile:

  1. Ladda ned Application Insights Java-agenten och skapa en konfigurationsfil för den, med namnet applicationinsights.json.
  2. Lägg till alternativet -javaagent till startpunkten för containeravbildningen.

Mer information om hur du skapar JAR-fil eller WAR-fil med en Dockerfile finns i Skapa en containeravbildning från en JAR eller WAR.

Skapa en JAR-fil

I följande exempel skapar Dockerfile en JAR-fil med föregående ändringar:

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"]

När du skapar en containeravbildning med den här Dockerfile måste du lägga till byggargument med , --build-argsom du ser i följande exempel:

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

Skapa en WAR-fil

I följande exempel skapar Dockerfile en WAR-fil med tidigare ändringar:

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"]

När du skapar en containeravbildning med den här Dockerfile måste du lägga till byggargument med , --build-argsom du ser i följande exempel:

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

Integrera andra programprestandaövervakningsagenter med Dockerfile

Du kan integrera andra APM-agenter (application performance monitoring) på ett liknande sätt. I följande lista visas några andra APM-agenter, tillsammans med en kort beskrivning av hur du integrerar dem. Instruktioner för nedladdning finns i APM:s officiella dokumentation.

  • Dynatrace
    • Ladda ned Dynatrace-agenten i Dockerfile.
    • Ange följande miljövariabler vid körning:
  • AppDynamics
    • Ladda ned AppDynamics-agenten i Dockerfile.
    • Lägg till -javaagent:<path-to-agent> i JVM-alternativen.
    • Ange nödvändiga miljövariabler, inklusive APPDYNAMICS_AGENT_ACCOUNT_NAME, APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEYoch så vidare, vid körning. En fullständig lista över konfigurationsegenskaper finns i Konfigurationsegenskaper för AppDynamics Java Agent.
  • Ny relik
    • Ladda ned New Relic-agenten i Dockerfile. Om du har en ny Relic Java-agentkonfigurationsfil kopierar du den från den lokala datorn till containern. Mer information om konfigurationsfiler finns i Java-agentkonfiguration: Konfigurationsfil.
    • Lägg till -javaagent:<path-to-agent> i JVM-alternativen.
    • Ange miljövariablerna NEW_RELIC_LICENSE_KEY=<license-key> och NEW_RELIC_APP_NAME=<app-name> vid körning, om du inte har angett dem i en konfigurationsfil eller om du vill åsidosätta värdena i en konfigurationsfil.

Det finns en annan metod för att integrera en APM-agent, som är att skapa en containeravbildning för APM-agenten och köra den som en init-container. Mer information om den här metoden finns i Självstudie: Konfigurera Java-agenten för programprestandahantering (APM) med init-containrar i Azure Container Apps.

Använda Paketo Buildpacks

För att integrera Application Insights-agenten i containeravbildningen behöver du en bindning. Mer information om bindningar finns i Bindningar i Paketo-dokumentationen.

Använd först följande kommandon för att skapa en bindning med namnet application-insights i bindningskatalogen på den lokala datorn. Bindningen består bara av en fil med namnet type. Innehållet i typfilen är texten ApplicationInsightssom anger en Application Insights-bindning.

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

Följande diagram visar katalogstrukturen:

bindings
└── application-insights
    └── type

Använd sedan följande kommando för att skapa avbildningen. Ange bindningen till bygget --volume med hjälp av alternativet . Paketet CLI monterar bindningskatalogen i byggcontainern. Sedan identifierar Application Insights-byggpaketet det och deltar i byggprocessen.

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

Om du vill distribuera containeravbildningen i en Azure Container Apps-miljö kan du använda Azure CLI. Mer information finns i Distribuera Azure Container Apps med kommandot az containerapp up. Det finns två metoder för att skicka Application Insights-anslutningssträng till Application Insights-agenten vid körning. En metod är att skicka anslutningssträng som en miljövariabel. Mer information finns i avsnittet Konfigurera med miljövariabler . Den andra metoden är att skicka anslutningssträng via bindningar. Mer information finns i avsnittet Konfigurera med bindningar .

Konfigurera med miljövariabler

Om du vill skicka en anslutningssträng till Application Insights anger du APPLICATIONINSIGHTS_CONNECTION_STRING i --env-vars alternativet, som du ser i följande exempel. Du kan ange andra miljövariabler om du vill skicka fler konfigurationsalternativ till agenten.

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>"

Konfigurera med bindningar

Om du vill konfigurera Application Insights-agenten med bindningar kan du lagra Application Insights-anslutningssträng, bindningstyp och andra konfigurationer som hemligheter i containerappen. Montera hemligheterna i en volym så att Application Insights buildpack kan läsa dem vid körning.

Med följande kommando deklarerar du två hemligheter på programnivå: type och connection-string. De monteras på /bindings/application-insights i containern. Buildpack söker efter bindningar i katalogen /bindings eftersom SERVICE_BINDING_ROOT miljövariabeln har angetts.

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"

Du kan också lagra anslutningssträng i Azure Key Vault och referera till den i hemligheter. Mer information finns i Hantera hemligheter i Azure Container Apps.

Information om hur du distribuerar containeravbildningen till Azure Kubernetes Service finns i Använda buildpacks i Kubernetes för Java.

Integrera andra programprestandaövervakningsagenter med Paketo Buildpacks

Det finns buildpacks för olika APM-agenter, inklusive följande agenter. Mer information om bindningskonfigurationer och konfigurationer finns i dokumentationen för varje agent.