[Spring]
Spring Boot Admin으로 관리 및 모니터링 서버 구현해보기
팡펑퐁
2023. 5. 17. 14:38
728x90
Spring Boot Admin
- Spring Boot 웹 애플리케이션을 위한 관리 및 모니터링 인터페이스를 제공한다.
- 관리 및 모니터링 대상은 서버의 상태(프로세스, 스레드, 메모리), 빈, 스케줄, 로거. JVM, 캐시 등이 있다.
- Codecentric에서 진행하고 있는 오픈소스 커뮤니티 프로젝트로 Spring에서 공식적으로 지원하는 것이 아니다.
- 간단하게 얘기해 Spring boot Admin이 서버가 되고, 관리 및 모니터링 대상 서버(우리가 개발한 Spring Boot 서버)가 클라이언트가 된다.
- 클라이언트에 admin 서버 주소를 설정하면 admin에 인스턴스가 하나 생기고 대시보드에서 모니터링을 할 수 있다.
본격적으로 Spring Boot Admin Server를 구축해 보자.
Spring Boot의 버전 | Spring Boot Admin의 버전 |
2.6 | 2.6.Y |
2.7 | 2.7.Y |
3.0 | 3.0.Y |
구축을 시작하기 전에 주의할 점은 Spring Boot Admin Server의 버전은 Admin 서버의 Spring Boot 버전과 반드시 일치해야 한다는 것이다. 그러나, Spring Boot Admin Server가 관리 및 모니터링을 하는 대상 서비스(서버)의 경우는 버전에 상관없이 관리 및 모니터링을 할 수 있다. 예를 들어 Spring Boot Admin Server의 버전이 2.7일 때 Admin 서버의 Spring Boot 버전은 2.7이어야 한다. 그러나 관리 및 모니터링 대상 서버의 Spring Boot 버전은 2.3이라도 문제없이 동작한다.
Spring Boot Admin Server
프로젝트 생성하기
- https://start.spring.io/ 에서 쉽게 만들 수 있다.
- 의존성에 codecntric's Spring Boot Admin (Server)를 추가한다.
build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.11'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}
group = 'spring.boot.admin'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
repositories {
mavenCentral()
}
ext {
set('springBootAdminVersion', "2.7.4")
}
dependencies {
implementation 'de.codecentric:spring-boot-admin-starter-server'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
dependencyManagement {
imports {
mavenBom "de.codecentric:spring-boot-admin-dependencies:${springBootAdminVersion}"
}
}
tasks.named('test') {
useJUnitPlatform()
}
- spring initializr로 spring boot admin server의 의존성을 추가하여 프로젝트를 생성하면 별도의 의존성 추가 작업을 할 필요 없다.
application.properties
server.port=8080 # 포트설정
management.endpoints.web.exposure.include=* #
management.endpoints.web.exposure.include=*
- 자바 애플리케이션의 관리 엔드포인트에 관한 설정으로 Spring Boot에는 응용프로그램을 모니터링하고 관리하기 위한 다양한 엔드포인트를 제공하는 Actuator라는 기능이 있다. 이 엔드포인트들은 애플리케이션의 상태, 구성, 로깅 등의 정보 및 기능을 보여준다.
- management.endpoints.web.exposure.include 속성은 HTTP 요청을 통해 액세스 되는 관리 엔드포인트를 지정할 수 있다. 위의 설정의 경우 *라는 모든 엔드포인트를 나타내는 와일드카드 문자를 사용했으므로 모든 관리 엔트포인트가 노출되며 액세스 가능함을 의미한다. 실제 상용 서버의 경우 모든 관리 엔드포인트를 노출시키는 것은 보안상 문제를 발생시킬 수 있으므로 권장되지 않으며 모니터링 및 관리가 필요한 엔드포인트만 적용하는 것이 좋다.
Application 엔트리 포인트 클래스
@EnableAdminServer
- Spring Boot Admin의 실행을 도와주는 애너테이션이다.
서버 실행
- 실행 로그에 Exposing 13 endpoint(s) beneath base path '/actuator'가 보인다.
- actuator를 이용해 엔드포인트를 확인한 것으로 보인다.
로컬 서버 접속해 보기
- 잘 작동되는 것을 확인했으니 이제 관리 대상 서버에 Spring Boot Admin Client를 적용해 보자.
Spring Boot Admin Client
- Client 역시 Spring initializr를 사용하면 별도의 의존성 추가 없이 프로젝트를 생성할 수 있다.
build.gradle
`plugins {
id 'java'
id 'org.springframework.boot' version '2.7.11'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}
group = 'spring.boot.client'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
ext {
set('springBootAdminVersion', "2.7.4")
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'de.codecentric:spring-boot-admin-starter-client'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
dependencyManagement {
imports {
mavenBom "de.codecentric:spring-boot-admin-dependencies:${springBootAdminVersion}"
}
}
tasks.named('test') {
useJUnitPlatform()
}
- Spring Boot Admin Server와 마찬가지로 Client가 되는 서버에도 Spring Boot Admin에 대한 의존성을 추가한다.
application.properties
server.port=20000 # 클라이언트 포트
spring.boot.admin.client.instance.service-url=http://localhost:20000 # 클라이언트 주소
spring.boot.admin.client.url=http://localhost:30000 # 클라이언트와 연결할 Spring Boot Admin 서버 주소
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
두 서버를 실행
- 사진에서 보이는 것처럼 관리 및 모니터링 대상 서버의 실시간 정보를 확인할 수 있다.
참고
https://jaehyun8719.github.io/2019/06/20/springboot/admin/
728x90