你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
将应用程序性能监视集成到容器映像中
注意
基本、标准和企业计划将从 2025 年 3 月中旬开始弃用,停用期为 3 年。 建议转换到 Azure 容器应用。 有关详细信息,请参阅 Azure Spring Apps 停用公告。
标准消耗和专用计划将于 2024 年 9 月 30 日开始弃用,并在六个月后完全关闭。 建议转换到 Azure 容器应用。 有关详细信息,请参阅将 Azure Spring Apps 标准消耗和专用计划迁移到 Azure 容器应用。
本文适用于:✅基本计划/标准计划 ✅ 企业计划
本文介绍如何将 Application Insights Java 代理集成到容器映像中。 同样,还可以将其他应用程序性能监视 (APM) 代理集成到容器映像中,包括 AppDynamics、New Relic 和 Dynatrace。
Azure Spring Apps 与 APM 代理顺利集成。 将应用程序迁移到 Azure 容器应用或 Azure Kubernetes 服务 (AKS) 时,需要在生成映像时与 APM 集成。 此过程类似于 Azure Spring Apps 使用的方法。 还可以在单独的 init 容器中添加 APM 代理,并在初始化期间将其注入到容器应用中。
先决条件
选择 Application Insights Java 代理
Azure Spring Apps 目前使用 Application Insights Java 代理 3.5.2。 可以根据需求选择另一个版本。 可以在 Application Insights Java 版本页面找到所有版本。
可以在 Application Insights 实例的“概述”窗格中找到 Application Insights 的连接字符串。 本文中的说明需要此字符串。
Application Insights Java 代理有一些配置选项,例如采样百分比和云角色名称。 若要详细了解,请参阅 Application Insights for Java 的配置选项。
如果使用 Dockerfile 生成容器映像,请参阅使用 Dockerfile 部分。 如果使用 Paketo Buildpack 生成容器映像,请参阅 使用 Paketo Buildpacks 部分。
使用 Dockerfile
使用以下步骤修改 Dockerfile:
- 下载 Application Insights Java 代理并为其创建配置文件,它被称为 applicationinsights.json。
- 将
-javaagent
选项添加到容器映像的入口点。
若要详细了解如何使用 Dockerfile 生成 JAR 文件或 WAR 文件,请参阅从 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
- 在 Dockerfile 中下载 Dynatrace 代理。
- 在运行时设置以下环境变量:
LD_PRELOAD=<path-to-agent>
DT_TENANT=<tenant>
DT_TENANTTOKEN=<token>
DT_CONNECTION_POINT=<connection-point>
-
DT_LOGLEVELCON=info
有关详细信息,请参阅在容器上设置 OneAgent,以便进行仅限应用程序的监视。
- AppDynamics
- 在 Dockerfile 中下载 AppDynamics 代理。
- 将
-javaagent:<path-to-agent>
添加到 JVM 选项。 - 在运行时设置所需的环境变量,包括
APPDYNAMICS_AGENT_ACCOUNT_NAME
、APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY
等。 有关配置属性的完整列表,请参阅 AppDynamics Java 代理配置属性。
- New Relic
- 在 Dockerfile 中下载 New Relic 代理。 如果有 New Relic Java 代理配置文件,请将其从本地计算机复制到容器。 有关配置文件的详细信息,请参阅 Java 代理配置:配置文件。
- 将
-javaagent:<path-to-agent>
添加到 JVM 选项。 - 如果尚未在配置文件中设置环境变量,或者想要替代配置文件中的值,请在运行时设置环境变量
NEW_RELIC_LICENSE_KEY=<license-key>
和NEW_RELIC_APP_NAME=<app-name>
。
集成 APM 代理有另一种方法,即为 APM 代理预构建容器映像,并将其作为 init 容器运行。 有关此方法的详细信息,请参阅 教程:在 Azure 容器应用中使用 init 容器配置应用程序性能管理 (APM) Java 代理。
使用 Paketo Buildpack
若要在容器映像中集成 Application Insights 代理,需要绑定。 有关绑定的详细信息,请参阅 Paketo 文档中的绑定。
首先,使用以下命令在本地计算机上的“绑定”目录中创建名为“application-insights”的绑定。 绑定仅包含一个名为“类型”的文件。
“类型”文件的内容是文本 ApplicationInsights
,指示 Application Insights 绑定。
mkdir -p bindings/application-insights
echo "ApplicationInsights" > bindings/application-insights/type
以下示意图中显示目录结构:
bindings
└── application-insights
└── type
然后运行以下命令生成映像。 使用 --volume
选项向生成提供绑定。 包 CLI 将绑定目录装载到生成容器中。 然后,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。 有关详细信息,请参阅使用 az containerapp up 命令部署 Azure 容器应用。 有两种方法在运行时将 Application Insights 连接字符串传递给 Application Insights 代理。 一种方法是将连接字符串作为环境变量传递。 有关详细信息,请参阅使用环境变量配置部分。 另一种方法是通过绑定传递连接字符串。 有关详细信息,请参阅使用绑定配置部分。
使用环境变量配置
若要将连接字符串传递给 Application Insights,请在 --env-vars
选项中指定 APPLICATIONINSIGHTS_CONNECTION_STRING
,如以下示例所示。 如果要将更多配置选项传递给代理,可以指定其他环境变量。
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 for Java 中使用生成包。
使用 Paketo Buildpack 集成其他应用程序性能监视代理
各种 APM 代理都有生成包,包括以下代理。 有关绑定设置和配置的详细信息,请参阅各个代理的文档。