Prometheus

지원 버전: Prometheus 2.x / 3.x 마지막 업데이트: 2026년 2월 20일

목차

소개

Prometheus는 SoundCloud에서 개발되어 CNCF(Cloud Native Computing Foundation)에 기증된 오픈소스 시스템 모니터링 및 알림 툴킷입니다. Kubernetes 환경에서 사실상의 표준(de facto standard) 모니터링 솔루션으로 자리잡았습니다.

주요 특징

  1. 다차원 데이터 모델: 메트릭명과 키-값 쌍(레이블)으로 식별되는 시계열 데이터

  2. PromQL: 다차원 데이터를 활용하는 유연한 쿼리 언어

  3. Pull 기반 수집: HTTP를 통해 타겟에서 메트릭을 주기적으로 스크랩

  4. 서비스 디스커버리: Kubernetes 등 동적 환경에서 모니터링 대상 자동 발견

  5. 알림 관리: 규칙 기반 알림 정의 및 Alertmanager를 통한 알림 라우팅

  6. 독립적인 서버: 단일 서버로 동작하며 분산 스토리지에 의존하지 않음

Prometheus가 적합한 경우

  • 순수 수치 시계열 기록

  • 머신 중심 모니터링과 고도로 동적인 서비스 지향 아키텍처

  • 다차원 데이터 수집 및 쿼리

  • 100% 정확도보다 시스템 개요 파악이 중요한 경우

Prometheus가 적합하지 않은 경우

  • 이벤트 로깅이나 트레이싱

  • 요청별 과금 등 100% 정확도가 필요한 경우

  • 장기 데이터 보존 (별도 장기 저장소 필요)

아키텍처

spinner

데이터 흐름

  1. 서비스 디스커버리: Kubernetes API, DNS, 파일 등에서 스크랩 대상 발견

  2. 메트릭 수집: HTTP를 통해 대상의 /metrics 엔드포인트에서 메트릭 스크랩

  3. 데이터 저장: 수집된 메트릭을 로컬 TSDB에 저장

  4. 규칙 평가: 저장된 데이터에 대해 알림 및 기록 규칙 평가

  5. 알림 전송: 발화된 알림을 Alertmanager로 전송

  6. 쿼리 제공: HTTP API를 통해 PromQL 쿼리 처리

핵심 구성 요소

TSDB (Time Series Database)

Prometheus의 내장 시계열 데이터베이스는 효율적인 시계열 데이터 저장을 위해 설계되었습니다.

TSDB 블록 구조:

kube-state-metrics

Kubernetes API 객체에 대한 메트릭을 생성하는 서비스입니다.

주요 메트릭:

node-exporter

호스트 수준의 하드웨어 및 OS 메트릭을 노출하는 익스포터입니다.

주요 메트릭:

PromQL 쿼리 언어

PromQL(Prometheus Query Language)은 Prometheus의 함수형 쿼리 언어입니다.

기본 쿼리

집계 연산자

Rate 및 증가량 함수

수학 함수

시간 함수

히스토그램 함수

예측 함수

실용적인 쿼리 예시

서비스 디스커버리

Kubernetes 서비스 디스커버리

Prometheus는 Kubernetes API를 통해 자동으로 모니터링 대상을 발견합니다.

Pod 어노테이션 기반 스크래핑

Prometheus Operator

Prometheus Operator는 Kubernetes에서 Prometheus를 선언적으로 관리하기 위한 컨트롤러입니다.

커스텀 리소스 정의 (CRDs)

spinner

Prometheus 리소스

ServiceMonitor

PodMonitor

PrometheusRule

kube-prometheus-stack 설치

kube-prometheus-stack은 Prometheus, Alertmanager, Grafana 및 관련 구성 요소를 포함하는 포괄적인 Helm 차트입니다.

Helm을 사용한 설치

values.yaml 예시

Alertmanager 연동

Alertmanager 설정

AlertmanagerConfig

Remote Write 및 AMP 연동

Amazon Managed Prometheus (AMP) 연동

IRSA 설정

VictoriaMetrics로 Remote Write

성능 튜닝

메모리 최적화

스크랩 최적화

TSDB 튜닝

모범 사례

고가용성 구성

레이블링 전략

알림 규칙 가이드라인

문제 해결

일반적인 문제

1. 메모리 부족 (OOMKilled)

2. 높은 카디널리티

3. 스크랩 실패

4. 쿼리 타임아웃

디버깅 명령어

참고 자료

퀴즈

이 장에서 배운 내용을 테스트하려면 Prometheus 퀴즈를 풀어보세요.

마지막 업데이트