Freigeben über


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

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:

  1. 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"
    
  2. Melden Sie sich mit den folgenden Befehlen bei der Azure-Befehlszeilenschnittstelle an:

    az login
    az account set --subscription $SUBSCRIPTION_ID
    
  3. 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
    
  4. 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:

  1. 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"]
    
  2. 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
    
  3. Erstellen Sie das Image mithilfe des folgenden Befehls:

    docker build . --tag "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
    
  4. 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:

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

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

  1. 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
    
  2. 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.

    1. 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
      
    2. 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
      
    3. 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
      
    4. 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
      
  3. 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

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.