1. Prometheus
From metrics to insight
Power your metrics and alerting with the leading
open-source monitoring solution.
메트릭으로부터 인사이트를 얻으라.
Prometheus는 오픈소스다.
2. 메트릭이란?
시스템과 애플리케이션의 상태 및 성능을 수치화하여 나타내는 시계열 데이터를 말한다.
이러한 메트릭은 주기적으로 수집되어 시스템의 건강 상태, 성능 등을 모니터링하는 데 사용된다.
메트릭을 잘 수집하면 사업 현황에 관한 유용한 정보를 얻을 수 있다.
DAU, Retension, CPU 사용량, 메모리 사용량 등이 있다.
프로메테우스는 HTTP 엔드포인트를 통해 이러한 메트릭을 수집한다.
3. 마이크로미터 - 메트릭 수집
Prometheus를 사용하려면 애플리케이션에서 메트릭을 수집하고 노출해야 한다. Spring Boot Application에서는 이 과정을 매우 간단하게 처리할 수 있다. Spring Boot Actuator가 자동으로 다양한 메트릭을 수집하고, 이 과정을 마이크로미터가 도와준다.
마이크로미터는 메트릭을 마이크로미터가 정한 표준 방법으로 모아서 제공해준다.
마이크로미터가 추상화를 통해서 구현체를 쉽게 갈아끼우게 해준 것이다.
그래서 프로메테우스를 사용하다가 다른 모니터링툴을 사용하려고 한다면, 구현체만 갈아끼우면 된다.
4. Prometheus 사용법
Prometheus를 사용하려면 1. 로컬에 설치, 2. 도커로 설치,
아무튼 설치해야 한다.
나는 도커로 설치했다.
4 - 1. Docker로 Prometheus 설치하기
4 - 1 - 1. prometheus.yml
global:
scrape_interval: 5s
scrape_configs:
- job_name: 'spring-boot'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['host.docker.internal:8080']
- scrape_interval: Prometheus가 타겟에서 메트릭을 수집하는 주기를 설정한다.
- job_name: 수행하는 업무의 이름을 지정하는 것으로, 아무렇게 작성해도 되고, 알아볼 수 있게만 작성하면 된다.
- metrics_path: 스프링부트 액츄에이터, 마이크로미터가 만든 메트릭을 가져오는 uri
- host.docker.internal:8080: Prometheus는 도커로 실행할 것이기 때문에 호스트의 8080 포트를 바라본다는 뜻이다.
4 - 1 - 2. build.gradle
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-web'
// prometheus
runtimeOnly 'io.micrometer:micrometer-registry-prometheus'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
actuator를 의존하면 자동으로 micrometer 라이브러리를 사용하게 된다.
prometheus 구현체를 사용한다고 명시한다.
4 - 1 - 3. application.yml
management:
endpoint:
health:
show-details: always
prometheus:
enabled: true
endpoints:
web:
exposure:
include: "*"
management.endpoint.prometheus.enabled=true 를 설정하여
프로메테우스가 수집할 메트릭을 노출시켜준다.
프로메테우스가 수집의 대상이 되는 "/actuator/prometheus" 의 모습이다.
4 - 1 - 4. Docker 실행
docker run -d --name=prometheus -p 9090:9090 -v C:\dev\monitor\prometheus\prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
- Prometheus의 기본포트는 9090이다.
- 위에서 설정한 prometheus.yml 의 경로는 C:\dev\monitor\prometheus\ 이다.
- 실행 시키면 prometheus 를 web에서 확인할 수 있다.
4 - 1 - 5. spring boot 서버와 연동 확인
지정한 job-name으로 연동되고 있음을 확인할 수 있다.
만약 spring boot 서버가 실행되고 있지 않다면 State 는 down으로 표시된다.
5. Prometheus Web UI 살펴보기
status > Configuration 에 가보면 prometheus.yml에 설정한 항목들을 확인할 수 있다.
- scrape_intervals: 5s
- job_name: spring-boot
- metrics_path: /actuator/prometheus
- targets: host.docker.internal:8080
5 - 1. query 해보기
Prometheus의 포맷은 마이크로미터의 기본 포맷과 다르다.
- "." 대신 "_" 이걸 쓴다. ex) jvm.info -> jvm_info
- 카운트 메트릭은 관례성 "total"이 붙는다. ex) logback.events -> logback_events_total
따라서, query 하려면 Prometheus의 포맷대로 입력해야 한다.
사진은 jvm_info를 입력했을 때의 출력되는 모습이다.
5 - 2. graph 보기
http_server_requests_seconds_count 를 쿼리한 후, graph 탭을 본 사진이다.
spring boot에서 요청된 엔드포인트를 확인할 수 있다.
빨간선은 /actuator/prometheus 호출 횟수로, 5초마다 호출되고 있기 때문에 계속 늘어나고 있다.
6. gauge 와 counter
- gauge: 오르 내리는 값. ex) CPU 사용량, 메모리 사용량
- Counter: 계속 증가하는 누적값. ex) HTTP 요청수
6 - 1. gauge
gauge의 대표적인 예로, system_cpu_usage를 그래프로 보자
6 - 2. counter
counter의 예시인, http_server_requests_seconds_count를 그래프로 보자
uri=/actuator 인것만 query한 모습이다.
counter의 경우 계속 증가하는 값이기 때문에
단순한 그래프는 인사이트를 얻기 힘들다.
따라서, 제공되는 함수를 써서 유의미한 값을 얻어내야 한다.
6 - 3. increase()
문법은 increase(쿼리할 명령어[1m]) 이다.
1m 은 시간 범위를 나타내며, 범위 벡터라고 한다.
ex) increase(http_server_requests_count{uri="/actuator"}[1m])
increase()를 사용하면 어느 시점에 고객의 요청이 몰렸는지를 확인할 수 있다.
6 - 4. rate()
rate() 함수를 사용하면 y축의 값이 바뀌게 된다.
카운트 / 60초 하여 평균을 구한 값이다.
6 - 5. irate()
범위 벡터에서 초당 순간 증가율을 구한 값이다.
급격한 증가를 확인하기 좋다.
더 많은 기능들은 공식 사이트를 참고하자.
https://prometheus.io/docs/prometheus/latest/querying/basics/
다음에는...
메트릭을 수집했으니 이제 대시보드를 만들어서 시각화해보자.
Grafana라는 좋은 툴이 있다.
References
https://www.maeil-mail.kr/question/66
'인프라 > Monitoring' 카테고리의 다른 글
Loki 로 로그 저장하고, Grafana 로 시각화하기 (0) | 2025.01.02 |
---|---|
장애 상황을 시뮬레이션 해보고 Grafana 로 확인하기(Spring Actuator, Prometheus) (0) | 2024.12.30 |
그라파나 - 대시보드 템플릿 사용하기 (0) | 2024.12.27 |
Grafana (0) | 2024.12.24 |
모니터링 - Spring Actuator (1) | 2024.12.20 |