Delen via


Bewaking van toepassingsprestaties integreren in containerinstallatiekopieën

Notitie

De Basic-, Standard- en Enterprise-abonnementen worden afgeschaft vanaf medio maart 2025, met een pensioenperiode van 3 jaar. We raden u aan om over te stappen naar Azure Container Apps. Zie de aankondiging over buitengebruikstelling van Azure Spring Apps voor meer informatie.

Het standaardverbruik en het speciale abonnement worden vanaf 30 september 2024 afgeschaft, met een volledige afsluiting na zes maanden. We raden u aan om over te stappen naar Azure Container Apps. Zie Azure Spring Apps Standard-verbruik en toegewezen abonnement migreren naar Azure Container Apps voor meer informatie.

Dit artikel is van toepassing op:✅ Basic/Standard ✅ Enterprise

In dit artikel wordt uitgelegd hoe u de Application Insights Java-agent integreert in uw containerinstallatiekopieën. Op een vergelijkbare manier kunt u ook andere APM-agents (Application Performance Monitoring) integreren in uw containerinstallatiekopieën, waaronder AppDynamics, New Relic en Dynatrace.

Azure Spring Apps kan probleemloos worden geïntegreerd met APM-agents. Wanneer u toepassingen migreert naar Azure Container Apps of Azure Kubernetes Service (AKS), moet u integreren met APM tijdens het bouwen van de installatiekopieën. Het proces is vergelijkbaar met de benadering die wordt gebruikt door Azure Spring Apps. U kunt ook een APM-agent toevoegen in een afzonderlijke init-container en deze tijdens de initialisatie in een container-app injecteren.

Vereisten

De Java-agent voor Application Insights kiezen

Azure Spring Apps maakt momenteel gebruik van Application Insights Java-agent 3.5.2. U kunt een andere versie kiezen, afhankelijk van uw behoeften. U vindt alle versies op de pagina Java-releases van Application Insights.

U vindt de Application Insights-verbindingsreeks in Azure Portal in het deelvenster Overzicht van uw Application Insights-exemplaar. Deze tekenreeks is vereist voor de instructies in dit artikel.

Er zijn enkele configuratieopties voor Application Insights Java-agent, zoals het steekproefpercentage en de naam van de cloudrol. Zie Configuratieopties van Application Insights voor Java voor meer informatie.

Als u een Dockerfile gebruikt om een containerinstallatiekopieën te maken, raadpleegt u de sectie Dockerfile gebruiken. Als u Paketo Buildpacks gebruikt om een containerinstallatiekopieën te bouwen, raadpleegt u de sectie Paketo Buildpacks gebruiken.

Dockerfile gebruiken

Gebruik de volgende stappen om uw Dockerfile te wijzigen:

  1. Download de Java-agent van Application Insights en maak er een configuratiebestand voor, applicationinsights.json genoemd.
  2. Voeg de -javaagent optie toe aan het toegangspunt van de containerinstallatiekopieën.

Zie Een containerinstallatiekopieën bouwen vanuit een JAR- of WAR-bestand voor meer informatie over het bouwen van een JAR-bestand of WAR-bestand met een Dockerfile.

Een JAR-bestand bouwen

In het volgende voorbeeld bouwt Dockerfile een JAR-bestand met de vorige wijzigingen:

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

Wanneer u een containerinstallatiekopieën maakt met dit Dockerfile, moet u buildargumenten toevoegen met behulp van --build-arg, zoals wordt weergegeven in het volgende voorbeeld:

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

Een WAR-bestand bouwen

In het volgende voorbeeld bouwt Dockerfile een WAR-bestand met de vorige wijzigingen:

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

Wanneer u een containerinstallatiekopieën maakt met dit Dockerfile, moet u buildargumenten toevoegen met behulp van --build-arg, zoals wordt weergegeven in het volgende voorbeeld:

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

Andere bewakingsagents voor toepassingsprestaties integreren met Dockerfile

