자습서: Azure Container Apps에서 init 컨테이너를 사용하여 APM(애플리케이션 성능 관리) Java 에이전트 구성
이 자습서에서는 Azure Container Apps에서 init 컨테이너를 사용하여 APM(애플리케이션 성능 관리) Java 에이전트를 구성합니다. APM은 컨테이너 앱에 대한 성능 가시성을 향상하는 데 도움이 됩니다. APM 플러그 인을 앱과 동일한 이미지 또는 Dockerfile에 패키저닝할 수 있지만 릴리스 및 CVE(Common Vulnerabilities and Exposures) 완화와 같은 관리 문제를 함께 바인딩합니다. 문제를 함께 바인딩하는 대신 Azure Container Apps에서 Java 에이전트 및 init 컨테이너를 사용하여 앱 이미지를 수정하지 않고 APM 솔루션을 삽입할 수 있습니다.
이 자습서에서는 다음을 수행합니다.
- Java 에이전트를 설정하고 Azure Container Registry에 푸시하는 이미지를 준비합니다.
- 컨테이너 앱 환경 및 컨테이너 앱을 대상 Java 앱으로 만듭니다.
- Application Insights 통합을 설정하도록 init 컨테이너 및 볼륨 탑재를 구성합니다.
필수 구성 요소
- Azure 구독 무료로 만듭니다.
- Application Insights의 인스턴스입니다.
- Azure Container Registry 또는 다른 컨테이너 이미지 레지스트리의 인스턴스입니다.
- 이미지를 빌드하기 위한 Docker입니다.
- 최신 버전의 Azure CLI
환경 설정
다음 단계를 사용하여 환경 변수를 정의하고 Container Apps 확장이 최신 상태인지 확인합니다.
다음 명령을 사용하여 환경 변수를 정의합니다.
export SUBSCRIPTION_ID="<SUBSCRIPTION_ID>" # Replace with your own Azure subscription ID export APP_INSIGHTS_RESOURCE_ID="/subscriptions/$SUBSCRIPTION_ID/resourceGroups/my-resource-group/providers/microsoft.insights/components/my-app-insights" export CONTAINER_REGISTRY_NAME="myacr" export RESOURCE_GROUP="my-resource-group" export ENVIRONMENT_NAME="my-environment" export CONTAINER_APP_NAME="my-container-app" export LOCATION="eastus"
다음 명령을 사용하여 Azure CLI에 로그인합니다.
az login az account set --subscription $SUBSCRIPTION_ID
다음 명령을 사용하여 최신 버전의 Container Apps 및 Application Insights용 Azure CLI 확장이 있는지 확인합니다.
az extension add --name containerapp --upgrade az extension add --name application-insights --upgrade
다음 명령을 사용하여 Application Insights 인스턴스에 대한 연결 문자열 검색합니다.
CONNECTION_STRING=$(az monitor app-insights component show \ --ids $APP_INSIGHTS_RESOURCE_ID \ --query connectionString)
컨테이너 이미지 준비
Application Insights Java 에이전트에 대한 설치 이미지를 빌드하려면 동일한 디렉터리에서 다음 단계를 사용합니다.
다음 내용으로 Dockerfile을 만듭니다.
FROM mcr.microsoft.com/cbl-mariner/base/core:2.0 ARG version="3.5.4" RUN tdnf update -y && tdnf install -y curl ca-certificates RUN curl -L "https://github.com/microsoft/ApplicationInsights-Java/releases/download/${version}/applicationinsights-agent-${version}.jar" > agent.jar ADD setup.sh /setup.sh ENTRYPOINT ["/bin/sh", "setup.sh"]
다음 내용을 사용하여 setup.sh 파일을 만듭니다.
#!/bin/sh if [[ -z "$CONNECTION_STRING" ]]; then echo "Environment variable CONNECTION_STRING is not found. Exiting..." exit 1 else echo "{\"connectionString\": \"$CONNECTION_STRING\"}" > /java-agent/applicationinsights.json cp agent.jar /java-agent/agent.jar fi
다음 명령을 사용하여 이미지를 만듭니다.
docker build . --tag "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
다음 명령을 사용하여 이미지를 Azure Container Registry 또는 다른 컨테이너 이미지 레지스트리에 푸시합니다.
az acr login --name $CONTAINER_REGISTRY_NAME docker push "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
팁
azure-container-apps-java-samples GitHub 리포지토리에서 이 단계와 관련된 코드를 찾을 수 있습니다.
대상 Java 앱으로 Container Apps 환경 및 컨테이너 앱 만들기
Container Apps 환경 및 컨테이너 앱을 대상 Java 앱으로 만들려면 다음 단계를 사용합니다.
다음 명령을 사용하여 Container Apps 환경을 만듭니다.
az containerapp env create \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --location "$LOCATION" \ --query "properties.provisioningState"
Container Apps 환경을 성공적으로 만든 후 명령줄은 메시지를 반환합니다
Succeeded
.다음 명령을 사용하여 추가 구성을 위한 컨테이너 앱을 만듭니다.
az containerapp create \ --name $CONTAINER_APP_NAME \ --environment $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --query "properties.provisioningState"
컨테이너 앱을 만든 후 명령줄은 메시지를 반환합니다
Succeeded
.
Init 컨테이너, 비밀, 환경 변수 및 볼륨을 구성하여 Application Insights 통합 설정
다음 단계를 사용하여 비밀, 환경 변수 및 볼륨을 사용하여 init 컨테이너를 구성합니다. 이 구성을 사용하면 Application Insights 인스턴스와 함께 저장된 정보를 사용할 수 있습니다.
다음 명령을 사용하여 실행 중인 컨테이너 앱의 현재 구성을 현재 디렉터리의 app.yaml 파일에 씁니다.
az containerapp show \ --resource-group $RESOURCE_GROUP \ --name $CONTAINER_APP_NAME \ --output yaml \ > app.yaml
다음 단계를 사용하여 app.yaml 파일을 편집합니다. 편집은 비밀, 임시 스토리지 및 init 컨테이너를 파일에 추가하고 앱 컨테이너를 업데이트합니다.
다음 예제를 사용하여 Application Insights 연결 문자열 대한 비밀을 추가합니다. Application Insights 연결 문자열 대체
$CONNECTION_STRING
합니다.properties: configuration: secrets: - name: app-insights-connection-string value: $CONNECTION_STRING
다음 예제를 사용하여 Java 에이전트 파일에 대한 임시 스토리지 볼륨을 추가합니다.
properties: template: volumes: - name: java-agent-volume storageType: EmptyDir
다음 예제를 사용하여 볼륨 탑재 및 환경 변수가 있는 init 컨테이너를 추가합니다.
<CONTAINER_REGISTRY_NAME>
Azure Container Registry 이름으로 대체합니다.properties: template: initContainers: - image: <CONTAINER_REGISTRY_NAME>.azurecr.io/samples/java-agent-setup:1.0.0 name: java-agent-setup resources: cpu: 0.25 memory: 0.5Gi env: - name: CONNECTION_STRING secretRef: app-insights-connection-string volumeMounts: - mountPath: /java-agent volumeName: java-agent-volume
다음 예제를 사용하여 볼륨 탑재 및 환경 변수로 앱 컨테이너를 업데이트합니다.
properties: template: containers: - name: test-java-app image: mcr.microsoft.com/azurespringapps/samples/hello-world:0.0.1 resources: cpu: 0.5 memory: 1Gi env: - name: JAVA_TOOL_OPTIONS value: -javaagent:/java-agent/agent.jar volumeMounts: - mountPath: /java-agent volumeName: java-agent-volume
다음 명령을 사용하여 수정된 app.yaml 파일로 컨테이너 앱을 업데이트합니다.
az containerapp update \ --resource-group $RESOURCE_GROUP \ --name $CONTAINER_APP_NAME \ --yaml app.yaml \ --query "properties.provisioningState"
컨테이너 앱을 업데이트한 후 명령은 메시지를 반환합니다
Succeeded
. 이제 Azure Portal에서 Application Insights 인스턴스를 확인하여 컨테이너 앱이 연결되어 있는지 확인할 수 있습니다.
리소스 정리
이 자습서에서 만든 리소스는 Azure 청구서에 기여합니다. 장기적으로 필요하지 않은 경우 다음 명령을 사용하여 리소스 그룹 및 해당 리소스를 제거합니다.
az group delete --resource-group $RESOURCE_GROUP
관련 콘텐츠
Azure 애플리케이션 Insights 외에 커뮤니티에는 다른 인기 있는 APM 솔루션이 있습니다. Azure Container App을 다른 APM 공급자와 통합하려면 Java 에이전트 JAR 및 관련 구성 파일을 바꾸기만 하면 됩니다.