Tutorial: Konfigurieren des Java-Agents für die Anwendungsleistungsverwaltung (Application Performance Management, APM) mit Init-Containern in Azure Container Apps
In diesem Tutorial konfigurieren Sie den Java-Agent für die Anwendungsleistungsverwaltung (Application Performance Management, APM) mit Init-Containern in Azure Container Apps. APM unterstützt Einblicke in Ihre Container-Apps. Sie können das APM-Plug-In im selben Image oder Dockerfile wie Ihre App packen, dies bindet aber die Verwaltungsanstrengungen, z. B. die Freigabe und CVE-Entschärfung (Common Vulnerabilities and Exposures). Anstatt die Anstrengungen zusammen zu binden, können Sie den Java-Agent und Init-Container in Azure Container Apps anwenden, um APM-Lösungen einzufügen, ohne Ihr App-Image zu ändern.
In diesem Tutorial:
- Vorbereiten eines Image zum Einrichten des Java-Agents und zum Pushen an Azure Container Registry
- Erstellen einer Container Apps-Umgebung und einer Container-App als Java-Ziel-App
- Konfigurieren von Init-Containern und Volumeeinbindungen zum Einrichten der Application Insights-Integration
Voraussetzungen
- Ein Azure-Abonnement. Kostenlos erstellen.
- Eine Instanz von Application Insights
- Eine Instanz von Azure Container Registry oder einer andere Registrierung für Containerimages
- Docker zum Erstellen eines Image
- Die aktuelle Version der Azure-Befehlszeilenschnittstelle.
Einrichten der Umgebung
Führen Sie die folgenden Schritte aus, um Umgebungsvariablen zu definieren und sicherzustellen, dass Ihre Container Apps-Erweiterung auf dem neuesten Stand ist:
Definieren Sie Umgebungsvariablen mithilfe der folgenden Befehle:
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"
Melden Sie sich mit den folgenden Befehlen bei der Azure-Befehlszeilenschnittstelle an:
az login az account set --subscription $SUBSCRIPTION_ID
Verwenden Sie die folgenden Befehle, um sicherzustellen, dass Sie über die neueste Version der Azure CLI-Erweiterungen für Container Apps und Application Insights verfügen:
az extension add --name containerapp --upgrade az extension add --name application-insights --upgrade
Rufen Sie mit den folgenden Befehlen die Verbindungszeichenfolge für Ihre Application Insights-Instanz ab:
CONNECTION_STRING=$(az monitor app-insights component show \ --ids $APP_INSIGHTS_RESOURCE_ID \ --query connectionString)
Vorbereiten des Containerimage
Führen Sie die folgenden Schritte im selben Verzeichnis aus, um ein Setupimage für den Application Insights-Java-Agent zu erstellen:
Erstellen Sie eine Dockerfile-Datei mit dem folgenden Inhalt:
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"]
Erstellen Sie eine Datei setup.sh mit folgendem Inhalt:
#!/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
Erstellen Sie das Image mithilfe des folgenden Befehls:
docker build . --tag "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
Pushen Sie das Image mithilfe der folgenden Befehle an Azure Container Registry oder eine andere Containerimageregistrierung:
az acr login --name $CONTAINER_REGISTRY_NAME docker push "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
Tipp
Den für diesen Schritt relevanten Code finden Sie im GitHub-Repository azure-container-apps-java-samples.
Erstellen einer Container Apps-Umgebung und einer Container-App als Ziel-Java-App
Führen Sie die folgenden Schritte aus, um eine Container Apps-Umgebung und eine Container-App als Java-Ziel-App zu erstellen:
Erstellen Sie die Container Apps-Umgebung mit dem folgenden Befehl:
az containerapp env create \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --location "$LOCATION" \ --query "properties.provisioningState"
Nachdem Sie die Container Apps-Umgebung erfolgreich erstellt haben, gibt die Befehlszeile eine
Succeeded
-Nachricht zurück.Erstellen Sie mithilfe des folgenden Befehls eine Container-App für die weitere Konfiguration:
az containerapp create \ --name $CONTAINER_APP_NAME \ --environment $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --query "properties.provisioningState"
Nachdem Sie die Container-App erstellt haben, gibt die Befehlszeile eine
Succeeded
-Nachricht zurück.
Konfigurieren von Init-Container, Geheimnissen, Umgebungsvariablen und Volumes zum Einrichten der Application Insights-Integration
Führen Sie die folgenden Schritte aus, um Ihren Init-Container mit Geheimnissen, Umgebungsvariablen und Volumes zu konfigurieren. Mit dieser Konfiguration sind Sie in der Lage, die gespeicherten Informationen mit Ihrer Application Insights-Instanz zu verwenden.
Schreiben Sie die aktuelle Konfiguration der ausgeführten Container-App in eine Datei app.yaml im aktuellen Verzeichnis, indem Sie den folgenden Befehl ausführen:
az containerapp show \ --resource-group $RESOURCE_GROUP \ --name $CONTAINER_APP_NAME \ --output yaml \ > app.yaml
Führen Sie die folgenden Schritte aus, um die Datei app.yaml zu bearbeiten. Durch die Änderungen werden in der Datei Geheimnisse, kurzlebiger Speicher und ein Init-Container hinzugefügt, und der App-Container wird aktualisiert.
Fügen Sie mithilfe des folgenden Beispiels ein Geheimnis für die Application Insights-Verbindungszeichenfolge hinzu. Ersetzen Sie
$CONNECTION_STRING
durch Ihre Application Insights-Verbindungszeichenfolge.properties: configuration: secrets: - name: app-insights-connection-string value: $CONNECTION_STRING
Fügen Sie mithilfe des folgenden Beispiels ein kurzlebiges Speichervolume für Dateien des Java-Agents hinzu:
properties: template: volumes: - name: java-agent-volume storageType: EmptyDir
Fügen Sie mithilfe des folgenden Beispiels einen Init-Container mit Volumeeinbindungen und Umgebungsvariablen hinzu. Ersetzen Sie
<CONTAINER_REGISTRY_NAME>
durch den Namen Ihrer Azure Container Registry-Instanz.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
Aktualisieren Sie mithilfe des folgenden Beispiels den App-Container mit Volumeeinbindungen und Umgebungsvariablen:
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
Führen Sie den folgenden Befehl aus, um die Container-App mit der geänderten Datei app.yaml zu aktualisieren:
az containerapp update \ --resource-group $RESOURCE_GROUP \ --name $CONTAINER_APP_NAME \ --yaml app.yaml \ --query "properties.provisioningState"
Nachdem Sie die Container-App aktualisiert haben, gibt der Befehl eine
Succeeded
-Nachricht zurück. Überprüfen Sie als Nächstes, ob Ihre Container-App verbunden ist, indem Sie Ihre Application Insights-Instanz im Azure-Portal anzeigen.
Bereinigen von Ressourcen
Die in diesem Tutorial erstellten Ressourcen werden auf Ihre Azure-Rechnung angerechnet. Wenn Sie sie nicht langfristig benötigen, führen Sie den folgenden Befehl aus, um die Ressourcengruppe und die zugehörigen Ressourcen zu entfernen:
az group delete --resource-group $RESOURCE_GROUP
Zugehöriger Inhalt
Neben Azure Application Insights gibt es noch andere in der Community beliebte APM-Lösungen. Wenn Sie Ihre Azure-Container-App mit anderen APM-Anbietern integrieren möchten, ersetzen Sie einfach die JAR-Datei und die zugehörigen Konfigurationsdateien des Java-Agents.