Prometheus 시작하기
Prometheus 시작하기
숫자로 된 모니터링을 처음 돌려보려면, "일단 뭘 설치하고 어디서부터 돌려봐야 하지?"가 막막하죠. 이 가이드는 "Hello World" 스타일 튜토리얼이라서, Prometheus를 로컬에 내려받아 실행하고 자기 자신과 예제 애플리케이션을 스크랩하도록 설정한 뒤, 쿼리·규칙·그래프로 수집된 시계열 데이터를 다뤄보는 것까지 한 흐름으로 잡아드려요.
다운로드하고 실행하기
플랫폼에 맞는 최신 릴리스를 내려받아 압축을 풀고 실행하면 돼요.
tar xvfz prometheus-*.tar.gz
cd prometheus-*
시작하기 전에 설정부터 진행할게요.
Prometheus로 자기 자신 모니터링하기
Prometheus는 메트릭 HTTP 엔드포인트를 스크랩해서 대상(target)의 메트릭을 수집해요. Prometheus도 같은 방식으로 자기 자신에 대한 데이터를 노출하기 때문에, 자기 자신의 건강 상태까지 스크랩해 모니터링할 수 있어요.
Prometheus 시작하기
새로 만든 설정 파일로 Prometheus를 시작하려면 바이너리가 있는 디렉터리로 이동해 아래처럼 실행해요.
# Prometheus 시작.
# 기본적으로 데이터베이스는 ./data에 저장돼요 (플래그 --storage.tsdb.path).
./prometheus --config.file=prometheus.yml
이제 localhost:9090 에서 상태 페이지를 볼 수 있어요. 몇 초 기다리면 자기 자신의 HTTP 메트릭 엔드포인트에서 스스로에 대한 데이터를 수집하게 돼요. 메트릭이 제대로 서빙되는지 확인하려면 localhost:9090/metrics 로 접속해보면 돼요.
표현식 브라우저 사용하기
Prometheus가 자기 자신에 대해 수집한 데이터를 탐색해볼게요. 내장 표현식 브라우저를 쓰려면 http://localhost:9090/query 로 접속해 Graph 탭을 선택하세요. localhost:9090/metrics 에서 확인할 수 있듯, Prometheus가 스스로 노출하는 메트릭 중 하나가 prometheus_target_interval_length_seconds (대상 스크랩 사이의 실제 시간)이에요. 표현식 콘솔에 입력하고 Execute를 누르면 결과를 볼 수 있어요.
샘플 대상 모니터링하도록 설정하기
이제 새 대상들을 스크랩하도록 설정할게요. 세 엔드포인트를 node라는 단일 잡으로 묶되, 처음 두 개는 프로덕션 대상, 세 번째는 카나리(canary) 인스턴스라고 가정해볼게요. Prometheus에서는 단일 잡에 여러 대상 그룹을 추가하고 각 그룹에 라벨을 붙여 모델링할 수 있어요. 예제에서는 첫 그룹에 group="production", 두 번째 그룹에 group="canary" 라벨을 추가할게요.
이렇게 하려면 prometheus.yml의 scrape_configs 섹션에 다음 잡 정의를 추가하고 Prometheus를 재시작하면 돼요.
scrape_configs:
- job_name: 'node'
# 전역 기본값을 덮어써서 이 잡의 대상은 5초마다 스크랩해요.
scrape_interval: 5s
static_configs:
- targets: ['localhost:8080', 'localhost:8081']
labels:
group: 'production'
스크랩 데이터를 집계해 새 시계열로 기록하는 규칙
수천 개의 시계열을 집계하는 쿼리는 즉석(ad-hoc)으로 계산하면 느려질 수 있어요. 그래서 Prometheus는 **기록 규칙(recording rule)**을 통해 표현식을 새로운 지속 시계열로 미리 기록해둘 수 있어요.
예를 들어, 5분 창으로 측정한 CPU 시간(node_cpu_seconds_total)의 초당 비율을 인스턴스별 전체 CPU에 대해 평균내되 job, instance, mode 차원을 보존하고 싶다고 해볼게요. 이 표현식 결과를 job_instance_mode:node_cpu_seconds:avg_rate5m이라는 새 메트릭으로 기록하려면 아래 규칙을 prometheus.rules.yml로 저장하면 돼요.
groups:
- name: cpu-node
rules:
- record: job_instance_mode:node_cpu_seconds:avg_rate5m
expr: avg by (job, instance, mode) (rate(node_cpu_seconds_total[5m]))
Prometheus가 이 규칙을 인식하도록 prometheus.yml에 rule_files 구문을 추가해야 해요. 설정은 이제 이런 모습이 되겠죠.
더 알아보기
- Configuration — 설정 참조
- Querying basics — PromQL 기초
- Alerting overview — 알림 개요