다음을 통해 공유


자습서: Azure Container Apps에서 Spring용 관리형 관리자에 연결

Admin for Spring 관리 구성 요소는 Actuator 엔드포인트를 노출하는 Spring Boot 웹 애플리케이션에 대한 관리 인터페이스를 제공합니다. Azure Container Apps의 관리자 구성 요소로서 원활한 통합 및 관리를 위해 컨테이너 앱을 Spring용 관리자에 쉽게 바인딩할 수 있습니다.

이 자습서에서는 Spring Java 구성 요소에 대한 관리자를 만들고 컨테이너 앱에 바인딩하여 Spring 애플리케이션을 쉽게 모니터링하고 관리할 수 있는 방법을 보여 줍니다.

Spring Insights용 관리자 대시보드의 개요를 보여 주는 스크린샷.

이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.

  • Spring Java 구성 요소에 대한 관리자를 만듭니다.
  • 컨테이너 앱을 Spring Java용 관리자 구성 요소에 바인딩합니다.

Spring용 Admin을 Eureka Server for Spring과 통합하려면 대신 Container Apps에서 Spring용 Eureka Server와 Spring용 관리자 통합을 참조 하세요 .

Important

이 자습서에서는 Azure 청구서에 영향을 줄 수 있는 서비스를 사용합니다. 따라가기로 결정한 경우 예기치 않은 청구를 방지하려면 이 문서에 포함된 리소스를 삭제해야 합니다.

필수 조건

고려 사항

Container Apps에서 Spring용 Admin 구성 요소를 실행하는 경우 다음 세부 정보를 알고 있어야 합니다.

Item 설명
범위 구성 요소는 연결된 컨테이너 앱과 동일한 환경에서 실행됩니다.
크기 조정 구성 요소의 크기를 조정할 수 없습니다. 크기 조정 속성 minReplicasmaxReplicas은(는) 모두 1(으)로 설정됩니다.
리소스 구성 요소에 대한 컨테이너 리소스 할당은 고정되어 있습니다. CPU 코어 수는 0.5이고 메모리 크기는 1Gi입니다.
가격 책정 구성 요소 청구는 사용량 기반 가격 책정에 속합니다. 관리 구성 요소에서 소비한 리소스는 활성/유휴 요금으로 청구됩니다. 더 이상 사용하지 않는 구성 요소를 삭제하여 청구를 중지할 수 있습니다.
바인딩 컨테이너 앱은 바인딩을 통해 구성 요소에 연결됩니다. 바인딩은 컨테이너 앱 환경 변수에 구성을 삽입합니다. 바인딩이 설정되면 컨테이너 앱은 환경 변수에서 구성 값을 읽고 구성 요소에 연결할 수 있습니다.

설정

Spring 구성 요소에 대한 관리자 작업을 시작하기 전에 먼저 필요한 리소스를 만들어야 합니다.

다음 명령은 리소스 그룹 및 컨테이너 앱 환경을 만드는 데 도움이 됩니다.

  1. 애플리케이션 구성을 지원하는 변수를 만듭니다. 이러한 값은 이 단원의 목적을 위해 제공됩니다.

    export LOCATION=eastus
    export RESOURCE_GROUP=my-resource-group
    export ENVIRONMENT=my-environment
    export JAVA_COMPONENT_NAME=admin
    export APP_NAME=sample-admin-client
    export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-admin-for-spring-client:latest"
    
    변수 설명
    LOCATION 컨테이너 앱 및 Java 구성 요소를 만드는 Azure 지역 위치입니다.
    ENVIRONMENT 데모 애플리케이션의 컨테이너 앱 환경 이름입니다.
    RESOURCE_GROUP 데모 애플리케이션에 대한 Azure 리소스 그룹 이름입니다.
    JAVA_COMPONENT_NAME 컨테이너 앱용으로 만들어진 Java 구성 요소의 이름입니다. 이 경우 Spring용 관리자 Java 구성 요소를 만듭니다.
    IMAGE 컨테이너 앱에 사용되는 컨테이너 이미지입니다.
  2. Azure CLI를 사용하여 Azure에 로그인합니다.

    az login
    
  3. 리소스 그룹을 만듭니다.

    az group create \
        --name $RESOURCE_GROUP \
        --location $LOCATION \
        --query "properties.provisioningState"
    

    매개 변수를 --query 사용하면 응답이 간단한 성공 또는 실패 메시지로 필터링됩니다.

  4. 컨테이너 앱 환경을 만듭니다.

    az containerapp env create \
        --name $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --location $LOCATION
    

