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


Интеграция мониторинга производительности приложения в образы контейнеров

Примечание.

Планы "Базовый", "Стандартный" и "Корпоративный" будут устарели начиная с середины марта 2025 г. с 3-летнего периода выхода на пенсию. Рекомендуется перейти в приложения контейнеров Azure. Дополнительные сведения см. в объявлении о выходе на пенсию в Azure Spring Apps.

Стандартный план потребления и выделенного плана будет устарел с 30 сентября 2024 г. с полным завершением работы после шести месяцев. Рекомендуется перейти в приложения контейнеров Azure. Дополнительные сведения см. в статье "Миграция потребления Azure Spring Apps Standard" и выделенного плана в приложения контейнеров Azure.

Эта статья относится к:✅ Basic/Standard ✅ Enterprise

В этой статье объясняется, как интегрировать агент Java Application Insights в образ контейнера. Аналогичным образом можно также интегрировать другие агенты мониторинга производительности приложений (APM) в образ контейнера, включая AppDynamics, New Relic и Dynatrace.

Azure Spring Apps плавно интегрируется с агентами APM. При переносе приложений в приложения контейнеров Azure или Служба Azure Kubernetes (AKS) необходимо интегрировать с APM при создании образа. Процесс аналогичен подходу, используемому Azure Spring Apps. Вы также можете добавить агент APM в отдельный контейнер init-container и внедрить его в приложение контейнера во время инициализации.

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

Выбор агента Java Application Insights

Azure Spring Apps в настоящее время использует агент Java Application Insights 3.5.2. Вы можете выбрать другую версию в зависимости от ваших потребностей. Все версии можно найти на странице выпусков Application Insights Java.

Строка подключения Application Insights можно найти в портал Azure на панели обзора экземпляра Application Insights. Эта строка необходима для инструкций в этой статье.

Существуют некоторые параметры конфигурации агента Java Application Insights, такие как процент выборки и имя облачной роли. Дополнительные сведения см. в разделе "Параметры конфигурации" Application Insights для Java.

Если вы используете Dockerfile для создания образа контейнера, см . раздел "Использование Dockerfile ". Если вы используете Paketo Buildpacks для создания образа контейнера, см . раздел Use Paketo Buildpacks .

Использование Dockerfile

Чтобы изменить Dockerfile, выполните следующие действия.

  1. Скачайте агент Java Application Insights и создайте для него файл конфигурации с именем applicationinsights.json.
  2. -javaagent Добавьте параметр в точку входа образа контейнера.

Дополнительные сведения о создании JAR-файла или WAR-файла с помощью Dockerfile см. в статье о создании образа контейнера из JAR-файла или WAR.

Создание JAR-файла

В следующем примере Dockerfile создается JAR-файл с предыдущими изменениями:

FROM mcr.microsoft.com/openjdk/jdk:17-mariner

ARG APP_INSIGHTS_VERSION
ARG APP_INSIGHTS_CONNECTION_STRING
ARG JAR_FILENAME

# Set up Application Insights agent
ADD https://github.com/microsoft/ApplicationInsights-Java/releases/download/${APP_INSIGHTS_VERSION}/applicationinsights-agent-${APP_INSIGHTS_VERSION}.jar \
  /java-agent/applicationinsights-agent.jar
RUN echo "{\"connectionString\": \"${APP_INSIGHTS_CONNECTION_STRING}\"}" > applicationinsights.json \
    && mv applicationinsights.json /java-agent/applicationinsights.json

COPY $JAR_FILENAME /opt/app/app.jar

# Add -javaagent option
ENTRYPOINT ["java", "-javaagent:/java-agent/applicationinsights-agent.jar", "-jar", "/opt/app/app.jar"]

При создании образа контейнера с помощью этого файла Dockerfile необходимо добавить аргументы сборки с помощью --build-arg, как показано в следующем примере:

docker build -t <image-name>:<image-tag> \
    -f JAR.dockerfile \
    --build-arg APP_INSIGHTS_VERSION=3.5.2 \
    --build-arg APP_INSIGHTS_CONNECTION_STRING="<connection-string>" \
    --build-arg JAR_FILENAME=<path-to-jar> \
    .

Создание WAR-файла

В следующем примере Dockerfile создается WAR-файл с предыдущими изменениями:

FROM mcr.microsoft.com/openjdk/jdk:17-mariner

ARG TOMCAT_VERSION
ARG TOMCAT_MAJOR_VERSION
ARG APP_INSIGHTS_VERSION
ARG APP_INSIGHTS_CONNECTION_STRING
ARG WAR_FILENAME
ARG TOMCAT_HOME=/opt/tomcat

# Set up Application Insights agent
ADD https://github.com/microsoft/ApplicationInsights-Java/releases/download/${APP_INSIGHTS_VERSION}/applicationinsights-agent-${APP_INSIGHTS_VERSION}.jar \
  /java-agent/applicationinsights-agent.jar
RUN echo "{\"connectionString\": \"${APP_INSIGHTS_CONNECTION_STRING}\"}" > applicationinsights.json \
    && mv applicationinsights.json /java-agent/applicationinsights.json

# Set up Tomcat
ADD https://archive.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR_VERSION/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz \
    $TOMCAT_HOME/apache-tomcat-$TOMCAT_VERSION.tar.gz
