Поделиться через


Руководство по настройке агента Java для управления производительностью приложений (APM) с контейнерами init в приложениях контейнеров Azure

В этом руководстве описана настройка агента Java для управления производительностью приложений (APM) с контейнерами инициализации в приложениях контейнеров Azure. APM помогает обеспечить возможность наблюдения за питанием для приложений контейнеров. Подключаемый модуль APM можно упаковывать в тот же образ или Dockerfile с приложением, но привязывается к проблемам управления, таким как освобождение и устранение распространенных уязвимостей и уязвимостей (CVE). Вместо привязки проблем можно использовать агент Java и контейнеры init в приложениях контейнеров Azure для внедрения решений APM без изменения образа приложения.

Изучив это руководство, вы:

  • Подготовьте образ для настройки агента Java и отправьте его в Реестр контейнеров Azure.
  • Создайте среду контейнерных приложений и приложение-контейнер в качестве целевого приложения Java.
  • Настройте контейнеры и подключения томов инициализации для настройки интеграции Application Insights.

Необходимые компоненты

Настройка среды

Чтобы определить переменные среды и убедиться, что расширение "Приложения контейнеров" обновлено, выполните следующие действия.

  1. Определите переменные среды с помощью следующих команд:

    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. Войдите в Azure CLI с помощью следующих команд:

    az login
    az account set --subscription $SUBSCRIPTION_ID
    
  3. Используйте следующие команды, чтобы убедиться, что у вас есть последняя версия расширений Azure CLI для приложений контейнеров и Application Insights:

    az extension add --name containerapp --upgrade
    az extension add --name application-insights --upgrade
    
  4. Получите строка подключения для экземпляра Application Insights с помощью следующих команд:

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

Подготовка образа контейнера

Чтобы создать образ установки для агента Java Application Insights, выполните следующие действия в том же каталоге:

  1. Создайте Dockerfile со следующим содержимым:

    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. Создайте файл setup.sh со следующим содержимым:

    #!/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. Создайте изображение с помощью следующей команды:

    docker build . --tag "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
    
  4. Отправьте образ в Реестр контейнеров Azure или другой реестр образов контейнеров с помощью следующих команд:

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

Совет

Вы можете найти код, соответствующий этому шагу, в репозитории GitHub azure-container-apps-java-samples .

Создание среды контейнерных приложений и приложения-контейнера в качестве целевого приложения Java

Чтобы создать среду контейнерных приложений и приложение контейнера в качестве целевого приложения Java, выполните следующие действия.

  1. Создайте среду контейнерных приложений с помощью следующей команды:

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

    После успешного создания среды "Приложения контейнеров" командная строка возвращает Succeeded сообщение.

  2. Создайте приложение-контейнер для дальнейшей настройки с помощью следующей команды:

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

    После создания приложения-контейнера командная строка возвращает Succeeded сообщение.

Настройка контейнера инициализации, секретов, переменных среды и томов для настройки интеграции Application Insights

Выполните следующие действия, чтобы настроить контейнер init с секретами, переменными среды и томами. Эта конфигурация позволяет использовать хранимую информацию с экземпляром Application Insights.

  1. Напишите текущую конфигурацию запущенного приложения-контейнера в файл app.yaml в текущем каталоге, выполнив следующую команду:

    az containerapp show \
        --resource-group $RESOURCE_GROUP \
        --name $CONTAINER_APP_NAME \
        --output yaml \
    > app.yaml
    
  2. Чтобы изменить файл app.yaml , выполните следующие действия. Изменения добавляют секреты, эфемерное хранилище и контейнер инициализации в файл и обновляют контейнер приложения.

    1. Добавьте секрет для строка подключения Application Insights, используя следующий пример. Замените $CONNECTION_STRING строка подключения Application Insights.

      properties:
        configuration:
           secrets:
           - name: app-insights-connection-string
             value: $CONNECTION_STRING
      
    2. Добавьте временный том хранилища для файлов агента Java, используя следующий пример:

      properties:
        template:
          volumes:
          - name: java-agent-volume
            storageType: EmptyDir
      
    3. Добавьте контейнер init с подключениями томов и переменными среды, используя следующий пример. Замените <CONTAINER_REGISTRY_NAME> Реестр контейнеров Azure именем.

      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. Обновите контейнер приложения с помощью подключений томов и переменных среды с помощью следующего примера:

      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. Обновите приложение-контейнер с измененным файлом app.yaml , выполнив следующую команду:

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

    После обновления приложения контейнера команда возвращает Succeeded сообщение. Теперь вы можете убедиться, что приложение-контейнер подключено, просмотрев экземпляр Application Insights в портал Azure.

Очистка ресурсов

Ресурсы, созданные в этом руководстве, вносят свой вклад в счет Azure. Если вам не нужен долгосрочный срок, используйте следующую команду, чтобы удалить группу ресурсов и ее ресурсы:

az group delete --resource-group $RESOURCE_GROUP

Кроме приложение Azure Insights, существуют другие популярные решения APM в сообществе. Если вы хотите интегрировать приложение контейнера Azure с другими поставщиками APM, просто замените JAR-файл агента Java и связанные файлы конфигурации.