구성 요소 사용

이제 기존 환경이 있으므로 컨테이너 앱을 만들고 Spring 구성 요소 관리자의 Java 구성 요소 인스턴스에 바인딩할 수 있습니다.

  1. Spring Java 구성 요소용 관리를 만듭니다.

    az containerapp env java-component admin-for-spring create \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $JAVA_COMPONENT_NAME \
        --min-replicas 1 \
        --max-replicas 1
    
  2. Spring용 관리자 Java 구성 요소를 업데이트합니다.

    az containerapp env java-component admin-for-spring update \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $JAVA_COMPONENT_NAME \
        --min-replicas 2 \
        --max-replicas 2
    

Spring용 관리자 Java 구성 요소에 컨테이너 앱 바인딩

  1. 컨테이너 앱을 만들고 Spring용 관리자 구성 요소에 바인딩합니다.

    az containerapp create \
        --name $APP_NAME \
        --resource-group $RESOURCE_GROUP \
        --environment $ENVIRONMENT \
        --image $IMAGE \
        --min-replicas 1 \
        --max-replicas 1 \
        --ingress external \
        --target-port 8080 \
        --bind $JAVA_COMPONENT_NAME
    

bind 작업은 컨테이너 앱을 Spring용 관리자 Java 구성 요소에 바인딩합니다. 이제 컨테이너 앱은 주로 SPRING_BOOT_ADMIN_CLIENT_URL 속성인 환경 변수에서 구성 값을 읽고 Spring 구성 요소에 대한 Admin에 연결할 수 있습니다.

바인딩은 다음 속성도 삽입합니다.

"SPRING_BOOT_ADMIN_CLIENT_INSTANCE_PREFER-IP": "true",

이 속성은 Spring용 Admin 서버에 연결할 때 Spring 구성 요소 클라이언트가 컨테이너 앱 인스턴스의 IP 주소를 선호해야 임을 나타냅니다.

선택 사항: Spring Java 구성 요소용 관리자에서 컨테이너 앱 바인딩 해제

컨테이너 앱에서 바인딩을 제거하려면 --unbind 옵션을 사용합니다.

az containerapp update \
    --name $APP_NAME \
    --unbind $JAVA_COMPONENT_NAME \
    --resource-group $RESOURCE_GROUP

대시보드 보기

Important

대시보드를 보려면 관리 환경 리소스에서 계정에 최소한 Microsoft.App/managedEnvironments/write 역할이 할당되어 있어야 합니다. 리소스에 Owner 대해 명시적으로 또는 Contributor 역할을 할당할 수 있습니다. 단계에 따라 사용자 지정 역할 정의를 만들고 계정에 할당할 수도 있습니다.

  1. 사용자 지정 역할 정의를 만듭니다.

    az role definition create --role-definition '{
        "Name": "<ROLE_NAME>",
        "IsCustom": true,
        "Description": "Can access managed Java Component dashboards in managed environments",
        "Actions": [
            "Microsoft.App/managedEnvironments/write"
        ],
        "AssignableScopes": ["/subscriptions/<SUBSCRIPTION_ID>"]
    }'
    

    <> 대괄호 사이의 자리 표시자를 해당 값으로 바꿉니다.

  2. 관리되는 환경 리소스의 계정에 사용자 지정 역할을 할당합니다.

    다음과 같이 관리 환경의 리소스 ID를 가져옵니다.

    export ENVIRONMENT_ID=$(az containerapp env show \
        --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \ 
        --query id \
        --output tsv)
    
  3. 사용자의 계정에 역할을 할당합니다.

    이 명령을 실행하기 전에 대괄호로 표시된 <> 자리 표시자를 사용자 또는 서비스 주체 ID 또는 역할 이름으로 바꿉니다.

    az role assignment create \
        --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \
        --role "<ROLE_NAME>" \
        --scope $ENVIRONMENT_ID
    

    참고 항목

    값은 <USER_OR_SERVICE_PRINCIPAL_ID> Azure Portal에 액세스하는 데 사용하는 ID여야 합니다. 값은 <ROLE_NAME> 1단계에서 할당한 이름입니다.

  4. Spring용 관리자 대시보드의 URL을 가져옵니다.

    az containerapp env java-component admin-for-spring show \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $JAVA_COMPONENT_NAME \
        --query properties.ingress.fqdn \
        --output tsv
    

    이 명령은 Spring용 관리자 대시보드에 액세스하는 데 사용할 수 있는 URL을 반환합니다. 대시보드를 사용하면 다음 스크린샷과 같이 컨테이너 앱을 볼 수도 있습니다.

    Spring용 관리자 대시보드의 개요를 보여 주는 스크린샷

