共用方式為


將應用程式效能監視整合到容器映像

注意

基本標準和企業方案將從 2025 年 3 月中旬開始淘汰,並停用 3 年。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 Azure Spring Apps 淘汰公告

標準 耗用量和專用 方案將從 2024 年 9 月 30 日起淘汰,並在六個月後完成關閉。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 將 Azure Spring Apps 標準取用和專用方案遷移至 Azure Container Apps

本文適用於:✅ 基本/標準 ✅ 企業

本文說明如何將Application Insights Java代理程式整合到容器映像中。 同樣地,您也可以將其他應用程式效能監視 (APM) 代理程式整合到容器映射中,包括 AppDynamics、New Relic 和 Dynatrace。

Azure Spring Apps 與 APM 代理程序順暢整合。 將應用程式移轉至 Azure Container Apps 或 Azure Kubernetes Service (AKS)時,您需要在建置映射時與 APM 整合。 此程序類似於 Azure Spring Apps 所使用的方法。 您也可以在個別的 init-container 中新增 APM 代理程式,並在初始化期間將其插入容器應用程式。

必要條件

選擇 Application Insights Java 代理程式

Azure Spring Apps 目前使用 Application Insights Java 代理程式 3.5.2。 您可以根據您的需求選擇另一個版本。 您可以在 Application Insights Java 版本頁面上找到所有版本

您可以在 Application Insights 實例的 [概觀] 窗格的 [Azure 入口網站] 中找到 Application Insights 連接字串。 本文中的指示需要此字串。

Application Insights Java 代理程式有一些組態選項,例如取樣百分比和雲端角色名稱。 如需詳細資訊,請參閱 Application Insights for Java 的組態選項。

如果您使用 Dockerfile 來建置容器映像,請參閱 使用 Dockerfile 一節。 如果您使用Paketo Buildpacks來建置容器映射,請參閱 使用Paketo Buildpacks 一節。

使用 Dockerfile

使用下列步驟來修改您的 Dockerfile:

  1. 下載 Application Insights Java 代理程式,併為其建立組態檔,稱為 applicationinsights.json
  2. -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_NAMEAPPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY等等。 如需組態屬性的完整清單,請參閱 AppDynamics Java Agent 組態屬性
  • 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 Container Apps 中使用 init 容器設定應用程式效能管理 (APM) Java 代理程式。

使用 Paketo Buildpacks

若要在容器映射中整合 Application Insights 代理程式,您需要系結。 如需系結的詳細資訊,請參閱 Paketo 檔中的系 結。

首先,使用下列命令,在本機計算機上的 bindings 目錄中建立名為 application-insights系結。 系結只包含一個名為 type 的檔案。 類型檔案的內容是文字 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 Container Apps 環境中部署容器映射,您可以使用 Azure CLI。 如需詳細資訊,請參閱 使用 az containerapp up 命令部署 Azure Container Apps。 有兩種方法在運行時間將 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 組建套件可以在運行時間讀取它們。

使用下列命令,您會在應用程式層級宣告兩個秘密: typeconnection-string。 它們會掛接至 容器中的 /bindings/application-insights 。 buildpack 會搜尋 /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 金鑰保存庫 中,並將它參考在秘密中。 如需詳細資訊,請參閱 管理 Azure Container Apps 中的秘密。

若要將容器映射部署至 Azure Kubernetes Service,請參閱 如何在 Kubernetes for Java 中使用 buildpack。

使用 Paketo Buildpacks 整合其他應用程式效能監視代理程式

各種 APM 代理程式的組建套件包括下列代理程式。 如需系結設定和組態的詳細資訊,請參閱每個代理程序的檔。