Delen via


Zelfstudie: De Java-agent application performance management (APM) configureren met init-containers in Azure Container Apps

In deze zelfstudie configureert u de Java-agent application performance management (APM) met init-containers in Azure Container Apps. Met APM kunt u de waarneembaarheid van uw container-apps verbeteren. U kunt de APM-invoegtoepassing in dezelfde installatiekopieën of Dockerfile inpakken met uw app, maar het verbindt de beheerproblemen, zoals release en Common Vulnerabilities and Exposures (CVE). In plaats van de problemen aan elkaar te koppelen, kunt u de Java-agent en init-containers in Azure Container Apps gebruiken om APM-oplossingen te injecteren zonder de installatiekopieën van uw app te wijzigen.

In deze zelfstudie hebt u:

  • Bereid een installatiekopieën voor om de Java-agent in te stellen en naar een Azure Container Registry te pushen.
  • Maak een Container Apps-omgeving en een container-app als doel-Java-app.
  • Configureer init-containers en volumekoppelingen om Application Insights-integratie in te stellen.

Vereisten

  • Een Azure-abonnement. Maak er gratis een.
  • Een exemplaar van Application Insights.
  • Een exemplaar van Azure Container Registry of een ander containerinstallatiekopieënregister.
  • Docker, om een installatiekopieën te bouwen.
  • De nieuwste versie van de Azure CLI.

De omgeving instellen

Gebruik de volgende stappen om omgevingsvariabelen te definiëren en ervoor te zorgen dat uw Container Apps-extensie up-to-date is:

  1. Definieer omgevingsvariabelen met behulp van de volgende opdrachten:

    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. Meld u aan bij de Azure CLI met behulp van de volgende opdrachten:

    az login
    az account set --subscription $SUBSCRIPTION_ID
    
  3. Gebruik de volgende opdrachten om ervoor te zorgen dat u de nieuwste versie van de Azure CLI-extensies voor Container Apps en Application Insights hebt:

    az extension add --name containerapp --upgrade
    az extension add --name application-insights --upgrade
    
  4. Haal de verbindingsreeks voor uw Application Insights-exemplaar op met behulp van de volgende opdrachten:

    CONNECTION_STRING=$(az monitor app-insights component show \
        --ids $APP_INSIGHTS_RESOURCE_ID \
        --query connectionString)
    

De containerinstallatiekopieën voorbereiden

Als u een installatiekopieën wilt maken voor de Application Insights Java-agent, gebruikt u de volgende stappen in dezelfde map:

  1. Maak een Dockerfile met de volgende inhoud:

    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. Maak een setup.sh-bestand met de volgende inhoud:

    #!/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. Maak een installatiekopieën met behulp van de volgende opdracht:

    docker build . --tag "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
    
  4. Push de installatiekopieën naar Azure Container Registry of een ander containerinstallatiekopieënregister met behulp van de volgende opdrachten:

    az acr login --name $CONTAINER_REGISTRY_NAME
    docker push "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
    

Tip

U vindt code die relevant is voor deze stap in de GitHub-opslagplaats azure-container-apps-java-samples .

Een Container Apps-omgeving en een container-app maken als de Java-doel-app

Als u een Container Apps-omgeving en een container-app wilt maken als doel-Java-app, gebruikt u de volgende stappen:

  1. Maak een Container Apps-omgeving met behulp van de volgende opdracht:

    az containerapp env create \
        --name $ENVIRONMENT_NAME \
        --resource-group $RESOURCE_GROUP \
        --location "$LOCATION" \
        --query "properties.provisioningState"
    

    Nadat u de Container Apps-omgeving hebt gemaakt, retourneert de opdrachtregel een Succeeded bericht.

  2. Maak een container-app voor verdere configuratie met behulp van de volgende opdracht:

    az containerapp create \
        --name $CONTAINER_APP_NAME \
        --environment $ENVIRONMENT_NAME \
        --resource-group $RESOURCE_GROUP \
        --query "properties.provisioningState"
    

    Nadat u de container-app hebt gemaakt, retourneert de opdrachtregel een Succeeded bericht.

Init-container, geheimen, omgevingsvariabelen en volumes configureren voor het instellen van Application Insights-integratie

Gebruik de volgende stappen om uw init-container te configureren met geheimen, omgevingsvariabelen en volumes. Met deze configuratie kunt u de opgeslagen gegevens gebruiken met uw Application Insights-exemplaar.

  1. Schrijf de huidige configuratie van de actieve container-app naar een app.yaml-bestand in de huidige map met behulp van de volgende opdracht:

    az containerapp show \
        --resource-group $RESOURCE_GROUP \
        --name $CONTAINER_APP_NAME \
        --output yaml \
    > app.yaml
    
  2. Gebruik de volgende stappen om het bestand app.yaml te bewerken. De bewerkingen voegen geheimen, tijdelijke opslag en een init-container toe aan het bestand en werken de app-container bij.

    1. Voeg een geheim toe voor de Application Insights-verbindingsreeks met behulp van het volgende voorbeeld. Vervang $CONNECTION_STRING door uw Application Insights-verbindingsreeks.

      properties:
        configuration:
           secrets:
           - name: app-insights-connection-string
             value: $CONNECTION_STRING
      
    2. Voeg een kortstondig opslagvolume toe voor Java-agentbestanden met behulp van het volgende voorbeeld:

      properties:
        template:
          volumes:
          - name: java-agent-volume
            storageType: EmptyDir
      
    3. Voeg een init-container met volumekoppelingen en omgevingsvariabelen toe met behulp van het volgende voorbeeld. Vervang door <CONTAINER_REGISTRY_NAME> de naam van uw Azure Container Registry.

      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. Werk de app-container bij met volumekoppelingen en omgevingsvariabelen met behulp van het volgende voorbeeld:

      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. Werk de container-app bij met het gewijzigde bestand app.yaml met behulp van de volgende opdracht:

    az containerapp update \
        --resource-group $RESOURCE_GROUP \ 
        --name $CONTAINER_APP_NAME \
        --yaml app.yaml \
        --query "properties.provisioningState"
    

    Nadat u de container-app hebt bijgewerkt, retourneert de opdracht een Succeeded bericht. U kunt nu controleren of uw container-app is verbonden door uw Application Insights-exemplaar te bekijken in Azure Portal.

Resources opschonen

De resources die u in deze zelfstudie hebt gemaakt, dragen bij aan uw Azure-factuur. Als u deze niet op lange termijn nodig hebt, gebruikt u de volgende opdracht om de resourcegroep en de bijbehorende resources te verwijderen:

az group delete --resource-group $RESOURCE_GROUP

Behalve Azure-toepassing Insights zijn er andere populaire APM-oplossingen in de community. Als u uw Azure Container App wilt integreren met andere APM-providers, vervangt u de JAR van de Java-agent en gerelateerde configuratiebestanden.