Prometheus 사용하기

Server

(Update : 2025-06-01)

Language :

Prometheus

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/

민갤

Back-End Developer

백엔드 개발자입니다.