참고
기본, 표준 및 엔터프라이즈 계획은 2025년 3월 17일에 사용 중지 기간에 들어갔습니다. 자세한 내용은 Azure Spring 앱 사용 중지 공지 사항을 참조하세요.
이 문서의 적용 대상:✅ 기본/표준 ✅ 엔터프라이즈
이 문서에서는 Application Insights Java 에이전트를 컨테이너 이미지에 통합하는 방법을 설명합니다. 비슷한 방식으로 AppDynamics, New Relic, Dynatrace를 포함한 다른 애플리케이션 성능 모니터링(APM) 에이전트를 컨테이너 이미지에 통합할 수도 있습니다.
Azure Spring 앱은 APM 에이전트와 원활하게 통합됩니다. 애플리케이션을 Azure Container Apps 또는 AKS(Azure Kubernetes Service)로 마이그레이션하는 경우 이미지를 빌드하는 동안 APM과 통합해야 합니다. 이 프로세스는 Azure Spring 앱에서 사용하는 방식과 비슷합니다. 별도의 init-container에 APM 에이전트를 추가하고 초기화 중에 컨테이너 앱에 삽입할 수도 있습니다.
필수 구성 요소
Application Insights Java 에이전트 선택
Azure Spring 앱은 현재 Application Insights Java 에이전트 3.5.2를 사용합니다. 사용자의 요구 사항에 따라 다른 버전을 선택할 수 있습니다. 모든 버전은 Application Insights Java 릴리스 페이지에서 확인할 수 있습니다.
Application Insights 연결 문자열은 Application Insights 인스턴스의 개요 창에 있는 Azure Portal에서 찾을 수 있습니다. 이 문자열은 이 문서의 지침에 필요합니다.
Application Insights Java 에이전트에는 샘플링 비율 및 클라우드 역할 이름과 같은 몇 가지 구성 옵션이 있습니다. 자세한 내용은 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 에이전트를 통합하는 또 다른 방법은 APM 에이전트에 대한 컨테이너 이미지를 미리 빌드하고 init 컨테이너로 실행하는 것입니다. 이 방식에 대한 자세한 내용은 자습서: Azure Container Apps에서 init 컨테이너로 APM(애플리케이션 성능 관리) Java 에이전트 구성을 참조하세요.
Paketo 빌드팩 사용
컨테이너 이미지에 Application Insights 에이전트를 통합하려면 바인딩이 필요합니다. 바인딩에 대한 자세한 내용은 Paketo 설명서의 바인딩을 참조하세요.
먼저, 다음 명령을 사용하여 로컬 컴퓨터의 bindings 디렉터리에 application-insights라는 바인딩을 만듭니다. 바인딩은 type라는 이름의 파일 하나로만 구성됩니다.
type 파일의 콘텐츠는 Application Insights 바인딩을 나타내는 텍스트 ApplicationInsights입니다.
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 빌드팩이 런타임에 읽을 수 있도록 비밀을 볼륨에 탑재합니다.
다음 명령을 사용하면 애플리케이션 수준에서 type 및 connection-string이라는 두 개의 비밀을 선언할 수 있습니다. 컨테이너의 /bindings/application-insights에 탑재됩니다.
SERVICE_BINDING_ROOT 환경 변수가 설정되어 있으므로 빌드팩은 /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에서 빌드팩을 사용하는 방법을 참조하세요.
Paketo Buildpacks를 사용하여 다른 애플리케이션 성능 모니터링 에이전트 통합
다음 에이전트를 포함하여 다양한 APM 에이전트에 대한 빌드팩이 있습니다. 바인딩 설정 및 구성에 대한 자세한 내용은 각 에이전트의 설명서를 참조하세요.