자습서: Azure Container Apps에서 Spring용 관리형 관리자에 연결
Admin for Spring 관리 구성 요소는 Actuator 엔드포인트를 노출하는 Spring Boot 웹 애플리케이션에 대한 관리 인터페이스를 제공합니다. Azure Container Apps의 관리자 구성 요소로서 원활한 통합 및 관리를 위해 컨테이너 앱을 Spring용 관리자에 쉽게 바인딩할 수 있습니다.
이 자습서에서는 Spring Java 구성 요소에 대한 관리자를 만들고 컨테이너 앱에 바인딩하여 Spring 애플리케이션을 쉽게 모니터링하고 관리할 수 있는 방법을 보여 줍니다.
이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.
- Spring Java 구성 요소에 대한 관리자를 만듭니다.
- 컨테이너 앱을 Spring Java용 관리자 구성 요소에 바인딩합니다.
Spring용 Admin을 Eureka Server for Spring과 통합하려면 대신 Container Apps에서 Spring용 Eureka Server와 Spring용 관리자 통합을 참조 하세요 .
Important
이 자습서에서는 Azure 청구서에 영향을 줄 수 있는 서비스를 사용합니다. 따라가기로 결정한 경우 예기치 않은 청구를 방지하려면 이 문서에 포함된 리소스를 삭제해야 합니다.
필수 조건
고려 사항
Container Apps에서 Spring용 Admin 구성 요소를 실행하는 경우 다음 세부 정보를 알고 있어야 합니다.
Item | 설명 |
---|---|
범위 | 구성 요소는 연결된 컨테이너 앱과 동일한 환경에서 실행됩니다. |
크기 조정 | 구성 요소의 크기를 조정할 수 없습니다. 크기 조정 속성 minReplicas 및 maxReplicas 은(는) 모두 1 (으)로 설정됩니다. |
리소스 | 구성 요소에 대한 컨테이너 리소스 할당은 고정되어 있습니다. CPU 코어 수는 0.5이고 메모리 크기는 1Gi입니다. |
가격 책정 | 구성 요소 청구는 사용량 기반 가격 책정에 속합니다. 관리 구성 요소에서 소비한 리소스는 활성/유휴 요금으로 청구됩니다. 더 이상 사용하지 않는 구성 요소를 삭제하여 청구를 중지할 수 있습니다. |
바인딩 | 컨테이너 앱은 바인딩을 통해 구성 요소에 연결됩니다. 바인딩은 컨테이너 앱 환경 변수에 구성을 삽입합니다. 바인딩이 설정되면 컨테이너 앱은 환경 변수에서 구성 값을 읽고 구성 요소에 연결할 수 있습니다. |
설정
Spring 구성 요소에 대한 관리자 작업을 시작하기 전에 먼저 필요한 리소스를 만들어야 합니다.
다음 명령은 리소스 그룹 및 컨테이너 앱 환경을 만드는 데 도움이 됩니다.
애플리케이션 구성을 지원하는 변수를 만듭니다. 이러한 값은 이 단원의 목적을 위해 제공됩니다.
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
컨테이너 앱에 사용되는 컨테이너 이미지입니다. Azure CLI를 사용하여 Azure에 로그인합니다.
az login
리소스 그룹을 만듭니다.
az group create \ --name $RESOURCE_GROUP \ --location $LOCATION \ --query "properties.provisioningState"
매개 변수를
--query
사용하면 응답이 간단한 성공 또는 실패 메시지로 필터링됩니다.컨테이너 앱 환경을 만듭니다.
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
구성 요소 사용
이제 기존 환경이 있으므로 컨테이너 앱을 만들고 Spring 구성 요소 관리자의 Java 구성 요소 인스턴스에 바인딩할 수 있습니다.
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
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 구성 요소에 컨테이너 앱 바인딩
컨테이너 앱을 만들고 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
역할을 할당할 수 있습니다. 단계에 따라 사용자 지정 역할 정의를 만들고 계정에 할당할 수도 있습니다.
사용자 지정 역할 정의를 만듭니다.
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>"] }'
<>
대괄호 사이의 자리 표시자를 해당 값으로 바꿉니다.관리되는 환경 리소스의 계정에 사용자 지정 역할을 할당합니다.
다음과 같이 관리 환경의 리소스 ID를 가져옵니다.
export ENVIRONMENT_ID=$(az containerapp env show \ --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)
사용자의 계정에 역할을 할당합니다.
이 명령을 실행하기 전에 대괄호로 표시된
<>
자리 표시자를 사용자 또는 서비스 주체 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단계에서 할당한 이름입니다.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을 반환합니다. 대시보드를 사용하면 다음 스크린샷과 같이 컨테이너 앱을 볼 수도 있습니다.
리소스 정리
이 자습서에서 만든 리소스는 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
을 사용하여 로그 파일을 작성하는 것은 금지되어야 합니다.