본문 바로가기
스프링/SpringBoot

Spring Boot Admin / Spring Boot Actuator

by 공부 안하고 싶은 사람 2021. 6. 25.
반응형

Spring Boot Actuator를 통해 어플리케이션의 JVM, JMX, 메모리, GC 등 health정보를 가져올 수 있다.

(http://localhost:8080/actuator 호출 시 HATEOAS로 정보 가져올 수 있다.)

여기에 Spring Boot Admin을 이용하여, Auctuator 설정된 어플리케이션들을 웹에서 번에 모니터링/관리 할 수 있다.

 

 

Admin(Server) 측

 

의존성

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-server</artifactId>
    <version>2.2.2</version>
</dependency>
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-server-ui</artifactId>
    <version>2.2.2</version>
</dependency>
  • 스프링 부트 버전이 2.2.x 일 때 스프링 부트 어드민은 2.2.0으로 잡아야 한다. 다른 버전으로 구성하면 adminHandlerMapping 빈을 생성할 때 스택오버플로 예외가 발생한다.
  • 현재(2021/06) 시점에선 Boot Admin Start Server는 Boot 버전 2.3.X 버전까지만 적용이 가능하다
  • (Boot 버전은 2.5.X까지 릴리즈 된 상황)

 

Application.yml

server.port: 8000

spring.boot.admin.notify:
  slack:
    enabled: true
    webhook-url: 
    username: admin
    message: "*#{instance.registration.name}* (#{instance.id}) is *#{event.statusInfo.status}*"
  ms-teams:
    enabled: false
    webhook-url:
  • http://IP:8000 으로 clent에서 등록하면 해당 URI에서 모니터링이 가능하다
  • Slack / Teams 등과 같은 메신저 혹은 이메일로 장애 알람을 받을 수 있다.

 

logback-spring.xml

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
                <pattern>%d{yyyy:MM:dd HH:mm:ss.SSS} %-5level --- [%thread] %logger{35} : %msg %n</pattern>
                <charset>utf8</charset>
        </encoder>
</appender>

<appender name="RollingFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/admin.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
              <fileNamePattern>logs/admin_%d{yyyy-MM-dd}.log</fileNamePattern>
                <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
                <pattern>%d{yyyy:MM:dd HH:mm:ss.SSS} %-5level --- [%thread] %logger{35} : %msg %n</pattern>
                <charset>utf8</charset>
        </encoder>
</appender>

<root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="RollingFileAppender" />
</root>
  • 콘솔로그를 찍을 수 있도록 간단한 설정

 

Security

Spring Security를 의존받아, 로그인 기능을 사용하는것이 일반적이다 (여기선 생략하도록 하겠다.)

로그인 정보는 Client쪽 설정(username)에서 계정정보를 추가할 수 있다.

 

Application

@EnableAdminServer // admin설정을 추가하여 서버기능을 수행할 수 있도록 한다.
@SpringBootApplication
public class TasAdminApplication {
    public static void main(String[] args) {
        SpringApplication.run(TasAdminApplication.class, args);
    }
}

 

 

Actuator(Clent 측)

 

의존성

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
   <groupId>de.codecentric</groupId>
   <artifactId>spring-boot-admin-starter-client</artifactId>
   <version>2.2.0</version>
</dependency>
  • Actuator와 Client 설정을 추가
  • Web을 의존받아야 Server에서 Client의 Autuator정보를 가져올 수 있다

 

application.yml

spring.boot.admin.client:
    url: #server URI
    auto-registration: true
    username: #Security계정 정보
    instance:
      name: Client
      prefer-ip: true
      metadata:
        key: value
management.endpoints:
  web:
  	exposure.include: "*" # 엔드포인트 노출 종류
  	base-path: /actuator # 엔드포인트 url
management.endpoint:
  health.show-details: always # 상세 내역 유무
  
info: # /actuator/info 에 노출할 기본적인 정보
	contact:
		email: xxx@xxx.com
		phone: 01012345678
  • client 설정으로 server에 연결할 수 있고, instance 정보를 통해 server에서 어떤 데이터로 노출될 것인지 설정
  • management 설정으로 어떤 데이터를 가져올 것인지 설정

 

이미지

 

 

 

만약 netflix-eureka를 사용하고 있다면,

Admin을 eureka에 등록하기만 해도

Admin스스로 eureka에서 Client를 찾아서 등록하기 때문에

Client 단 별도의 설정이 필요없다.

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
728x90
반응형

'스프링 > SpringBoot' 카테고리의 다른 글

SpringBoot  (0) 2021.02.09

댓글