- 최근 msa 형태로 개발이 많이 진행되고, 각 서버에 들어가서 인스턴스 정보들을 확인하는 등 모니터링을 하는데, 번거로움이 크다.
- 이미
spring-boot-starter-actuator라는 좋은 모니터링 정보들을 제공해주는데, 모아 보는 툴을 고민하던 중에 - 굉장히 좋은 툴 하나를 발견했다.(사실은 예전부터 사용했으나, 블로깅을 안해놓음)
여러 Spring Boot service instance 들에 대한 monitoring 방법
- 아래 설정들로 간단하게 눈으로 확인해볼 수 있다.
spring-boot-admin-server 구축하기
pom.xml
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.1.6</version>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server-ui</artifactId>
<version>2.1.6</version>
</dependency>
application 설정(yml or properties)
- 본인이 사용할 Admin port를 설정해주세요.
server:
port: 9905
bootstrap class
Applicationclass 상단에@EnableAdminServer를 추가해 줍니다.
@EnableAdminServer
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
실행
- mvn spring-boot:run
화면
- client를 띄워놓지 않아서 아직 뭐 없어보인다.

spring-boot-admin-client 구축하기
pom.xml
<!-- spring-boot-admin을 사용하기 위한 라이브러리 -->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.1.6</version>
</dependency>
<!-- 모니터링을 위한 라이브러리 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
application 설정(yml or properties)
spring:
boot:
admin:
client:
url: http://localhost:9905
instance:
name: boot-admin-B-client
management:
endpoints:
web:
exposure:
include: '*'
실행 후 admin 화면
- 아래와 같이 instance 들이 추가 되어 있다.

- instance 를 클릭해서 들어오면 아래와 같이 여러 정보를 확인 할 수 있다.

로그파일 보기
- application.yml or properties에 아래와 같이 각 client 설정값에 log path 를 추가해주면, admin server 에서 손쉽게 볼 수 있다.
logging:
file: ./logs/data-a.log

Security 적용하기
- HeapDump 등 중요한 정보들을 볼 수 있기 때문에 보안은 필수다.
- 간단하게 admin server 에 Login 을 붙일 수 있고, api 들도 base url 을 변경, auth 를 붙일 수 있다.
Admin Server
application 설정(yml or properties)
- 아래 내용을 추가한다.
spring:
security:
user:
name: admin
password: admin
pom.xml
- spring security 추가
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server-ui-login</artifactId>
<version>1.5.7</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
security Configuration
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
SavedRequestAwareAuthenticationSuccessHandler successHandler
= new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setTargetUrlParameter("redirectTo");
successHandler.setDefaultTargetUrl("/");
http.authorizeRequests()
.antMatchers("/assets/**").permitAll()
.antMatchers("/login").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.successHandler(successHandler)
.and()
.logout().logoutUrl("/logout")
.and()
.httpBasic()
.and()
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.ignoringAntMatchers(
"/instances"
);
}
}
실행 화면(로그인창)
- 심플하게 잘 만들어 놓은거 같다.
- 위에 설정한 것처럼 id :
admin, password :admin를 사용하면됨.

Admin Client
application 설정(yml or properties)
server:
port: 8809
spring:
boot:
admin:
client:
url: http://localhost:9905
instance:
name: boot-admin-B-client
metadata:
user.name: ${spring.security.user.name}
user.password: ${spring.security.user.password}
username: ${spring.security.user.name}
password: ${spring.security.user.password}
security:
user:
name: admin
password: admin
management:
endpoints:
web:
exposure:
include: '*'
base-path: /hello/admin
추가 후 수집정보
- metadata 에 추가 되어 있다.

해당 소스들은 github 에 올라가 있습니다.
- https://github.com/akageun/hello-spring-boot-admin
참고자료
- https://github.com/codecentric/spring-boot-admin
- https://www.vojtechruzicka.com/spring-boot-admin/