Service Instance Monitoring 하는 법
08 Aug 2019
spring
spring
spring-boot
msa
최근 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를 설정해주세요.
bootstrap class
Application
class 상단에 @EnableAdminServer
를 추가해 줍니다.
@EnableAdminServer
@SpringBootApplication
public class Application {
public static void main ( String [] args ) {
SpringApplication . run ( Application . class , args );
}
}
실행
화면
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
<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
추가 후 수집정보
해당 소스들은 github 에 올라가 있습니다.
https://github.com/akageun/hello-spring-boot-admin
참고자료
https://github.com/codecentric/spring-boot-admin
https://www.vojtechruzicka.com/spring-boot-admin/
Related Posts
Please enable JavaScript to view the comments powered by Disqus.