RUN tdnf update -y \
    && tdnf install -y tar \
    && tar -zxf $TOMCAT_HOME/apache-tomcat-$TOMCAT_VERSION.tar.gz -C $TOMCAT_HOME --strip-components 1 \
    && rm $TOMCAT_HOME/apache-tomcat-$TOMCAT_VERSION.tar.gz \
    && rm -r $TOMCAT_HOME/webapps/*

COPY $WAR_FILENAME $TOMCAT_HOME/webapps/app.war

# Add the -javaagent option
ENTRYPOINT ["/bin/sh", "-c" , "export CATALINA_OPTS=-javaagent:/java-agent/applicationinsights-agent.jar && /opt/tomcat/bin/catalina.sh run"]

При создании образа контейнера с помощью этого файла Dockerfile необходимо добавить аргументы сборки с помощью --build-arg, как показано в следующем примере:

docker build -t <image-name>:<image-tag> \
    -f WAR.dockerfile \
    --build-arg APP_INSIGHTS_VERSION=3.5.2 \
    --build-arg APP_INSIGHTS_CONNECTION_STRING="<connection-string>" \
    --build-arg WAR_FILENAME=<path-to-war> \
    --build-arg TOMCAT_VERSION=<version> \
    --build-arg TOMCAT_MAJOR_VERSION=<major-version> \
    .

Интеграция других агентов мониторинга производительности приложений с помощью Dockerfile

Вы можете интегрировать другие агенты мониторинга производительности приложений (APM) аналогичным образом. В следующем списке показаны несколько других агентов APM, а также краткое описание их интеграции. Инструкции по скачиванию см. в официальной документации по APM.

  • Dynatrace
    • Скачайте агент Dynatrace в Dockerfile.
    • Задайте следующие переменные среды во время выполнения:
  • AppDynamics
    • Скачайте агент AppDynamics в Dockerfile.
    • Добавьте -javaagent:<path-to-agent> в параметры JVM.
    • Задайте необходимые переменные среды, включая APPDYNAMICS_AGENT_ACCOUNT_NAMEAPPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEYи т. д., во время выполнения. Полный список свойств конфигурации см. в разделе "Свойства конфигурации агента Java AppDynamics".
  • New Relic
    • Скачайте агент New Relic в Dockerfile. Если у вас есть файл конфигурации агента Java New Relic, скопируйте его с локального компьютера в контейнер. Дополнительные сведения о файлах конфигурации см. в разделе "Конфигурация агента Java: файл конфигурации".
    • Добавьте -javaagent:<path-to-agent> в параметры JVM.
    • Задайте переменные NEW_RELIC_LICENSE_KEY=<license-key> среды и NEW_RELIC_APP_NAME=<app-name> во время выполнения, если вы не установили их в файле конфигурации или хотите переопределить значения в файле конфигурации.

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

Использование пакетов сборки Paketo

Чтобы интегрировать агент Application Insights в образ контейнера, вам потребуется привязка. Дополнительные сведения о привязках см. в документации по Paketo.

Сначала используйте следующие команды, чтобы создать привязку с именем application-insights в каталоге привязок на локальном компьютере. Привязка состоит только из одного файла с именованным типом. Содержимое файла типа — это текст ApplicationInsights, указывающий привязку Application Insights.

mkdir -p bindings/application-insights
echo "ApplicationInsights" > bindings/application-insights/type

На следующей схеме показана структура каталогов:

bindings
└── application-insights
    └── type

Затем выполните следующую команду, чтобы создать образ. Укажите привязку для сборки --volume с помощью параметра. Интерфейс командной строки пакета подключает каталог привязки к контейнеру сборки. Затем пакет сборки Application Insights обнаруживает его и участвует в процессе сборки.

pack build <image-name>:<image-tag> \
    --volume $(pwd)/bindings/application-insights:/platform/bindings/application-insights" \
    --path <path-to-source-root> \
    --builder <builder-name>

Чтобы развернуть образ контейнера в среде приложений контейнеров Azure, можно использовать Azure CLI. Дополнительные сведения см. в разделе "Развертывание приложений контейнеров Azure" с помощью команды az containerapp up. Существует два подхода для передачи строка подключения Application Insights агенту Application Insights во время выполнения. Одним из способов является передача строка подключения в качестве переменной среды. Дополнительные сведения см. в разделе "Настройка с переменными среды". Другой подход заключается в передаче строка подключения через привязки. Дополнительные сведения см. в разделе "Настройка с привязками ".

Настройка с переменными среды

Чтобы передать строка подключения в Application Insights, укажите APPLICATIONINSIGHTS_CONNECTION_STRING в параметре--env-vars, как показано в следующем примере. Можно указать другие переменные среды, если вы хотите передать дополнительные параметры конфигурации агенту.

az containerapp up \
    --name <container-app-name> \
    --image <image-name>:<image-tag> \
    --resource-group <resource-group> \
    --environment <environment-name> \
    --location <location> \
    --env-vars "APPLICATIONINSIGHTS_CONNECTION_STRING=<connection-string>"

Настройка с привязками

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

С помощью следующей команды вы объявляете два секрета на уровне приложения: type и connection-string. Они подключены к /bindings/application-insights в контейнере. Пакет сборки ищет привязки в каталоге /bindings , так как SERVICE_BINDING_ROOT задана переменная среды.

az containerapp create \
    --name <container-app-name> \
    --image <image-name>:<image-tag> \
    --resource-group <resource-group> \
    --environment <environment-name> \
    --secrets "type=ApplicationInsights" "connection-string=<connection-string>" \
    --secret-volume-mount "/bindings/application-insights" \
    --env-vars "SERVICE_BINDING_ROOT=/bindings"

Кроме того, вы можете хранить строка подключения в Azure Key Vault и ссылаться на него в секретах. Дополнительные сведения см. в статье "Управление секретами в приложениях контейнеров Azure".

Сведения о развертывании образа контейнера в Служба Azure Kubernetes см. в статье "Использование пакетов сборки в Kubernetes для Java".

Интеграция других агентов мониторинга производительности приложений с помощью Paketo Buildpacks

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