Prometheus란?
- Prometheus는 메트릭 수집, 시각화, 알림, 서비스 디스커버리 기능을 제공하는 오픈 소스 모니터링 시스템입니다.
- 원래 SoundCloud에서 개발되었으나, 오픈 소스로 전환된 후 CNCF(Cloud Native Computing Foundation)의 프로젝트로 채택되었습니다.
- Prometheus는 타겟(Target)에서 시간 경과에 따른 메트릭을 수집하여 시계열 데이터베이스(Time-Series Database) 형태로 저장합니다.
Prometheus의 주요 기능
- HTTP 엔드포인트를 통한 Pull 방식의 메트릭 수집 및 시계열 데이터 저장
- 서비스 디스커버리를 활용한 동적 모니터링
- PromQL을 이용한 시계열 데이터 쿼리 및 집계
- Grafana와 같은 시각화 도구를 통해 데이터 시각화
Prometheus 데이터 저장 방식
Prometheus는 WAL(Write-Ahead Log)과 청크(chunk)를 사용하여 데이터를 저장합니다.
- Prometheus는 타겟으로부터 메트릭을 수집하여 이를 시계열 데이터로 변환합니다.
- 수집된 메트릭은 메모리 내 데이터 구조로 저장됩니다.
- 동시에, 데이터는 WAL에 기록됩니다.
- 메모리 내 데이터는 chunk 형태로 구성되며, 주기적으로 로컬 파일 시스템에 저장(flush)된 후 가장 오래된 WAL 파일은 삭제됩니다.
- 디스크에 저장된 chunk는 정기적으로 compaction과정(최적화)을 거쳐 저장 공간을 최적화합니다.
- Prometheus가 재시작되면 WAL 데이터를 읽어 메모리에 다시 적재함으로써 데이터의 연속성을 유지합니다.
Prometheus 아키텍처

1. Retrieval (데이터 수집)

- Retrieval은 서비스 디스커버리에 정의된 타겟(Target)을 식별하고 데이터를 수집합니다.
- Kubernetes Service Discovery를 활용하면 클러스터 내 실행 중인 서비스를 동적으로 검색하고 모니터링할 수 있습니다.
2. Exporters (데이터 변환기)

- Exporters는 Prometheus에서 직접 호환되지 않는 서비스(예: OS 레벨 메트릭)를 모니터링하거나 데이터를 수집할 때 사용됩니다.
- 시스템의 메트릭 데이터를 Prometheus가 이해할 수 있는 형식으로 변환하며, 변환된 데이터를 Retrieval이 가져옵니다.
3. Pushgateway (배치 작업 지원)

- Pushgateway는 짧은 지속 시간의 작업(예: 배치 작업)에서 발생하는 메트릭 데이터를 수집하는 역할을 합니다.
- 해당 메트릭은 Pushgateway를 통해 Prometheus가 데이터를 가져올 수 있도록 저장됩니다.
4. Alertmanager (알림 관리)

- Alertmanager는 Prometheus가 생성한 알림(Alert)을 수신하고, 이를 필터링, 그룹화, 전달하여 최종 수신자(예: 이메일, 슬랙 등)에게 전달합니다.
- 알림의 우선순위를 설정하거나 특정 조건에 따라 그룹화하여 효율적으로 알림을 관리할 수 있습니다.
5. Prometheus Server (데이터 제공)

- Prometheus HTTP Server는 수집한 데이터를 HTTP 엔드포인트로 노출하여 Grafana와 같은 시각화 도구나 API 클라이언트가 데이터를 조회할 수 있도록 지원합니다.
Prometheus 데이터 흐름
- 서비스 디스커버리를 통해 타겟을 식별.
- 타겟에서 메트릭 데이터를 Pull 방식으로 수집.
- 수집된 메트릭 데이터를 메모리에 저장하고 WAL에 기록.
- 메모리에서 chunk 형태로 데이터를 디스크에 저장합니다.
- 필요에 따라 PromQL을 사용해 데이터를 쿼리 및 분석하며, Grafana를 통해 시각화합니다.
📚 참고 자료