
Prometheus 사용하기
ServerPrometheus
SoundCloud 에서 처음 개발된 오픈소스 시스템 모니터링 및 알림 도구
서버나 애플리케이션의 메트릭(metric) 데이터를 수집하고, 이를 시계열 데이터로 저장하여 시각화하거나 경고를 발생시킬 수 있다.
메트릭이란?
수치적 측정값
- 페이지 응답 시간
- CPU나 메모리 사용량
- API 호출 횟수
시계열이란?
시간 경과에 따른 변화를 기록하는 것
- 페이지 응답 시간이 평균 몇 초인지
- 하루 동안 CPU나 메모리 사용량에 어떤 변화가 있었는지
- 일주일간 API 오류율이 얼마나 되는지
Docker Container
docker-compose.yml
YAML
services:
prometheus:
image: prom/prometheus
container_name: metric
volumes:
- ./prometheus/config/:/etc/prometheus/
- ./prometheus/data:/prometheus
ports:
- 9090:9090
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--web.enable-lifecycle'
- '--storage.tsdb.retention.time=2d'
- '--storage.tsdb.retention.size=200MB'
restart: always
Config File
prometheus.yml
YAML
global:
scrape_interval: 1m
evaluation_interval: 1m
scrape_configs:
- job_name: 'blog api'
metrics_path: /api/metrics # api metrics path
scheme: http
static_configs:
- targets: [ 'host.docker.internal:8082' ]
labels:
instance: 'api'
# Prometheus 상태/성능 모니터링을 위한 메트릭 수집. Grafana 연동
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
scrape_interval 설정이 메모리에 미치는 영향
Prometheus는 시계열(Time Series) 단위로 메모리를 사용한다.
예를 들어 100개의 메트릭이 있고 `scrape_interval`이 15초이면, 1분 동안 4개의 시계열 샘플이 저장된다.
이를 1분으로 줄이면 단 1개의 시계열만 저장된다.
- 15s : 메모리 사용량 높음 (약 500MB). 데이터 해상도 높음 (변화 탐지에 민감)
- 30s : 메모리 사용량 중간 (약 250~300MB). 데이터 해상도 중간 (적당한 시계열 밀도)
- 1m : 메모리 사용량 낮음 (약 150~200MB). 데이터 해상도 낮음 (추세 파악엔 좋지만 순간 변화는 놓침)
데이터 해상도(data resolution) 란?
시계열 데이터가 얼마나 자주 기록되었는가, 얼마나 세밀하게 수집되었는가를 의미한다.
storage.tsdb.retention
수집한 데이터를 얼마나 오래 보관할지를 지정한다.
--storage.tsdb.retention.time
Prometheus가 수집한 데이터를 얼마나 오래 보관할지를 지정한다.
- 오래 저장할수록 디스크 사용량 증가
- 메모리에도 일정한 영향을 미친다. (block indexing 등)
- 장기 보존이 필요하다면 외부 저장소(예: Thanos, Cortex 등)를 고려해야 한다.
기본값
YAML
--storage.tsdb.retention.time=15d # 15일간 시계열 데이터 저장, 이후 자동 삭제
--storage.tsdb.retention.size
Prometheus가 디스크에 저장하는 시계열 데이터의 최대 크기를 제한합니다.
- 사용량이 적은 서버/테스트용 Prometheus에 적합하다.
- retention.time과 동시에 설정 시, 더 먼저 도달하는 조건이 우선된다.
- retention.time=7d + retention.size=200MB이면 7일이 지나기 전이라도 200MB를 초과하면 데이터가 삭제된다.
Reference
https://grafana.com/docs/grafana/latest/
https://tanmay-bhat.github.io/posts/prometheus-self-metrics/
https://prometheus.io/docs/prometheus/latest/installation/
https://www.devkuma.com/docs/prometheus/docker-compose-install/