Aracılığıyla paylaş


Öğretici: Azure Container Apps'te init kapsayıcılarıyla Uygulama Performansı Yönetimi (APM) Java aracısını yapılandırma

Bu öğreticide, Uygulama Performansı Yönetimi (APM) Java aracısını Azure Container Apps'teki init kapsayıcılarıyla yapılandıracaksınız. APM, kapsayıcı uygulamalarınız için güç gözlemlenebilirliğine yardımcı olur. APM eklentisini uygulamanızla aynı görüntüde veya Dockerfile'da paketleyebilirsiniz, ancak bu eklenti yayın ve Ortak Güvenlik Açıkları ve Etkilenmeleri (CVE) azaltma gibi yönetim endişelerini birleştirir. Endişeleri birbirine bağlamak yerine, uygulama görüntünüzü değiştirmeden APM çözümleri eklemek için Azure Container Apps'teki Java aracısını ve init kapsayıcılarını kullanabilirsiniz.

Bu öğreticide şunları yaptınız:

  • Java aracısını ayarlamak ve bir Azure Container Registry'ye göndermek için bir görüntü hazırlayın.
  • Hedef Java uygulaması olarak bir Container Apps ortamı ve kapsayıcı uygulaması oluşturun.
  • Application Insights tümleştirmesini ayarlamak için init kapsayıcılarını ve birim bağlamalarını yapılandırın.

Önkoşullar

  • Azure aboneliği. Ücretsiz bir tane oluşturun..
  • Application Insights örneği.
  • Azure Container Registry örneği veya başka bir kapsayıcı görüntüsü kayıt defteri.
  • Docker, görüntü oluşturmak için.
  • Azure CLI'nın en son sürümü.

Ortamı ayarlama

Ortam değişkenlerini tanımlamak ve Container Apps uzantınızın güncel olduğundan emin olmak için aşağıdaki adımları kullanın:

  1. Aşağıdaki komutları kullanarak ortam değişkenlerini tanımlayın:

    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. Aşağıdaki komutları kullanarak Azure CLI'da oturum açın:

    az login
    az account set --subscription $SUBSCRIPTION_ID
    
  3. Container Apps ve Application Insights için Azure CLI uzantılarının en son sürümüne sahip olduğunuzdan emin olmak için aşağıdaki komutları kullanın:

    az extension add --name containerapp --upgrade
    az extension add --name application-insights --upgrade
    
  4. Aşağıdaki komutları kullanarak Application Insights örneğinizin bağlantı dizesi alın:

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

Kapsayıcı görüntüsünü hazırlama

Application Insights Java aracısı için bir kurulum görüntüsü oluşturmak için aynı dizinde aşağıdaki adımları kullanın:

  1. Aşağıdaki içeriklere sahip bir Dockerfile oluşturun:

    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. Aşağıdaki içeriklere sahip bir setup.sh dosyası oluşturun:

    #!/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. Aşağıdaki komutu kullanarak bir görüntü oluşturun:

    docker build . --tag "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
    
  4. Aşağıdaki komutları kullanarak görüntüyü Azure Container Registry'ye veya başka bir kapsayıcı görüntüsü kayıt defterine gönderin:

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

İpucu

Bu adımla ilgili kodu azure-container-apps-java-samples GitHub deposunda bulabilirsiniz.

Hedef Java uygulaması olarak bir Container Apps ortamı ve kapsayıcı uygulaması oluşturma

Hedef Java uygulaması olarak bir Container Apps ortamı ve kapsayıcı uygulaması oluşturmak için aşağıdaki adımları kullanın:

  1. Aşağıdaki komutu kullanarak bir Container Apps ortamı oluşturun:

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

    Container Apps ortamını başarıyla oluşturduktan sonra komut satırı bir Succeeded ileti döndürür.

  2. Aşağıdaki komutu kullanarak daha fazla yapılandırma için bir kapsayıcı uygulaması oluşturun:

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

    Kapsayıcı uygulamasını oluşturduktan sonra komut satırı bir Succeeded ileti döndürür.

Application Insights tümleştirmesini ayarlamak için init kapsayıcısını, gizli dizileri, ortam değişkenlerini ve birimleri yapılandırma

Init kapsayıcınızı gizli diziler, ortam değişkenleri ve birimlerle yapılandırmak için aşağıdaki adımları kullanın. Bu yapılandırma, depolanan bilgileri Application Insights örneğiniz ile kullanmanıza olanak tanır.

  1. Aşağıdaki komutu kullanarak çalışan kapsayıcı uygulamasının geçerli yapılandırmasını geçerli dizindeki bir app.yaml dosyasına yazın:

    az containerapp show \
        --resource-group $RESOURCE_GROUP \
        --name $CONTAINER_APP_NAME \
        --output yaml \
    > app.yaml
    
  2. app.yaml dosyanızı düzenlemek için aşağıdaki adımları kullanın. Düzenlemeler dosyaya gizli diziler, kısa süreli depolama ve bir init kapsayıcısı ekler ve uygulama kapsayıcısını güncelleştirir.

    1. Aşağıdaki örneği kullanarak Application Insights bağlantı dizesi için bir gizli dizi ekleyin. değerini Application Insights bağlantı dizesi ile değiştirin$CONNECTION_STRING.

      properties:
        configuration:
           secrets:
           - name: app-insights-connection-string
             value: $CONNECTION_STRING
      
    2. Aşağıdaki örneği kullanarak Java aracı dosyaları için kısa süreli depolama birimi ekleyin:

      properties:
        template:
          volumes:
          - name: java-agent-volume
            storageType: EmptyDir
      
    3. Aşağıdaki örneği kullanarak birim bağlamaları ve ortam değişkenleri içeren bir init kapsayıcısı ekleyin. değerini Azure Container Registry adınızla değiştirin <CONTAINER_REGISTRY_NAME> .

      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. Aşağıdaki örneği kullanarak uygulama kapsayıcısını birim bağlamaları ve ortam değişkenleriyle güncelleştirin:

      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. Aşağıdaki komutu kullanarak kapsayıcı uygulamasını değiştirilmiş app.yaml dosyasıyla güncelleştirin:

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

    Kapsayıcı uygulamasını güncelleştirdikten sonra komut bir Succeeded ileti döndürür. Artık Azure portalında Application Insights örneğinizi görüntüleyerek kapsayıcı uygulamanızın bağlı olduğunu doğrulayabilirsiniz.

Kaynakları temizleme

Bu öğreticide oluşturduğunuz kaynaklar Azure faturanıza katkıda bulunur. Bunlara uzun süreli olarak ihtiyacınız yoksa, kaynak grubunu ve kaynaklarını kaldırmak için aşağıdaki komutu kullanın:

az group delete --resource-group $RESOURCE_GROUP

Azure Uygulaması lication Insights dışında, toplulukta başka popüler APM çözümleri de vardır. Azure Container App'inizi diğer APM sağlayıcılarıyla tümleştirmek istiyorsanız Java aracısı JAR'sini ve ilgili yapılandırma dosyalarını değiştirmeniz gerekir.