Integrieren von APM (Application Performance Monitoring, Anwendungsleistungsüberwachung) in Containerimages
Hinweis
Die Pläne Basic, Standard und Enterprise gelten ab Mitte März 2025 als veraltet und werden über einen Zeitraum von drei Jahren eingestellt. Es wird empfohlen, auf Azure Container Apps umzustellen. Weitere Informationen finden Sie in der Ankündigung zur Einstellung von Azure Spring Apps.
Der Plan Standardverbrauch und dediziert gilt ab dem 30. September 2024 als veraltet und wird nach sechs Monaten vollständig eingestellt. Es wird empfohlen, auf Azure Container Apps umzustellen. Weitere Informationen finden Sie unter Migrieren des Plans „Standardverbrauch und dediziert“ von Azure Spring Apps zu Azure Container Apps.
Dieser Artikel gilt für:✅ Basic/Standard ✅ Enterprise
In diesem Artikel wird erläutert, wie Sie den Application Insights Java-Agent in Ihr Containerimage integrieren. Auf ähnliche Weise können Sie auch andere APM-Agents in Ihr Containerimage integrieren, einschließlich AppDynamics, New Relic und Dynatrace.
Azure Spring Apps lässt sich problemlos mit APM-Agents integrieren. Beim Migrieren von Anwendungen zu Azure Container Apps oder Azure Kubernetes Service (AKS) müssen Sie beim Erstellen des Images eine Integration mit APM einrichten. Der Prozess ähnelt dem Ansatz, der von Azure Spring Apps verwendet wird. Sie können einen APM-Agent auch in einem separaten Init-Container hinzufügen und während der Initialisierung in eine Container-App einfügen.
Voraussetzungen
Auswählen des Application Insights Java-Agent
Azure Spring Apps verwendet derzeit den Application Insights Java-Agent 3.5.2. Sie können je nach Ihren Anforderungen eine andere Version auswählen. Sie finden alle Versionen auf der Seite mit den Application Insights Java-Releases.
Sie finden die Application Insights-Verbindungszeichenfolge im Azure-Portal im Bereich Übersicht Ihrer Application Insights-Instanz. Diese Zeichenfolge ist für die Anweisungen in diesem Artikel erforderlich.
Es gibt einige Konfigurationsoptionen für den Application Insights Java-Agent, z. B. den Prozentsatz für die Stichprobenentnahme und den Namen der Cloudrolle. Weitere Informationen finden Sie unter Konfigurationsoptionen von Application Insights für Java.
Wenn Sie eine Dockerfile-Datei zum Erstellen eines Containerimages verwenden, lesen Sie den Abschnitt Verwenden von Dockerfile. Wenn Sie Paketo-Buildpacks zum Erstellen eines Containerimages verwenden, lesen Sie den Abschnitt Verwenden von Paketo-Buildpacks.
Verwenden von Dockerfile
Führen Sie die folgenden Schritte aus, um Ihre Dockerfile-Datei zu ändern:
- Laden Sie den Application Insights Java-Agent herunter, und erstellen Sie dafür eine Konfigurationsdatei namens applicationinsights.json.
- Fügen Sie dem Einstiegspunkt des Containerimages die Option
-javaagent
hinzu.
Weitere Informationen zum Erstellen einer JAR- oder WAR-Datei mit einer Dockerfile-Datei finden Sie unter Erstellen eines Containerimages aus einer JAR- oder WAR-Datei.
Erstellen einer JAR-Datei
Im folgenden Beispiel erstellt die Dockerfile-Datei eine JAR-Datei mit den vorherigen Änderungen:
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"]
Wenn Sie ein Containerimage mit dieser Dockerfile-Datei erstellen, müssen Sie Buildargumente mithilfe von --build-arg
hinzufügen, wie im folgenden Beispiel gezeigt:
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> \
.
Erstellen einer WAR-Datei
Im folgenden Beispiel erstellt die Dockerfile-Datei eine WAR-Datei mit den vorherigen Änderungen:
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"]
Wenn Sie ein Containerimage mit dieser Dockerfile-Datei erstellen, müssen Sie Buildargumente mithilfe von --build-arg
hinzufügen, wie im folgenden Beispiel gezeigt:
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> \
.
Integrieren anderer APM-Agents mithilfe von Dockerfile
Sie können andere APM-Agents auf ähnliche Weise integrieren. In der folgenden Liste sind einige andere APM-Agents zusammen mit einer Kurzbeschreibung der Integration aufgeführt. Anleitungen zum Download finden Sie in der offiziellen APM-Dokumentation.
- Dynatrace
- Laden Sie den Dynatrace-Agent in der Dockerfile-Datei herunter.
- Legen Sie die folgenden Umgebungsvariablen zur Laufzeit fest:
LD_PRELOAD=<path-to-agent>
DT_TENANT=<tenant>
DT_TENANTTOKEN=<token>
DT_CONNECTION_POINT=<connection-point>
-
DT_LOGLEVELCON=info
Weitere Informationen finden Sie unter Einrichten von OneAgent für Container nur zur Anwendungsüberwachung.
- AppDynamics
- Laden Sie den AppDynamics-Agent in der Dockerfile-Datei herunter.
- Fügen Sie
-javaagent:<path-to-agent>
zu den JVM-Optionen hinzu. - Legen Sie die erforderlichen Umgebungsvariablen zur Laufzeit fest, einschließlich
APPDYNAMICS_AGENT_ACCOUNT_NAME
,APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY
usw. Eine vollständige Liste der Konfigurationseigenschaften finden Sie unter AppDynamics Java Agent-Konfigurationseigenschaften.
- New Relic
- Laden Sie den New Relic-Agent in der Dockerfile-Datei herunter. Wenn Sie über eine Java Agent-Konfigurationsdatei für New Relic verfügen, kopieren Sie sie vom lokalen Computer in Ihren Container. Weitere Informationen zu Konfigurationsdateien finden Sie unter Java-Agent-Konfiguration: Konfigurationsdatei.
- Fügen Sie
-javaagent:<path-to-agent>
zu den JVM-Optionen hinzu. - Legen Sie die Umgebungsvariablen
NEW_RELIC_LICENSE_KEY=<license-key>
undNEW_RELIC_APP_NAME=<app-name>
zur Laufzeit fest, wenn Sie sie nicht in einer Konfigurationsdatei festgelegt haben oder wenn Sie die Werte in einer Konfigurationsdatei außer Kraft setzen möchten.
Es gibt einen weiteren Ansatz für die Integration eines APM-Agent, bei dem ein Containerimage für den APM-Agent vorab erstellt und als Init-Container ausgeführt wird. Weitere Informationen dazu finden Sie unter Tutorial: Konfigurieren des Java-Agent für die Anwendungsleistungsverwaltung (Application Performance Management, APM) mit Init-Containern in Azure Container Apps.
Verwenden von Paketo-Buildpacks
Um den Application Insights-Agent in Ihr Containerimage zu integrieren, benötigen Sie eine Bindung. Weitere Informationen zu Bindungen finden Sie in der Paketo-Dokumentation unter Bindungen.
Verwenden Sie zunächst die folgenden Befehle, um eine Bindung mit dem Namen application-insights im Verzeichnis bindings auf Ihrem lokalen Computer zu erstellen. Die Bindung besteht aus nur einer Datei mit dem Namen type. Der Inhalt der type-Datei ist der Text ApplicationInsights
, der eine Application Insights-Bindung angibt.
mkdir -p bindings/application-insights
echo "ApplicationInsights" > bindings/application-insights/type
Das folgende Diagramm zeigt die Verzeichnisstruktur:
bindings
└── application-insights
└── type
Verwenden Sie dann den folgenden Befehl, um das Image zu erstellen. Verwenden Sie die Option --volume
, um die Bindung für Ihren Build bereitzustellen. Die Pack-CLI stellt das binding-Verzeichnis im Buildcontainer bereit. Das Application Insights-Buildpack erkennt es dann und nimmt am Buildprozess teil.
pack build <image-name>:<image-tag> \
--volume $(pwd)/bindings/application-insights:/platform/bindings/application-insights" \
--path <path-to-source-root> \
--builder <builder-name>
Um das Containerimage in einer Azure Container Apps-Umgebung bereitzustellen, können Sie die Azure CLI verwenden. Weitere Informationen finden Sie unter Bereitstellen von Azure Container Apps mit dem Befehl „az containerapp up“. Es gibt zwei Ansätze, um die Application Insights-Verbindungszeichenfolge zur Laufzeit an den Application Insights-Agent zu übergeben. Ein Ansatz besteht darin, die Verbindungszeichenfolge als Umgebungsvariable zu übergeben. Weitere Informationen finden Sie im Abschnitt Konfigurieren mit Umgebungsvariablen. Der andere Ansatz besteht darin, die Verbindungszeichenfolge über Bindungen zu übergeben. Weitere Informationen finden Sie im Abschnitt Konfigurieren mit Bindungen.
Konfigurieren mit Umgebungsvariablen
Wenn Sie eine Verbindungszeichenfolge an Application Insights übergeben möchten, geben Sie APPLICATIONINSIGHTS_CONNECTION_STRING
in der Option --env-vars
an, wie im folgenden Beispiel gezeigt. Sie können andere Umgebungsvariablen angeben, wenn Sie weitere Konfigurationsoptionen an den Agent übergeben möchten.
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>"
Konfigurieren mit Bindungen
Um den Application Insights-Agent mit Bindungen zu konfigurieren, können Sie die Application Insights-Verbindungszeichenfolge, den Bindungstyp und alle anderen Konfigurationen als Geheimnisse in Ihrer Container-App speichern. Stellen Sie die Geheimnisse in einem Volume bereit, damit das Application Insights-Buildpack sie zur Laufzeit lesen kann.
Mit dem folgenden Befehl deklarieren Sie zwei Geheimnisse auf Anwendungsebene: type
und connection-string
. Sie werden in /bindings/application-insights im Container bereitgestellt. Das Buildpack sucht nach Bindungen im Verzeichnis /bindings, da die SERVICE_BINDING_ROOT
-Umgebungsvariable festgelegt ist.
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"
Alternativ können Sie die Verbindungszeichenfolge in Azure Key Vault speichern und in Geheimnissen darauf verweisen. Weitere Informationen finden Sie unter Verwalten von Geheimnissen in Azure Container Apps.
Informationen zum Bereitstellen des Containerimages für Azure Kubernetes Service finden Sie unter Verwenden von Buildpacks in Kubernetes für Java.
Integrieren anderer APM-Agents mithilfe von Paketo-Buildpacks
Es gibt Buildpacks für verschiedene APM-Agents, einschließlich der folgenden Agents. Weitere Informationen zum Einrichten und Konfigurieren von Bindungen finden Sie in der Dokumentation für jeden Agent.