ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Boot 핵심 기능 5 - 모니터링 & 관리 (Micrometer)
    BackEnd/Spring Boot 2023. 5. 12. 07:00
    반응형

      서비스를 운영할 때는 애플리케이션의 CPU, 메모리, 커넥션 사용, 고객 요청 수 같은 수 많은 지표들을 확인하는 것이 필요합니다. 실무에서는 이러한 지표들을 그라파나, 데이터독, 핀포인트 등의 모니터링 툴에 전달해서 확인합니다. 모니터링 툴에 전달할 때는 모니터링 툴이 정한 포멧에 맞추어 측정하고 전달해야 합니다. 그런데 문제는 중간에 사용하는 모니터링 툴을 변경하면 기존에 측정했던 코드를 모두 변경한 툴에 맞도록 변경해야 한다는 것입니다. 이러한 문제를 해결하는 것이 마이크로미터(Micrometer) 라이브러리 입니다.

     

    마이크로미터 추상화

    • 마이크로미터는 애플리케이션 메트릭 파사드라고 불리는데, 애플리케이션의 메트릭(측정 지표)을 마이크로미터가 정한 표준 방법으로 모아서 제공합니다. 즉, 추상화를 통해서 구현체를 쉽게 갈아끼울 수 있도록 해두었습니다.
    • 스프링 부트 액츄에이터는 마이크로미터를 기본으로 내장해서 사용합니다.
    • 개발자는 마이크로미터가 정한 표준 방법으로 메트릭(측정 지표)를 전달하면 됩니다. 그리고 사용하는 모니터링 툴에 맞는 구현체를 선택하면 됩니다. 이후에 모니터링 툴이 변경되어도 해당 구현체만 변경하면 됩니다.

     

    마이크로미터가 지원하는 모니터링 툴

    • AppOptics
    • Atlas
    • CloudWatch
    • Datadog
    • Dynatrace
    • Elastic
    • Ganglia
    • Graphite
    • Humio
    • Influx
    • Instana
    • JMX
    • KairosDB
    • New Relic
    • Prometheus
    • SignalFx
    • Stackdriver
    • StatsD
    • Wavefront

    Note. 각 모니터링 툴에 대한 상세 내용은 공식 메뉴얼을 참고하시면 됩니다.

     

    메트릭 확인하기

      마이크로미터는 다양한 지표 수집 기능을 이미 만들어서 제공합니다. 그리고 스프링 부트 액츄에이터는 마이크로미터가 제공하는 지표 수집을 @AutoConfiguration을 통해 자동으로 등록해줍니다. 즉, 스프링 부트 액츄에이터를 사용하면 수 많은 메트릭(지표)를 편리하게 사용할 수 있습니다.

     

    metrics 엔드포인트

      metrics엔드포인트(http://localhost:8080/actuator/metrics)를 사용하면 기본으로 제공되는 메트릭들을 확인할 수 있습니다. 다음과 같은 패턴을 사용해서 더 자세히 확인할 수 있습니다.

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

     

    Tag 필터

      Tag를 기반으로 정보를 필터링해서 확인할 수 있습니다. tag=KEY:VALUE과 같은 형식을 사용해야 합니다. 다음과 같이 tag를 사용해서 힙 메모리, 힙이 아닌 메모리로 분류해서 데이터를 확인할 수 있습니다.

    • http://localhost:8080/actuator/metrics/jv m.memory.used?tag=area:heap
    • http://localhost:8080/actuator/metrics/jv m.memory.used?tag=area:nonheap

     

      다음은 /log 요청과 HTTP Status = 200 만 필터링합니다. (사전에 /log 요청을 해야 확인이 가능합니다.)

    • http://localhost:8080/actuator/metrics/http.server.requests?tag=uri:/log&tag=status:200

     

    다양한 메트릭

    JVM 메트릭

      JVM 관련 메트릭을 제공합니다. jvm. 으로 시작합니다.

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

     

    시스템 메트릭

      시스템 메트릭을 제공합니다. system. , process. , disk. 으로 시작합니다.

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

     

    애플리케이션 시작 메트릭

    • application.started.time: 애플리케이션을 시작하는데 걸리는 시간 (ApplicationStartedEvent로 측정)
    • application.ready.time: 애플리케이션이 요청을 처리할 준비가 되는데 걸리는 시간 (ApplicationReadyEvent로 측정)
    • ApplicationStartedEvent: 스프링 컨테이너가 완전히 실행된 상태입니다. 이후에 커맨드 라인 러너가 호출됩니다.
    • ApplicationReadyEvent: 커맨드 라인 러너가 실행된 이후에 호출됩니다.

     

    스프링 MVC 메트릭

      스프링 MVC 컨트롤러가 처리하는 모든 요청을 다룹니다(메트릭 이름: http.server.requests). TAG를 사용해서 다음 정보를 분류해서 확인할 수 있습니다.

    • uri: 요청 URI
    • method: GET, POST 같은 HTTP 메서드
    • status: 200, 400, 500 같은 HTTP Status 코드
    • exception: 예외
    • outcome: 상태코드를 그룹으로 모아서 확인

     

    데이터소스 메트릭

      DataSource, 커넥션 풀에 관한 메트릭을 확인할 수 있습니다. jdbc.connections. 으로 시작하며, 최대 커넥션, 최소 커넥션, 활성 커넥션, 대기 커넥션 수 등을 확인할 수 있습니다. 히카리 커넥션 풀을 사용하면 hikaricp. 를 통해 히카리 커넥션 풀의 자세한 메트릭을 확인할 수 있습니다.

     

    로그 메트릭

      logback.events: logback 로그에 대한 메트릭을 확인할 수 있습니다. trace, debug, info, warn, error 각각의 로그 레벨에 따른 로그 수를 확인할 수 있습니다.

     

    톰캣 메트릭

      톰캣 메트릭은 tomcat. 으로 시작합니다. 톰캣 메트릭을 모두 사용하려면 다음 옵션을 켜야합니다. (옵션을 켜지 않으면 tomcat.session. 관련 정보만 노출됩니다.)

    application.yml

    server:
      tomcat:
        mbeanregistry:
          enabled: true

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

     

    기타

    • HTTP 클라이언트 메트릭(RestTemplate, WebClient)
    • 캐시 메트릭
    • 작업 실행과 스케줄 메트릭
    • 스프링 데이터 리포지토리 메트릭
    • 몽고DB 메트릭
    • 레디스 메트릭

    Note. 지원하는 다양한 메트릭들은 공식 메뉴얼을 참고하시면 됩니다.

     

      메트릭은 100% 정확한 숫자를 보는데 사용하는 것이 아닙니다. 약간의 오차를 감안하고 실시간으로 대략의 데이터를 보는 목적으로 사용합니다. 마이크로미터의 핵심 기능은 Counter, Gauge, Timer, Tags 입니다.

    • Counter(카운터): 단조롭게 증가하는 단일 누적 측정항목, 예) HTTP 요청수 등
    • Gauge(게이지): 임의로 오르내릴 수 있는 단일 숫자 값을 나타내는 메트릭, 예) CPU 사용량, 메모리 사용량 등
    • Timer: 시간을 측정하는데 사용합니다. seconds_count(누적 실행 수), seconds_sum(실행 시간의 합), seconds_max(최대 실행 시간) 등 한번에 측정해줍니다.
    • Tag, 레이블: 데이터를 나누어서 확인할 수 있습니다. 카디널리티가 낮으면서 그룹화 할 수 있는 단위에 사용해야 합니다. 예) 성별, 주문 상태 등

     

    [참고정보]

    스프링 부트 - 핵심 원리와 활용

    반응형

    댓글

Designed by Tistory.