다음을 통해 공유


애플리케이션 성능 모니터링을 컨테이너 이미지에 통합

참고 항목

기본, 표준엔터프라이즈 계획은 2025년 3월 중순부터 사용되지 않으며 3년의 은퇴 기간이 있습니다. Azure Container Apps로 전환하는 것이 좋습니다. 자세한 내용은 Azure Spring Apps 사용 중지 공지 사항을 참조하세요.

표준 소비 및 전용 계획은 2024년 9월 30일부터 사용되지 않으며 6개월 후에 완전히 종료됩니다. Azure Container Apps로 전환하는 것이 좋습니다. 자세한 내용은 Azure Spring Apps 표준 사용량 및 전용 계획을 Azure Container Apps로 마이그레이션을 참조 하세요.

이 문서는 기본/표준 ✅ 엔터프라이즈에✅ 적용됩니다.

이 문서에서는 Application Insights Java 에이전트를 컨테이너 이미지에 통합하는 방법을 설명합니다. 비슷한 방식으로 AppDynamics, New Relic 및 Dynatrace를 비롯한 다른 APM(애플리케이션 성능 모니터링) 에이전트를 컨테이너 이미지에 통합할 수도 있습니다.

Azure Spring Apps는 APM 에이전트와 원활하게 통합됩니다. 애플리케이션을 Azure Container Apps 또는 AKS(Azure Kubernetes Service)로 마이그레이션할 때 이미지를 빌드하는 동안 APM과 통합해야 합니다. 이 프로세스는 Azure Spring Apps에서 사용하는 방식과 유사합니다. APM 에이전트를 별도의 init-container에 추가하고 초기화하는 동안 컨테이너 앱에 삽입할 수도 있습니다.

필수 조건

Application Insights Java 에이전트 선택

Azure Spring Apps는 현재 Application Insights Java 에이전트 3.5.2를 사용합니다. 필요에 따라 다른 버전을 선택할 수 있습니다. Application Insights Java 릴리스 페이지에서 모든 버전을 찾을 수 있습니다.

Application Insights 인스턴스의 개요 창에서 Azure Portal에서 Application Insights 연결 문자열 찾을 수 있습니다. 이 문자열은 이 문서의 지침에 필요합니다.

Application Insights Java 에이전트에 대한 몇 가지 구성 옵션(예: 샘플링 비율 및 클라우드 역할 이름)이 있습니다. 자세한 내용은 Java용 Application Insights의 구성 옵션을 참조 하세요.

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
  • 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 에이전트에 대한 컨테이너 이미지를 미리 빌드하고 init 컨테이너로 실행하는 APM 에이전트를 통합하는 또 다른 방법이 있습니다. 이 방법에 대한 자세한 내용은 자습서: Azure Container Apps에서 init 컨테이너를 사용하여 APM(애플리케이션 성능 관리) Java 에이전트 구성을 참조 하세요.

Paketo Buildpack 사용

컨테이너 이미지에 Application Insights 에이전트를 통합하려면 바인딩이 필요합니다. 바인딩에 대한 자세한 내용은 Paketo 설명서의 바인딩을 참조하세요.

먼저 다음 명령을 사용하여 로컬 컴퓨터의 바인딩 디렉터리에 application-insights라는 바인딩을 만듭니다. 바인딩은 명명 된 형식인 하나의 파일로만 구성됩니다. 형식 파일의 내용은 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에 탑재 됩니다 . 환경 변수가 설정되었기 때문에 빌드팩은 /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 Container Apps의 비밀 관리를 참조 하세요.

Azure Kubernetes Service에 컨테이너 이미지를 배포하려면 Java용 Kubernetes에서 buildpack을 사용하는 방법을 참조하세요.

Paketo Buildpacks를 사용하여 다른 애플리케이션 성능 모니터링 에이전트 통합

다음 에이전트를 포함하여 다양한 APM 에이전트에 대한 빌드팩이 있습니다. 바인딩 설정 및 구성에 대한 자세한 내용은 각 에이전트에 대한 설명서를 참조하세요.