리소스 정리

이 자습서에서 만든 리소스는 Azure 청구서에 영향을 줍니다. 이러한 서비스를 장기적으로 사용하지 않을 경우 다음 명령을 실행하여 이 자습서에서 만든 모든 항목을 제거합니다.

az group delete --resource-group $RESOURCE_GROUP

Dependency

사용자 고유의 컨테이너 앱에서 관리 구성 요소를 사용하는 경우 pom.xml 파일에 다음 종속성을 추가해야 합니다. 버전 번호를 Maven 리포지토리에서 사용 가능한 최신 버전으로 바꿉니다.

<dependency>
    <groupId>de.codecentric</groupId>
    <version>3.3.2</version>
    <artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>

구성 가능한 속성

Spring Boot 2부터는 기본적으로 노출되지 않고 노출 health info 되지 않는 엔드포인트가 있습니다. application.properties 파일에 다음 구성을 추가하여 노출할 수 있습니다.

management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

Spring용 관리자에게 허용되는 구성 목록

다음 목록에는 앱에 대해 구성할 수 있는 관리 구성 요소 속성이 자세히 설명되어 있습니다. 자세한 내용은 Spring Boot 관리자를 참조 하세요.

Property name 설명 기본값
spring.boot.admin.server.enabled Spring Boot 관리 서버를 사용하도록 설정합니다. true
spring.boot.admin.context-path 관리 서버의 정적 자산 및 API가 제공되는 경로 접두사입니다. Dispatcher-Servlet과 관련됩니다.
spring.boot.admin.monitor.status-interval 인스턴스 상태를 확인하는 시간 간격(밀리초)입니다. 10,000ms
spring.boot.admin.monitor.status-lifetime 상태의 수명(밀리초)입니다. 마지막 상태가 만료되지 않는 한 상태가 업데이트되지 않습니다. 10,000ms
spring.boot.admin.monitor.info-interval 인스턴스 정보를 확인하는 시간 간격(밀리초)입니다. 1m
spring.boot.admin.monitor.info-lifetime 정보의 수명(분)입니다. 마지막 정보가 만료되지 않는 한 정보가 업데이트되지 않습니다. 1m
spring.boot.admin.monitor.default-timeout 요청 시 기본 시간 제한. 특정 엔드포인트의 개별 값은 spring.boot.admin.monitor.timeout.*을 사용하여 재정의될 수 있습니다. 10,000
spring.boot.admin.monitor.timeout.* endpointId당 시간 제한이 있는 키-값 쌍입니다. default-timeout 값을 기본값으로 설정
spring.boot.admin.monitor.default-retries 실패한 요청에 대한 기본 다시 시도 횟수입니다. 데이터(PUT, POST, PATCH, DELETE)를 수정하는 요청은 다시 시도되지 않습니다. 특정 엔드포인트의 개별 값은 spring.boot.admin.monitor.retries.*을 사용하여 재정의될 수 있습니다. 0
spring.boot.admin.monitor.retries.* endpointId당 다시 시도 횟수가 포함된 키-값 쌍입니다. 데이터(PUT, POST, PATCH, DELETE)를 수정하는 요청은 다시 시도되지 않습니다. default-retries 값을 기본값으로 설정
spring.boot.admin.metadata-keys-to-sanitize 모든 JSON 출력을 삭제하는 데 사용되는 정규식 패턴과 일치하는 키의 메타데이터 값입니다. Spring Boot 3부터 모든 액추에이터 값은 기본적으로 마스킹됩니다. 비관리 프로세스를 구성하는 방법에 대한 자세한 내용은 중요한 값 삭제를 참조 하세요. ".*password$", ".*secret$", ".*key$", ".*token$", ".*credentials.*", ".*vcap_services$"
spring.boot.admin.probed-endpoints Spring Boot 1.x 클라이언트 애플리케이션의 경우 Spring Boot Admin은 요청을 사용하여 OPTIONS 지정된 엔드포인트를 검색합니다. 경로가 ID와 다른 경우 이 값을 다음과 같이 id:path health:ping지정할 수 있습니다. "health", "env", "metrics", "httptrace:trace", "threaddump:dump", "jolokia", "info", "logfile", "refresh", "flyway", "liquibase", "heapdump", "loggers", "auditevents"
spring.boot.admin.instance-proxy.ignored-headers 클라이언트에 요청할 때 전달되지 않는 헤더입니다. "Cookie", "Set-Cookie", "Authorization"
spring.boot.admin.ui.title 표시된 페이지 제목입니다. "Spring Boot Admin"
spring.boot.admin.ui.poll-timer.cache 새 캐시 데이터를 페치하기 위한 폴링 기간(밀리초)입니다. 2500
spring.boot.admin.ui.poll-timer.datasource 새 데이터 원본 데이터를 페치하기 위한 폴링 기간(밀리초)입니다. 2500
spring.boot.admin.ui.poll-timer.gc 새 gc 데이터를 페치하기 위한 폴링 기간(밀리초)입니다. 2500
spring.boot.admin.ui.poll-timer.process 새 프로세스 데이터를 페치하기 위한 폴링 기간(밀리초)입니다. 2500
spring.boot.admin.ui.poll-timer.memory 새 메모리 데이터를 페치하기 위한 폴링 기간(밀리초)입니다. 2500
spring.boot.admin.ui.poll-timer.threads 새 스레드 데이터를 페치하기 위한 폴링 기간(밀리초)입니다. 2500
spring.boot.admin.ui.poll-timer.logfile 새 로그 파일 데이터를 페치하기 위한 폴링 기간(밀리초)입니다. 1000
spring.boot.admin.ui.enable-toasts 알림 메시지를 사용하거나 사용하지 않도록 설정합니다. false
spring.boot.admin.ui.title 브라우저의 창 제목 값입니다. ""
spring.boot.admin.ui.brand 탐색 헤더에 렌더링된 HTML 코드이며 기본값은 Spring Boot 관리 레이블입니다. 기본적으로 Spring Boot Admin 로고 뒤에는 이름이 잇습니다. ""
management.scheme Actuator 엔드포인트에 액세스하는 데 사용되는 서비스 URL에서 대체되는 값입니다.
management.address Actuator 엔드포인트에 액세스하는 데 사용되는 서비스 URL에서 대체되는 값입니다.
management.port Actuator 엔드포인트에 액세스하는 데 사용되는 서비스 URL에서 대체되는 값입니다.
management.context-path 액추에이터 엔드포인트에 액세스하는 데 사용되는 서비스 URL에 추가되는 값입니다. ${spring.boot.admin.discovery.converter.management-context-path}
health.path 상태 검사에 사용되는 서비스 URL에 추가되는 값입니다. EurekaServiceInstanceConverter에 의해 무시됩니다. ${spring.boot.admin.discovery.converter.health-endpoint}
spring.boot.admin.discovery.enabled 관리 서버에 대한 DiscoveryClient 지원을 사용하도록 설정합니다. true
spring.boot.admin.discovery.converter.management-context-path management-url 값이 DefaultServiceInstanceConverter에 의해 변환될 때 발견된 서비스의 service-url에 추가되는 값입니다. /actuator
spring.boot.admin.discovery.converter.health-endpoint-path health-url 값이 DefaultServiceInstanceConverter에 의해 변환될 때 발견된 서비스의 management-url에 추가되는 값입니다. "health"
spring.boot.admin.discovery.ignored-services 검색 사용 시 무시되고 애플리케이션으로 등록되지 않은 서비스입니다. , 및 "foo*bar*".와 같은 "foo*""*bar"간단한 패턴을 지원합니다.
spring.boot.admin.discovery.services 검색 사용 시 포함되고 애플리케이션으로 등록되는 서비스입니다. , 및 "foo*bar*".와 같은 "foo*""*bar"간단한 패턴을 지원합니다. "*"
spring.boot.admin.discovery.ignored-instances-metadata 이 목록의 패턴과 일치하는 메타데이터 항목이 하나 이상 포함된 경우 서비스가 무시됩니다. "discoverable=false"와 같은 패턴을 지원합니다.
spring.boot.admin.discovery.instances-metadata 목록의 패턴과 일치하는 메타데이터 항목이 하나 이상 포함된 경우 서비스가 포함됩니다. "discoverable=true"와 같은 패턴을 지원합니다.

일반 구성

  • 관련 구성 로깅
    • logging.level.*
    • logging.group.*
    • logging.* 네임스페이스의 다른 모든 구성은 금지되어야 합니다. 예를 들어, logging.file을 사용하여 로그 파일을 작성하는 것은 금지되어야 합니다.

Spring용 관리형 관리자와 Spring용 유레카 서버 통합