Интеграция мониторинга производительности приложения в образы контейнеров
Примечание.
Планы "Базовый", "Стандартный" и "Корпоративный" будут устарели начиная с середины марта 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, выполните следующие действия.
- Скачайте агент Java Application Insights и создайте для него файл конфигурации с именем applicationinsights.json.
-
-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.
- Задайте следующие переменные среды во время выполнения:
LD_PRELOAD=<path-to-agent>
DT_TENANT=<tenant>
DT_TENANTTOKEN=<token>
DT_CONNECTION_POINT=<connection-point>
-
DT_LOGLEVELCON=info
Дополнительные сведения см. в статье Настройка OneAgent на контейнерах для мониторинга только для приложений.
- AppDynamics
- Скачайте агент AppDynamics в Dockerfile.
- Добавьте
-javaagent:<path-to-agent>
в параметры JVM. - Задайте необходимые переменные среды, включая
APPDYNAMICS_AGENT_ACCOUNT_NAME
APPDYNAMICS_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, включая следующие агенты. Дополнительные сведения о настройке привязки и конфигурации см. в документации для каждого агента.