개발

Spring Boot 3.x 기반 actuator 설정 및 custom metrics 추가

오렌지색 귤 2023. 7. 11. 19:39
반응형

Spring Boot Actuator

http://localhost:8080/actuator/

위 링크 접속시 아래처럼 각 항목별 상세 링크 정보를 알려준다
이러한 방식을 HATEOAS 방식이라고 한다
각각의 url은 endpoint라고 부른다

self -> http://127.0.0.1:8080/actuator
health -> http://127.0.0.1:8080/actuator/health
health-path -> http://127.0.0.1:8080/actuator/health/{*path}

의존성 추가

implementation 'org.springframework.boot:spring-boot-starter-actuator'

핵심 라이브러리인 micrometer-core를 살펴보면 spring boot가 구동되는 application의 health, info, metric 정보들을 수집하는 역할을 하는 binder 클래스들이 아주 많이 구현되어 있다

해당 클래스들은 spring-boot-actuator-autoconfigure 라이브러리에서 특정 클래스를 사용 시에 자동으로 bean으로 등록해준다

Endpoints

기본 제공 endpoints 목록
https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints

  • 각 endpoint는 활성화 여부와 노출 여부 설정을 할 수 있으며, 2가지 모두 켜져야 외부로 노출된다

현재 dev 기준 설정
management.endpoints.web.exposure.include=* management.endpoint.health.show-details=always

** 활성화 설정, 노출 설정을 모두 on 했더라도 추가 설정이 더 필요한 endpoint 존재

Custom endpoint 추가

Endpoint 클래스

@Endpoint(id = "exampleInfo")
public class ExampleEndpoint {

  @Data
  @AllArgsConstructor
  private static class SomeInfo {
    private String code;
    private int count;
  }

  @ReadOperation
  public List<SomeInfo> getSomeInfos() {
    return List.of(
        new SomeInfo("AA", 10),
        new SomeInfo("BB", 20)
    );
  }
}

빈 등록

@Configuration
public class EndpointConfig {

  @Bean
  ExampleEndpoint exampleEndpoint() {
    return new ExampleEndpoint();
  }
}

결과


** Endpoint는 결국 rest controller와 다를바 없다

Metrics endpoint

  • cpu, mem, disk usage, thread count, cache 용량 등의 정보는 대부분 제공된다

상세 목록
https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.metrics.supported

외부 모니터링 시스템과의 연동

  1. 액츄에이터가 metric 정보 수집해서 web endpoint로 제공
  2. datadog, elastic, prometheus, influx와 같은 모니터링 연관 시스템에서 metric 정보를 읽고 해당 시스템 스토리지에 저장
  3. grafana, kibana와 같은 GUI 툴을 통해 시간대별 metric 값의 변화를 차트로 보여준다

NSC에서는 Elastic을 사용할 예정이므로 아래 설정을 해준다면 될 것이다.
https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.metrics.export.elastic

MetricsEndpoint 클래스

  • MeterRegistry 필드를 상속받는 meter는 80개 가량이다
  • 이중에서 이름 매칭을 통해 적절한 meter를 찾은 후 상세 정보를 가져온다

Custom Metrics

MeterRegistry에 meter를 등록하려면 MeterBinder를 bean으로 등록해야 한다

https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.metrics.registering-custom

Micrometer

아래 개념들에 대한 이해를 하면 좋을 듯 하다

  • Registry
  • Meters
    • Tag
  • Counters
  • Gauges
  • Timers

자세한 내용은 공식 문서를 참고하도록 하자

https://micrometer.io/docs/concepts

참조

https://semtul79.tistory.com/

반응형

'개발' 카테고리의 다른 글

단위 테스트에서 Mockito 잘 활용하기  (0) 2023.09.22
Feign Client 커스텀 하기  (0) 2023.07.05
Kafka를 이용해 '실시간' 데이터 처리가 가능한가?  (0) 2022.12.11
2. Apis - 요약  (0) 2022.12.04
1. Getting Started - 요약  (0) 2022.12.04