アプリケーション パフォーマンス監視をコンテナー イメージに統合する
Note
Basic、Standard、Enterprise プランは、2025 年 3 月中旬以降非推奨になり、廃止期間は 3 年間です。 Azure Container Apps に移行することをお勧めします。 詳細については、「Azure Spring Apps の廃止のお知らせ」を参照してください。
Standard 従量課金と専用プランは、2024 年 9 月 30 日以降に非推奨になり、6 か月後に完全にシャットダウンされます。 Azure Container Apps に移行することをお勧めします。 詳細については、「Azure Spring Apps の Standard 従量課金および専用プランを Azure Container Apps に移行する」を参照してください。
この記事の適用対象:✅ Basic/Standard ✅ Enterprise
この記事では、Application Insights Java エージェントをコンテナー イメージに統合する方法について説明します。 同様に、AppDynamics、New Relic、Dynatrace など、他のアプリケーション パフォーマンス監視 (APM) エージェントをコンテナー イメージに統合することもできます。
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 portal にある Application Insights インスタンスの [概要] ペインにあります。 この文字列は、この記事の手順に必要です。
Application Insights Java エージェントには、サンプリング率やクラウド ロール名など、いくつかの構成オプションがあります。 詳細については、Azure Monitor Application Insights for Java の構成オプションを参照してください。
Dockerfile を使用してコンテナー イメージをビルドする場合は、「Dockerfile を使用する」セクションを参照してください。 Paketo Buildpacks を使用してコンテナー イメージをビルドする場合は、「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 エージェントをダウンロードします。
- JVM オプションに
-javaagent:<path-to-agent>
を追加します。 - 実行時に、必要な環境変数 (
APPDYNAMICS_AGENT_ACCOUNT_NAME
、APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY
など) を設定します。 構成プロパティの完全な一覧については、「AppDynamics Java エージェントの構成プロパティ」を参照してください。
- New Relic
- Dockerfile の New Relic エージェントをダウンロードします。 New Relic Java エージェント構成ファイルがある場合は、ローカル コンピューターからコンテナーにコピーします。 構成ファイルの詳細については、「Java エージェントの構成: 構成ファイル」を参照してください。
- JVM オプションに
-javaagent:<path-to-agent>
を追加します。 - 環境変数の
NEW_RELIC_LICENSE_KEY=<license-key>
とNEW_RELIC_APP_NAME=<app-name>
を構成ファイルに設定していない場合、または構成ファイルの値をオーバーライドする場合は、実行時にこれらを設定します。
APM エージェントを統合するもう 1 つの方法があります。それは、APM エージェントのコンテナー イメージを事前にビルドし、それを init コンテナーとして実行することです。 このアプローチの詳細については、「チュートリアル: Azure Container Apps で init コンテナーを使用してアプリケーション パフォーマンス管理 (APM) Java エージェントを構成する」を参照してください。
Paketo Buildpacks を使用する
Application Insights エージェントをコンテナー イメージに統合するには、バインドが必要です。 バインドの詳細については、Paketo ドキュメントにあるバインドの説明を参照してください。
まず、次のコマンドを使用して、ローカル コンピューターの bindings ディレクトリに application-insights という名前のバインドを作成します。 バインドは、type という名前の 1 つのファイルのみで構成されます。
type ファイルの内容は、Application Insights のバインドを示すテキスト ApplicationInsights
です。
mkdir -p bindings/application-insights
echo "ApplicationInsights" > bindings/application-insights/type
次の図は、ディレクトリ構造を示しています。
bindings
└── application-insights
└── type
次に、次のコマンドを実行して、イメージをビルドします。
--volume
オプションを使用して、ビルドへのバインドを指定します。 Pack CLI は、バインド ディレクトリをビルド コンテナーにマウントします。 その後、Application Insights buildpack がそれを検出し、ビルド プロセスに参加します。
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 エージェントに渡すには、2 つの方法があります。 1 つ目の方法は、接続文字列を環境変数として渡すことです。 詳細については、「環境変数を構成する」セクションを参照してください。 もう 1 つの方法は、バインドを使用して接続文字列を渡すことです。 詳細については、「バインドを使用して構成する」セクションを参照してください。
環境変数を構成する
接続文字列を 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 buildpack が実行時に読み取ることができるように、シークレットをボリュームにマウントします。
次のコマンドを使用して、アプリケーション レベルで 2 つのシークレット (type
と connection-string
) を宣言します。 これらは、コンテナー内の /bindings/application-insights にマウントされます。
SERVICE_BINDING_ROOT
環境変数が設定されているため、buildpack は /bindings ディレクトリでバインドを検索します。
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 Container Apps でシークレットを管理する」を参照してください。
コンテナー イメージを Azure Kubernetes Service にデプロイするには、「Java 用 Kubernetes で buildpacks を使用する方法」を参照してください。
Paketo Buildpacks を使用して他のアプリケーション パフォーマンス監視エージェントを統合する
buildpack は、以下のエージェントを含め、さまざまな APM エージェント向けのものがあります。 バインドの設定と構成の詳細については、各エージェントのドキュメントを参照してください。