Admin for Spring 관리 구성 요소는 Actuator 엔드포인트를 노출하는 Spring Boot 웹 애플리케이션에 대한 관리 인터페이스를 제공합니다. Azure Container Apps의 관리자 구성 요소로서 원활한 통합 및 관리를 위해 컨테이너 앱을 Spring용 관리자에 쉽게 바인딩할 수 있습니다.
이 자습서에서는 Spring Java 구성 요소에 대한 관리를 만들고 컨테이너 앱에 바인딩하여 Spring 애플리케이션을 쉽게 모니터링하고 관리할 수 있는 방법을 보여줍니다.
이 자습서에서는 다음 작업 방법을 알아봅니다.
- Spring Java 구성 요소에 대한 관리자를 만듭니다.
- 컨테이너 앱을 Spring Java 구성 요소의 관리에 바인딩합니다.
Spring의 관리를 Spring용 Eureka Server와 통합하려면 대신 Container Apps에서 Spring의 관리를 Spring용 Eureka Server와 통합을 참조하세요.
중요
이 자습서에서는 Azure 청구서에 영향을 줄 수 있는 서비스를 사용합니다. 자습서를 따르기로 결정한 경우 예기치 않은 청구를 방지하기 위해 이 문서에 포함된 리소스를 삭제해야 합니다.
필수 구성 요소
- 활성 구독이 있는 Azure 계정. 아직 없는 경우 무료로 만들 수 있습니다.
- Azure CLI
고려 사항
Container Apps에서 Spring 구성 요소용 관리를 실행할 때 다음 세부 사항을 숙지합니다.
| 항목 | 설명 |
|---|---|
| 범위 | 구성 요소는 연결된 컨테이너 앱과 동일한 환경에서 실행됩니다. |
| 확장 | 구성 요소는 크기를 조정할 수 없습니다. 크기 조정 속성 minReplicas 및 maxReplicas은(는) 모두 1(으)로 설정됩니다. |
| 리소스 | 구성 요소에 대한 컨테이너 리소스 할당은 고정되어 있습니다. CPU 코어 수는 0.5이고 메모리 크기는 1GB입니다. |
| 가격 책정 | 구성 요소 청구는 사용량 기반 가격 책정에 속합니다. 관리되는 구성 요소에서 사용하는 리소스는 리소스 사용량에 따라 활성 또는 유휴 요금으로 청구됩니다. 더 이상 사용하지 않는 구성 요소를 삭제하여 청구를 중지할 수 있습니다. |
| 바인딩 | 컨테이너 앱은 바인딩을 통해 구성 요소에 연결됩니다. 바인딩은 컨테이너 앱 환경 변수에 구성을 삽입합니다. 바인딩이 설정되면 컨테이너 앱은 환경 변수에서 구성 값을 읽고 구성 요소에 연결할 수 있습니다. |
설치 프로그램
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 1Spring용 관리자 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
바인딩 작업은 컨테이너 앱을 Spring Java용 Admin 구성 요소에 연결합니다. 이제 컨테이너 앱은 주로 SPRING_BOOT_ADMIN_CLIENT_URL 속성인 환경 변수에서 구성 값을 읽고 Spring 구성 요소의 관리에 연결할 수 있습니다.
바인딩은 다음 속성도 삽입합니다.
"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
대시보드 보기
중요
대시보드를 보려면 계정에 관리되는 환경 리소스에 대한 Microsoft.App/managedEnvironments/write 역할 이상이 필요합니다. 리소스에 Owner 또는 Contributor 역할을 명시적으로 할당할 수 있습니다. 단계에 따라 사용자 지정 역할 정의를 만들고 이를 계정에 할당할 수도 있습니다.
참고
21Vianet에서 운영하는 Azure에서는 대시보드를 사용할 수 없습니다.
사용자 지정 역할 정의를 만듭니다.
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
종속성
사용자 고유의 컨테이너 앱에서 관리 구성 요소를 사용하는 경우 pom.xml 파일에 다음 종속성을 추가합니다. 버전 번호를 Maven 리포지토리에서 사용 가능한 최신 버전으로 바꿉니다.
<dependency>
<groupId>de.codecentric</groupId>
<version>3.3.2</version>
<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
참고
Azure CLI에서 다음 명령을 실행하여 컨테이너 앱에서 Java 에이전트를 사용하도록 설정하는 경우 Spring Boot Admin에 대한 관리자 시작 클라이언트 종속성을 추가할 필요가 없습니다.
az containerapp update --enable-java-agent \
--resource-group $RESOURCE_GROUP \
--name $APP_NAME
구성 가능한 속성
Spring Boot 2부터 health 및 info 이외의 엔드포인트는 기본적으로 노출되지 않습니다.
application.properties 파일에 다음 구성을 추가하여 노출할 수 있습니다.
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
Spring용 관리자에게 허용되는 구성 목록
다음 목록에는 앱에 대해 구성할 수 있는 관리 구성 요소 속성이 자세히 설명되어 있습니다. 자세한 내용은 Spring Boot 관리를 참조하세요.
| 속성 이름 | 설명 | 기본값 |
|---|---|---|
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, ,PATCHDELETE)를 수정하는 요청은 다시 시도되지 않습니다. 특정 엔드포인트의 개별 값은 spring.boot.admin.monitor.retries.*을 사용하여 재정의될 수 있습니다. |
0 |
spring.boot.admin.monitor.retries.* |
endpointId당 다시 시도 횟수가 포함된 키-값 쌍입니다. 데이터(PUT, POST, ,PATCHDELETE)를 수정하는 요청은 다시 시도되지 않습니다. |
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 관리 로고 뒤에는 이름이 표시됩니다. | "" |
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 |
service-url 값이 management-url에 의해 변환될 때 발견된 서비스의 DefaultServiceInstanceConverter에 추가되는 값입니다. |
/actuator |
spring.boot.admin.discovery.converter.health-endpoint-path |
management-url 값이 health-url에 의해 변환될 때 발견된 서비스의 DefaultServiceInstanceConverter에 추가되는 값입니다. |
"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 Boot Admin Dashboard는 21Vianet에서 운영하는 Azure에서 사용할 수 없습니다.