본문 바로가기

spring/boot

스프링 부트 액추에이터 메트릭 사용하기

측정 단위

  • Counter : 런타임에서 생성된 과정 수를 측정.
  • Gauge : 영구적으로 생성된 과정 수를 측정.
  • Timer : 과정 생성에 소요된 시간을 측정
  • DistributionSummary : 과정 평점에 대한 분포 요약

사용방법

사용할 측정 단위의 이름과 설명 그리고 메트릭 저장소를 통해 생성단위를 빈으로 등록한다.

생성된 측정 단위는 측정할 로직에서 사용하여 과정을 측정한다.

  • 등록 예제
    @Bean
    public Counter createCourseCounter(MeterRegistry registry) {
        return Counter.builder("api.courses.created.count")
                .description("Total number of courses created")
                .register(registry);
    }

    @Bean
    public Gauge createCourseGauge(MeterRegistry registry){
        return Gauge.builder("api.courses.created.gauge", () -> {
                    return 10; // gauge를 얻을 저장소에서 가져오는데 예제라서 10 고정
                }).description("Total courses created")
                .register(registry);

    }

    @Bean
    public Timer createCoursesTimer(MeterRegistry registry){
        return Timer.builder("api.courses.creation.time")
                .description("Course creation time")
                .register(registry);
    }

    @Bean
    public DistributionSummary createDistributionSummary(MeterRegistry registry){
        return DistributionSummary.builder("api.courses.rating.distribution.summary")
                .description("Rating distribution summary")
                .register(registry);
    }

Prometheus와 Grafana에 연동하기

micrometer에서 제공하는 prometheus 라이브러리 의존성 추가하면 애플리케이션의 메트릭 정보를 연동할 수 있다.

runtimeOnly 'io.micrometer:micrometer-registry-prometheus'
  • 로컬에서 도커를 이용해서 실습하기 위한 프로메테우스 설정 파일
scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: [ "host.docker.internal:9090" ]

  - job_name: "spring-actuator"
    metrics_path: /actuator/prometheus
    scrape_interval: 5s
    static_configs:
      - targets: [ "host.docker.internal:8081" ]
  • 도커 컴포즈 파일
services:
  prometheus:
    image: prom/prometheus
    ports:
      - "9090:9090"
    volumes:
      - "./prometheus.yml:/etc/prometheus/prometheus.yml"

  grafana:
    image: grafana/grafana
    ports:
      - "3000:3000"
  • 연동된 grafana 화면 예시

  • spring boot actuator 에서 보낸 metric 파일 예시