Bagikan melalui


Tutorial: Mengonfigurasi agen Java Application Performance Management (APM) dengan kontainer init di Azure Container Apps

Dalam tutorial ini, Anda mengonfigurasi agen Java Application Performance Management (APM) dengan kontainer init di Azure Container Apps. APM membantu pengamatan daya untuk aplikasi kontainer Anda. Anda dapat mengemas plugin APM dalam gambar yang sama atau Dockerfile dengan aplikasi Anda, tetapi mengikat bersama-sama masalah manajemen, seperti rilis dan mitigasi Common Vulnerabilities and Exposures (CVE). Daripada mengikat kekhawatiran bersama-sama, Anda dapat menggunakan agen Java dan kontainer init di Azure Container Apps untuk menyuntikkan solusi APM tanpa memodifikasi gambar aplikasi Anda.

Di tutorial ini, Anda akan:

  • Siapkan gambar untuk menyiapkan agen Java dan mendorongnya ke Azure Container Registry.
  • Buat lingkungan Aplikasi Kontainer dan aplikasi kontainer sebagai aplikasi Java target.
  • Konfigurasikan kontainer init dan pemasangan volume untuk menyiapkan integrasi Application Insights.

Prasyarat

Menyiapkan lingkungan

Gunakan langkah-langkah berikut untuk menentukan variabel lingkungan dan memastikan ekstensi Container Apps Anda sudah diperbarui:

  1. Tentukan variabel lingkungan dengan menggunakan perintah berikut:

    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. Masuk ke Azure CLI dengan menggunakan perintah berikut:

    az login
    az account set --subscription $SUBSCRIPTION_ID
    
  3. Gunakan perintah berikut untuk memastikan bahwa Anda memiliki versi terbaru ekstensi Azure CLI untuk Container Apps dan Application Insights:

    az extension add --name containerapp --upgrade
    az extension add --name application-insights --upgrade
    
  4. Ambil string koneksi untuk instans Application Insights Anda dengan menggunakan perintah berikut:

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

Menyiapkan gambar kontainer

Untuk membangun gambar penyiapan untuk agen Application Insights Java, gunakan langkah-langkah berikut dalam direktori yang sama:

  1. Buat Dockerfile dengan konten berikut:

    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. Buat file setup.sh dengan konten berikut:

    #!/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. Buat gambar dengan menggunakan perintah berikut:

    docker build . --tag "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
    
  4. Dorong gambar ke Azure Container Registry atau registri gambar kontainer lain dengan menggunakan perintah berikut:

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

Petunjuk / Saran

Anda dapat menemukan kode yang relevan dengan langkah ini di repositori GitHub azure-container-apps-java-samples .

Membuat lingkungan Container Apps dan aplikasi kontainer sebagai aplikasi Java target

Untuk membuat lingkungan Container Apps dan aplikasi kontainer sebagai aplikasi Java target, gunakan langkah-langkah berikut:

  1. Buat lingkungan Container Apps dengan menggunakan perintah berikut:

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

    Setelah Anda berhasil membuat lingkungan Container Apps, baris perintah mengembalikan pesan Succeeded .

  2. Buat aplikasi kontainer untuk konfigurasi lebih lanjut dengan menggunakan perintah berikut:

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

    Setelah Anda membuat aplikasi kontainer, baris perintah mengembalikan pesan Succeeded .

Mengonfigurasi kontainer init, rahasia, variabel lingkungan, dan volume untuk menyiapkan integrasi Application Insights

Gunakan langkah-langkah berikut untuk mengonfigurasi kontainer init Anda dengan rahasia, variabel lingkungan, dan volume. Konfigurasi ini memungkinkan Anda menggunakan informasi tersimpan dengan instans Application Insights Anda.

  1. Tulis konfigurasi aplikasi kontainer yang sedang berjalan saat ini ke file app.yaml di direktori saat ini, dengan menggunakan perintah berikut:

    az containerapp show \
        --resource-group $RESOURCE_GROUP \
        --name $CONTAINER_APP_NAME \
        --output yaml \
    > app.yaml
    
  2. Gunakan langkah-langkah berikut untuk mengedit file app.yaml Anda. Pengeditan menambahkan rahasia, penyimpanan ephemeral, dan kontainer init ke file, dan memperbarui kontainer aplikasi.

    1. Tambahkan rahasia untuk string koneksi Application Insights dengan menggunakan contoh berikut. Ganti $CONNECTION_STRING dengan string koneksi Application Insights Anda.

      properties:
        configuration:
           secrets:
           - name: app-insights-connection-string
             value: $CONNECTION_STRING
      
    2. Tambahkan volume penyimpanan sementara untuk file agen Java dengan menggunakan contoh berikut:

      properties:
        template:
          volumes:
          - name: java-agent-volume
            storageType: EmptyDir
      
    3. Tambahkan kontainer init dengan pemasangan volume dan variabel lingkungan dengan menggunakan contoh berikut. Ganti <CONTAINER_REGISTRY_NAME> dengan nama Azure Container Registry Anda.

      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. Perbarui kontainer aplikasi dengan pemasangan volume dan variabel lingkungan dengan menggunakan contoh berikut:

      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. Perbarui aplikasi kontainer dengan file app.yaml yang dimodifikasi dengan menggunakan perintah berikut:

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

    Setelah Anda memperbarui aplikasi kontainer, perintah mengembalikan Succeeded pesan. Sekarang Anda dapat memverifikasi bahwa aplikasi kontainer Anda terhubung, dengan melihat instans Application Insights Anda di portal Azure.

Membersihkan sumber daya

Sumber daya yang Anda buat dalam tutorial ini berkontribusi pada tagihan Azure Anda. Jika Anda tidak memerlukannya dalam jangka panjang, gunakan perintah berikut untuk menghapus grup sumber daya dan sumber dayanya:

az group delete --resource-group $RESOURCE_GROUP

Selain Azure Application Insights, ada solusi APM populer lainnya di komunitas. Jika Anda ingin mengintegrasikan Azure Container App dengan penyedia APM lainnya, cukup ganti JAR agen Java dan file konfigurasi terkait.