[Springboot] 프로메테우스-설정
프로메테우스는 메트릭을 수집하고 보관하는 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를 검색창에 입력해서 실행하면 아래와 같이 수집한 메트릭을 조회할 수 있음