U kunt andere APM-agents (Application Performance Monitoring) op een vergelijkbare manier integreren. In de volgende lijst ziet u enkele andere APM-agents, samen met een korte beschrijving van hoe u deze kunt integreren. Zie de officiële documentatie van APM voor downloadinstructies.

  • Dynatrace
    • Download de Dynatrace-agent in het Dockerfile.
    • Stel de volgende omgevingsvariabelen in tijdens runtime:
  • AppDynamics
  • New Relic
    • Download de New Relic-agent in het Dockerfile. Als u een new Relic Java-agentconfiguratiebestand hebt, kopieert u het van de lokale computer naar uw container. Zie configuratie van Java-agent: configuratiebestand voor meer informatie over configuratiebestanden.
    • Toevoegen -javaagent:<path-to-agent> aan de JVM-opties.
    • Stel de omgevingsvariabelen NEW_RELIC_LICENSE_KEY=<license-key> en NEW_RELIC_APP_NAME=<app-name> tijdens runtime in als u ze niet hebt ingesteld in een configuratiebestand of als u de waarden in een configuratiebestand wilt overschrijven.

Er is een andere benadering voor het integreren van een APM-agent, namelijk het vooraf maken van een containerinstallatiekopieën voor de APM-agent en het uitvoeren als een init-container. Zie zelfstudie: De Java-agent application performance management (APM) configureren met init-containers in Azure Container Apps voor meer informatie over deze aanpak.

Paketo Buildpacks gebruiken

Als u de Application Insights-agent in uw containerinstallatiekopieën wilt integreren, hebt u een binding nodig. Zie Bindingen in de Paketo-documentatie voor meer informatie over bindingen.

Gebruik eerst de volgende opdrachten om een binding met de naam Application Insights te maken in de map bindingen op uw lokale computer. De binding bestaat uit slechts één bestand, benoemd type. De inhoud van het typebestand is de tekst ApplicationInsightsdie een Application Insights-binding aangeeft.

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

In het volgende diagram ziet u de mapstructuur:

bindings
└── application-insights
    └── type

Gebruik vervolgens de volgende opdracht om de installatiekopieën te bouwen. Geef de binding op voor uw build met behulp van de --volume optie. De pack-CLI koppelt de bindingsmap aan de buildcontainer. Vervolgens detecteert de Application Insights-buildpack het en neemt deel aan het buildproces.

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

Als u de containerinstallatiekopieën wilt implementeren in een Azure Container Apps-omgeving, kunt u de Azure CLI gebruiken. Zie Azure Container Apps implementeren met de opdracht az containerapp up voor meer informatie. Er zijn twee benaderingen om de Application Insights-verbindingsreeks tijdens runtime door te geven aan de Application Insights-agent. Een benadering is het doorgeven van de verbindingsreeks als een omgevingsvariabele. Zie de sectie Configureren met omgevingsvariabelen voor meer informatie. De andere methode is het doorgeven van de verbindingsreeks via bindingen. Zie de sectie Configureren met bindingen voor meer informatie.

Configureren met omgevingsvariabelen

Als u een verbindingsreeks wilt doorgeven aan Application Insights, geeft u APPLICATIONINSIGHTS_CONNECTION_STRING de --env-vars optie op, zoals wordt weergegeven in het volgende voorbeeld. U kunt andere omgevingsvariabelen opgeven als u meer configuratieopties wilt doorgeven aan de agent.

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

Configureren met bindingen

Als u de Application Insights-agent wilt configureren met bindingen, kunt u de Application Insights-verbindingsreeks, het bindingstype en andere configuraties opslaan als geheimen in uw container-app. Koppel de geheimen in een volume zodat het Application Insights-buildpack deze tijdens runtime kan lezen.

Met de volgende opdracht declareert u twee geheimen op toepassingsniveau: type en connection-string. Ze worden gekoppeld aan /bindingen/application-insights in de container. Het buildpack zoekt naar bindingen in de map /bindings omdat de SERVICE_BINDING_ROOT omgevingsvariabele is ingesteld.

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"

U kunt de verbindingsreeks ook opslaan in Azure Key Vault en ernaar verwijzen in geheimen. Zie Geheimen beheren in Azure Container Apps voor meer informatie.

Zie Buildpacks gebruiken in Kubernetes voor Java om de containerinstallatiekopieën te implementeren in Azure Kubernetes Service.

Andere bewakingsagents voor toepassingsprestaties integreren met Paketo Buildpacks

Er zijn buildpacks voor verschillende APM-agents, waaronder de volgende agents. Zie de documentatie voor elke agent voor meer informatie over het instellen en configureren van bindingen.