본문 바로가기

Spring

Actuator

728x90

Actuator

실제 운영 되고 있는 서비스에 문제가 없는지 모니터링하고 지표들을 심어서 감시하는 활동들을 매우 편리하게 사용할 수 있는 편의기능들을 제공해준다.

 

1. build.gradle

implementation 'org.springframework.boot:spring-boot-starter-actuator' //actuator 추가

 

2.Application.yml 

# Actuator의 기능들을 웹에 노출하거나 제거
management:
  endpoints:
    web:
      exposure:
        include: "*"
        exclude: "bean"

 

Actuator가 제공하는 endpoint들을 웹으로 확인하려고 할 경우management.endpoints.web.expososure.include를 사용하여 확인 가능하고 exclude를 사용하여 제거가능하다. (include를 "*" 할 경우 모든 엔드포인트 노출 - shutdown 제외)

 

특정 endpoint만 활성화 할  경우  management.endpoint.{엔드포인트명}.enabled=true 를 사용하여 활성화 할 수 있다.

3. 웹에서 Actuator 기능 확인(로컬 기준:localhost:8080/actuator)

 

4.자주 쓰이는 endpoint 

(1) health

health 엔드포인트는 단순히 애플리케이션이 요청에 응답을 할 수 있는지 판단하는 것을 넘어서 애플리케이션이 사용하는 데이터베이스가 응답하는지, 디스크 사용량에는 문제가 없는지 같은 다양한 정보들을 포함해서 만들어진다.

1. application.yml 

# management.endpoint.health.show-details health정보를 더 자세하게 볼 수있다.
management:
  endpoint:
    health:
      show-details: always
      
      
# management.endpoint.health.show-components health 컴포넌트의 상태 정보만 노출된다.
management:
  endpoint:
    health:
      show-component: always

 

2. Web 화면

 

health 컴포넌트 중에 하나라도 문제가 있으면 전체상태의 status도 DOWN이 된다. 

 

(2)  info

info 엔드포인트는 애플리케이션의 기본 정보를 노출한다.

 

1. application.yml 

management:
  info:
    os:
      enabled: true   # info에서 os정보 노출
    java:
      enabled: true   # info에서 java정보 노출

2. build.gradle (info엔드포인트의 build 정보 노출)

springBoot {
    buildInfo()
}

3. Web 화면

(3)  logger

logger 엔드포인트는 로깅과 관련된 정보를 확인하고, 또 실시간으로 변경할 수도 있다. 

 

1. Web 화면

2. 자세히 조회하기, 실시간 로그 레벨 변경 (http://localhost:8080/actuator/loggers/{로거이름})

POSTMAN 실시간 로그레벨 변경

 

특정 로거의 로그레벨 확인

 

이 기능을 사용하면 GET요청을 통해 특정 로거의 로그레벨을 확인 할 수 있고 포스트맨의 POST기능을 활용하여 실시간으로 로그레벨이 변경 가능하다.

 

(4)  httpexchange

httpexchange 엔드포인트는 HTTP 요청과 응답의 과거 기록을 확인하는데 사용된다.

이 기능은 매우 단순하고 기능에 제한이 많기 때문에 개발 단계에서만 사용하는 것이 좋다.

 

1. Bean 등록

@SpringBootApplication
public class ActuatorApplication {

    public static void main(String[] args) {
        SpringApplication.run(ActuatorApplication.class, args);
    }

    @Bean
    public InMemoryHttpExchangeRepository inMemoryHttpExchangeRepository() {
        return new InMemoryHttpExchangeRepository();
    }

}

 

이 구현체는 최대 100개의 HTTP 요청을 제공하므로 최대요청 수가 넘어가면 과거 요청을 삭제한다.

 

5. 액츄에이터와 보안

액츄에이터가 제공하는 기능들은 우리 애플리케이션의 내부 정보를 너무 많이 노출한다. 그래서 외부 인터넷 망이 공개된 곳에 액츄에이터의 엔드포인트를 공개하는 것은 보안상 좋은 방안이 아니다.


액츄에이터의 엔드포인트들은 외부 인터넷에서 접근이 불가능하게 막고, 내부에서만 접근 가능한 내부망을 사용하는 것이 안전하다.

 

외부 인터넷 망을 통해서 접근해야 한다면 /actuator 경로에 서블릿 필터, 스프링 인터셉터 또는 스프링 시큐티리를 통해서 인증된 사용자만 접근 가능하도록 추가 개발이 필요하다.

 

1. application.yml

management:
  server:
    port: 9292 # Actuator 서버 포트 설정

 

액츄에이터의 기능을 애플리케이션 서버와 다른 포트에서 실행하려면 yml파일을 통해 변경 가능하다.

 

management:
 endpoints:
 web:
 base-path: "/manage" #엔드포인트의 기본 경로변경

액츄에이터의 기능을 애플리케이션 서버와 다른 포트에서 실행하려면 yml파일을 통해 변경 가능하다.

6. Spring actuator 공식 메뉴얼

https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.enabling

728x90