Spring micrometer와 metric

라모스·2023년 5월 19일
0

Spring Boot

목록 보기
2/2
post-thumbnail

micrometer?

공식 문서에 따르면, micrometer는 벤더 중립적인 API를 사용하여 코드를 시간, 계산 및 측정할 수 있도록 하는 것을 목표로 하는 a dimensional-first metrics collection facade이다. 클래스 경로 및 구성을 통해 메트릭 데이터를 내보낼 모니터링 시스템을 하나 이상 선택할 수 있다. SLF4J와 비슷하지만 메트릭용이라고 생각하면 된다.

micrometer는 Spring Boot 2의 Actuator에 포함된 메트릭 수집 기능이다.

📌 Micrometer: Spring Boot 2's new application metrics collector

수 많은 모니터링 툴이 있고, 시스템의 다양한 정보를 이 모니터링 툴에 전달해서 사용하게 되는데 시스템의 다양한 지표들을 각각의 모니터링 툴에 맞도록 만들어 보내주어야 작동한다.

CPU, JVM, 커넥션 정보 등을 JMX 모니터링 툴에 전달한다면 해당 포멧에 맞추어 측정하고 전달해야 한다.

만약 모니터링 툴을 변경해야 한다면 기존 측정 데이터를 모두 변경한 툴에 맞도록 다시 변경해야 한다.

앞서 애플리케이션 메트릭 퍼사드라는 단어는 마이크로미터가 추상화를 통해 구현체를 쉽게 갈아끼울 수 있도록 해줬다고 이해할 수 있다. 애플리케이션의 메트릭을 마이크로미터가 정한 표준 방법으로 모아서 제공해주는 역할을 한다. 개발자는 마이크로미터가 정한 표준 방법으로 메트릭을 전달하고 사용하는 모니터링 툴에 맞는 구현체를 선택하기만 하면 된다. 이렇게 하면 앞서 언급한 문제가 모두 해결된다.

이를 위해 Spring Boot Actuator는 마이크로미터를 기본으로 내장해서 사용한다.

metric

http://localhost:8080/actuator/metrics 에 접속하면 기본으로 제공되는 메트릭들을 확인할 수 있다.

Spring Boot Actuator는 마이크로미터가 제공하는 지표 수집을 @AutoConfiguration을 통해 자동으로 등록해준다.

metrics 엔드포인트는 다음과 같은 패턴을 사용하면 더 자세히 확인할 수 있다.

  • http://localhost:8080/actuator/metrics/{name}

마이크로미터와 액츄에이터가 기본으로 제공하는 메트릭들의 목록은 다음과 같다.

  • JVM 메트릭
  • 시스템 메트릭
  • 애플리케이션 시작 메트릭
  • Spring MVC 메트릭
  • Tomcat 메트릭
  • Datasource 메트릭
  • 로그 메트릭

사용자가 메트릭을 직접 정의하는 것도 가능하다.

JVM 메트릭

jvm.으로 시작한다.

  • 메모리 및 버퍼 풀 세부 정보
  • 가비지 수집 관련 통계
  • 스레드 활용
  • 로드 및 언로드된 클래스 수
  • JVM 버전 정보
  • JIT 컴파일 시간

시스템 메트릭

system., process., disk.로 시작한다.

  • CPU 지표
  • 파일 디스크립터 메트릭
  • 가동 시간 메트릭
  • 사용 가능한 디스크 공간

애플리케이션 시작 메트릭

  • application.started.time: 애플리케이션을 시작하는데 걸리는 시간 (ApplicationStartedEvent로 측정)
  • application.ready.time: 애플리케이션이 요청을 처리할 준비가 되는데 걸리는 시간 (ApplicationReadyEvent로 측정)

스프링은 내부에 여러 초기화 단계가 있고 각 단계별로 내부에서 애플리케이션 이벤트를 발행한다.

  • ApplicationStartedEvent: 스프링 컨테이너가 완전히 실행된 상태이다. 이후 커맨드라인 러너가 호출된다.
  • ApplicationReadyEvent: 커맨드 라인 러너가 실행된 이후에 호출된다.

Spring MVC 메트릭

Spring MVC Controller가 처리하는 모든 요청을 다룬다.
메트릭 이름: http.server.requests

  • uri: 요청 URI
  • method: GET, POST 같은 HTTP 메서드
  • status: 200, 400, 500 같은 HTTP Status 코드
  • exception: 예외
  • outcome: 상태코드를 그룹으로 모아서 확인
    • 1xx:INFORMATIONAL
    • 2xx:SUCCESS
    • 3xx:REDIRECTION
    • 4xx:CLIENT_ERROR
    • 5xx:SERVER_ERROR

Datasource 메트릭

DataSource, 커넥션 풀에 관한 메트릭을 확인할 수 있다.
jdbc.connections. 로 시작함

최대 커넥션, 최소 커넥션, 활성 커넥션, 대기 커넥션 수 등을 확인할 수 있다. hikaricp.를 통해 HikariCP의 자세한 메트릭 역시 확인할 수 있다.

로그 메트릭

logback.events를 통해 logback 로그에 대한 메트릭을 확인할 수 있다.

각각의 로그 레벨에 따른 로그 수를 확인할 수 있다.

Tomcat 메트릭

tomcat. 로 시작함

기본적으론 tomcat.session. 관련 정보만 노출되는데, 이 메트릭을 모두 사용하려면 다음 옵션을 켜야한다.

server:
  tomcat:
    mbeanregistry:
      enabled: true

톰캣의 최대 쓰레드, 사용 쓰레드 수를 포함한 다양한 메트릭을 확인할 수 있다.

기타 메트릭

  • HTTP 클라이언트 메트릭 (RestTemplate, WebClient)
  • 캐시 메트릭
  • 작업 실행과 스케줄 메트릭
  • Spring Data Repository 메트릭
  • MongoDB 메트릭
  • Redis 메트릭

지원하는 다양한 메트릭들은 공식 문서를 참고하도록 하자.

프로메테우스와 그라파나

프로메테우스

애플리케이션에서 발생한 메트릭을 그 순간만 확인하는 것이 아닌 과거 이력까지 함께 확인하려면 메트릭을 저장하는 DB가 필요하다. 이를 위해 어디선가 메트릭을 지속적으로 수집하고 DB에 저장해야 하는데 이런 역할을 프로메테우스가 담당한다.

그라파나

프로메테우스가 DB라고 하면, 이 DB에 있는 데이터를 불러 사용자가 보기 편하게 보여주는 대시보드가 필요하다. 그라파나는 매우 유연하고, 데이터를 그래프로 보여주는 툴이다. 수 많은 그래프를 제공하고, 프로메테우스를 포함한 다양한 데이터소스를 지원한다.

각각의 메트릭들은 내부에서 마이크로미터 표준 방식으로 측정되고 있다. 어떤 구현체를 사용할지만 지정해주자.

References

profile
Step by step goes a long way.

0개의 댓글