Spring/Springboot

[Springboot] 프로메테우스-설정

늘이 2023. 12. 31. 23:54

 

 

프로메테우스는 메트릭을 수집하고 보관하는 DB

프로메테우스가 애플리케이션의 메트릭을 수집하도록 연동을 해야 함

 

 

1. 애플리케이션 설정

프로메테우스가 애플리케이션의 메트릭을 가져갈 수 있도록 애플리케이션에서 프로메테우스 포맷에 맞추어 메트릭 만들기

프로메테우스는 /actuator/metrics에서 보았던 포맷(JSON)을 이해하지 못함 하지만 마이크로미터가 이런 부분을 해결해 줌

각각의 메트릭들은 내부에서 마이크로미터 표준 방식으로 측정되고 있음, 따라서 어떤 구현체를 사용할지 지정해 주면 됨

 

 

1) 의존성 추가

  • 마이크로미터 프로메테우스 구현 라이브러리를 추가
  • 이렇게 하면 스프링 부트와 액츄에이터가 자동으로 마이크로미터 프로메테우스 구현체를 등록해서 동작하도록 설정해 줌
  • 액츄에이터 프로메테우스 메트릭 수집 엔드포인트 /actuator/prometheus 가 자동으로 추가됨

 

implementation 'io.micrometer:micrometer-registry-prometheus'

 

localhost:8080/actuator에 promethus 가 추가된 것을 확인할 수 있음

 

실행

http://localhost:8080/actuator/prometheus

모든 메트릭이 프로메테우스 포맷으로 만들어진 것을 확인할 수 있음

 

 

2. /actuator/metircs와 비교 

 

1) 프로메테우스는 액츄에이터의 '.' 대신 '_' 포맷을 사용함

  • 액츄에이터의 jvm.info가 프로메테우스는 jvm_info 포맷을 사용하는 것을 확인할 수 있음
  • /actuator/metircs의  jvm.info 비교

 

 

 

2) 액츄에이터 logback.events가 프로메테우스는 logback_events_total

  • 로그 수처럼 지속해서 숫자가 증가하는 메트릭을 카운터라고 함
  • 프로메테우스는 카운터 메트릭의 마지막에는 관례상 _total을 붙임
  • 프로메테우스는 log_events_total {level="warn",}, log_events_total {level="debug",}, log_events_total {level="error",}, log_events_total {level="trace",}, log_events_total {level="info",}로 분리된 것을 확인할 수 있음   

 

 

3) 액츄에이터의 http.server.requests 메트릭은 내부에 요청수, 시간 합, 최대 시간 정보를 가지고 있는데 프로메테우스에서는 아래 3가지로 분리되고 3가지 밑으로 요청별로 분리되어 나타나는 것을 확인할 수 있음

  • http_server_requests_seconds_count: 요청 수
  • http_server_requests_seconds_sum: 시간 합(요청수의 시간을 합함)
  • http_server_requests_seconds_max: 최대 시간(가장 오래 걸린 요청 수)

 

 

 

 

 

3. 프로메테우스 설정

프로메테우스가 애플리케이션의 /actuator/prometheus를 호출해서 메트릭을 주기적으로 수집하도록 설정

 

프로메테우스 폴더에 있는 prometheus.yml 수정

# add
- job_name: "spring-actuator"
  metrics_path: '/actuator/prometheus'
  scrape_interval: 1s 
  static_configs:
    - targets: ['localhost:8080']

 

  • job_name: 수집하는 이름, 임의의 이름을 사용하면 됨
  • metrics_path: 수집할 경로 지정
  • scrape_interval: 수집할 주기 설정, 현재는 1초에 한 번씩 호출 주기를 지정했지만 기본값은 1m, 수집 주기가 너무 짧으면 애플리케이션 성능에 영향을 줄 수 있으므로 실제 운영에서는 10s ~ 1m 정도 지정
  • targets: 수집할 서버의 IP, PORT를 지정

 

yml 수정 후 프로메테우스 재실행

localhost://9090/config 접속 -> 상단 Satus -> Configuration 클릭하면 아래와 같이 yml 수정 부분이 들어온 것을 확인할 수 있음

 

localhost://9090/config 접속 -> 상단 Satus -> Targets를 클릭해서 연동한 애플리케이션 메트릭 정보 확인

  • prometheus: 프로메테우스 자체에서 제공하는 메트릭 정보(프로메테우스가 프로메테우스 자신의 메트릭 확인하는 것)
  • spring-actuator: 연동한 애플리케이션 메트릭 정보
  • state가 UP이면 정상, DOWN이면 연동 안된 상태

 

 

중간에 발생한 에러▼

더보기

spring-actuator가 UP이 되어야 정상인데 DOWN으로 되는 현상 발생

server returned HTTP status 406

로그는 아래처럼 

Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: No acceptable representation]

 

http://localhost:8080/actuator/prometheus 접속은 됨..!

 

검색해 보니 프로메테우스 버전 다운그레이드로 해결했다고 해서 

다운로드한 2.49 버전을 2.48.1로 다시 설치해서 실행했더니 해결됨!

 

 

4. 프로메테우스를 통한 데이터 조회

  • 프로메테우스로 연동한 메트릭을 간단히 조회해 보기
  • jvm_info를 검색창에 입력해서 실행하면 아래와 같이 수집한 메트릭을 조회할 수 있음