[Spring] 액츄에이터, 마이크로미터, 프로메테우스, 그라파나 - 모니터링

Updated:

스프링 액츄에이터

  • 스프링 부트에서 제공되는 라이브러리
  • 애플리케이션의 모니터링이나 매트릭(측정 지표)과 같은 기능을 JMX와 HTTP 엔드 포인트를 통해 제공함
    • JVM(Java Management Extenstions)은 Java 응용 프로그램의 모니터링과 관리 기능을 제공
  • yml 파일과 gradle 추가로 적용시킬 수 있음


마이크로미터

  • 서비스를 운영할 때는 애플리케이션의 CPU, 메모리, 커넥션 사용, 고객 요청 수 같은 많은 지표들을 확인하는 것이 필요
    • 그래야 어디에 어떤 문제가 발생했는지 사전에 대응도 할 수 있고, 실제 문제가 발생해도 원인을 빠르게 파악하여 대처할 수 있음
    • 예를 들어, 메모리 사용량이 가득 찼다면 메모리 문제와 관련있는 곳을 빠르게 찾아 대응할 수 있음
  • 세상에는 수 많은 모니터링 툴이 있고, 시스템의 다양한 정보를 이 모니터링 툴에 전달하여 사용하게 됨
    • 이런 모니터링 툴이 작동하려면 시스템의 다양한 지표들을 각각의 모니터링 툴에 맞도록 만들어서 보내줘야 함

모니터링 툴에 지표 전달

스크린샷 2024-02-15 오후 5 58 19

  • 예를 들어서 CPU, JVM, 커넥션 정보 등을 JMX 툴에 전달한다고 가정한다면, 각각의 정보를 JMX 모니터링 툴이 정한 포맷에 맞추어 측정하고 전달해야 함

모니터링 툴 변경

스크린샷 2024-02-15 오후 5 58 40

  • 문제가 발생하는 부분
    • 중간에 사용하는 모니터링 툴을 변경했을 때
  • 기존에 측정했던 코드를 모두 변경한 툴에 맞도록 다시 변경해야 함
    • 개발자 입장에서는 단순히 툴 하나를 변경했을 뿐인데, 측정하는 코드까지 모두 변경해야 하는 문제가 발생하게 됨
  • 이런 문제를 해결하는 것이 마이크로미터(Micrometer)라는 라이브러리

마이크로미터 추상화

스크린샷 2024-02-15 오후 5 58 45

마이크로미터 전체 그림

스크린샷 2024-02-15 오후 5 58 51

  • 마이크로미터(애플리케이션 메트릭 파사드)는 애플리케이션의 메트릭(측정 지표)을 마이크로미터가 정한 표준 방법으로 모아서 제공해줌
    • 즉, 마이크로미터가 추상화를 통해서 구현체를 쉽게 갈아끼울 수 있도록 해준 것
  • 보통은 스프링이 이런 추상화를 직접 만들어서 제공하지만, 마이크로미터라는 이미 잘 만들어진 추상화가 있기 때문에 스프링은 이것을 활용함
    • 스프링 부트 액츄에이터는 마이크로미터를 기본으로 내장해서 사용함


프로메테우스

  • 애플리케이션에서 발생한 메트릭을 그 순간만 확인하는 것이 아니라 과거 이력까지 함께 확인하려면 메트릭을 보관하는 DB가 필요
    • 이렇게 하려면 어디선가 메트릭을 지속해서 수집하고 DB에 저장해야 함
    • 프로메테우스가 바로 이런 역할을 담당함


그라파나

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


전체 구조

스크린샷 2024-02-15 오후 7 58 58

  1. 스프링 부트 액츄에이터와 마이크로미터를 사용하면 수 많은 메트릭을 자동으로 생성함
    • 마이크로미터 프로메테우스 구현체는 프로메테우스가 읽을 수 있는 포멧으로 메트릭을 생성
  2. 프로메테우스는 이렇게 만들어진 메트릭을 지속해서 수집함
  3. 프로메테우스는 수집한 메트릭을 내부 DB에 저장함
  4. 사용자는 그라파나 대시보드 툴을 통해 그래프로 편리하게 메트릭을 조회함
    • 이때 필요한 데이터는 프로메테우스를 통해서 조회


Reference

Leave a comment