Udostępnij za pośrednictwem


Samouczek: konfigurowanie agenta Java do zarządzania wydajnością aplikacji (APM) za pomocą kontenerów inicjowania w usłudze Azure Container Apps

W tym samouczku skonfigurujesz agenta java zarządzania wydajnością aplikacji (APM) z kontenerami inicjowania w usłudze Azure Container Apps. Usługa APM ułatwia obserwowanie możliwości aplikacji kontenera. Wtyczkę APM można spakować w tym samym obrazie lub pliku Dockerfile z aplikacją, ale wiąże ze sobą problemy związane z zarządzaniem, takie jak ograniczanie ryzyka związanego z wydaniami i typowymi lukami w zabezpieczeniach i ekspozycjami (CVE). Zamiast wiązać problemy razem, możesz użyć agenta Java i kontenerów inicjowania w usłudze Azure Container Apps, aby wstrzyknąć rozwiązania APM bez modyfikowania obrazu aplikacji.

W tym samouczku zostały wykonane następujące czynności:

  • Przygotuj obraz, aby skonfigurować agenta Java i wypchnąć go do usługi Azure Container Registry.
  • Utwórz środowisko usługi Container Apps i aplikację kontenera jako docelową aplikację Java.
  • Konfigurowanie kontenerów inicjowania i instalacji woluminów w celu skonfigurowania integracji usługi Application Insights.

Wymagania wstępne

Konfigurowanie środowiska

Wykonaj następujące kroki, aby zdefiniować zmienne środowiskowe i upewnić się, że rozszerzenie usługi Container Apps jest aktualne:

  1. Zdefiniuj zmienne środowiskowe przy użyciu następujących poleceń:

    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. Zaloguj się do interfejsu wiersza polecenia platformy Azure przy użyciu następujących poleceń:

    az login
    az account set --subscription $SUBSCRIPTION_ID
    
  3. Użyj następujących poleceń, aby upewnić się, że masz najnowszą wersję rozszerzeń interfejsu wiersza polecenia platformy Azure dla usługi Container Apps i Application Insights:

    az extension add --name containerapp --upgrade
    az extension add --name application-insights --upgrade
    
  4. Pobierz parametry połączenia dla wystąpienia usługi Application Insights, używając następujących poleceń:

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

Przygotowywanie obrazu kontenera

Aby utworzyć obraz konfiguracji dla agenta Java usługi Application Insights, wykonaj następujące kroki w tym samym katalogu:

  1. Utwórz plik Dockerfile z następującą zawartością:

    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. Utwórz plik setup.sh o następującej zawartości:

    #!/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. Utwórz obraz przy użyciu następującego polecenia:

    docker build . --tag "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
    
  4. Wypchnij obraz do usługi Azure Container Registry lub innego rejestru obrazów kontenerów przy użyciu następujących poleceń:

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

Napiwek

Kod odpowiedni dla tego kroku można znaleźć w repozytorium GitHub azure-container-apps-java-samples .

Tworzenie środowiska usługi Container Apps i aplikacji kontenera jako docelowej aplikacji Java

Aby utworzyć środowisko usługi Container Apps i aplikację kontenera jako docelową aplikację Java, wykonaj następujące kroki:

  1. Utwórz środowisko usługi Container Apps przy użyciu następującego polecenia:

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

    Po pomyślnym utworzeniu środowiska Container Apps wiersz polecenia zwraca Succeeded komunikat.

  2. Utwórz aplikację kontenera na potrzeby dalszej konfiguracji przy użyciu następującego polecenia:

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

    Po utworzeniu aplikacji kontenera wiersz polecenia zwraca Succeeded komunikat.

Konfigurowanie kontenera inicjowania, wpisów tajnych, zmiennych środowiskowych i woluminów w celu skonfigurowania integracji usługi Application Insights

Wykonaj poniższe kroki, aby skonfigurować kontener inicjowania przy użyciu wpisów tajnych, zmiennych środowiskowych i woluminów. Ta konfiguracja umożliwia używanie przechowywanych informacji z wystąpieniem usługi Application Insights.

  1. Zapisz bieżącą konfigurację uruchomionej aplikacji kontenera w pliku app.yaml w bieżącym katalogu, używając następującego polecenia:

    az containerapp show \
        --resource-group $RESOURCE_GROUP \
        --name $CONTAINER_APP_NAME \
        --output yaml \
    > app.yaml
    
  2. Wykonaj poniższe kroki, aby edytować plik app.yaml . Zmiany dodają wpisy tajne, magazyn efemeryczny i kontener init do pliku oraz zaktualizują kontener aplikacji.

    1. Dodaj wpis tajny dla parametry połączenia usługi Application Insights, korzystając z poniższego przykładu. Zastąp $CONNECTION_STRING element parametry połączenia usługi Application Insights.

      properties:
        configuration:
           secrets:
           - name: app-insights-connection-string
             value: $CONNECTION_STRING
      
    2. Dodaj efemeryczny wolumin magazynu dla plików agenta Java, korzystając z następującego przykładu:

      properties:
        template:
          volumes:
          - name: java-agent-volume
            storageType: EmptyDir
      
    3. Dodaj kontener init z instalacjami woluminów i zmiennymi środowiskowymi, korzystając z poniższego przykładu. Zastąp <CONTAINER_REGISTRY_NAME> ciąg nazwą usługi 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. Zaktualizuj kontener aplikacji za pomocą instalacji woluminów i zmiennych środowiskowych, korzystając z następującego przykładu:

      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. Zaktualizuj aplikację kontenera przy użyciu zmodyfikowanego pliku app.yaml , używając następującego polecenia:

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

    Po zaktualizowaniu aplikacji kontenera polecenie zwróci Succeeded komunikat. Teraz możesz sprawdzić, czy aplikacja kontenera jest połączona, wyświetlając wystąpienie usługi Application Insights w witrynie Azure Portal.

Czyszczenie zasobów

Zasoby utworzone w tym samouczku współtworzyją rachunek za korzystanie z platformy Azure. Jeśli nie są one potrzebne w dłuższej perspektywie, użyj następującego polecenia, aby usunąć grupę zasobów i jej zasoby:

az group delete --resource-group $RESOURCE_GROUP

Inne niż aplikacja systemu Azure Insights, istnieją inne popularne rozwiązania APM w społeczności. Jeśli chcesz zintegrować aplikację kontenera platformy Azure z innymi dostawcami APM, po prostu zastąp plik JAR agenta Java i powiązanymi plikami konfiguracji.