Prometheus
Prometheus는 오픈 소스 모니터링 및 경보 시스템입니다. 시스템 및 애플리케이션의 **메트릭(metric, 계량 정보)**을 수집하고, 시계열(time series) 데이터로 저장하며, 쿼리 및 시각화, 경보(alarm)를 설정할 수 있도록 지원합니다.
Prometheus의 대표적인 기능은 다음과 같습니다.
- 풀 방식의 메트릭 수집, 시계열 데이터 저장
- PromQL을 활용하여 저장된 시계열을 쿼리 및 집계
- 서비스 디스커버리
- 데이터 시각화
[개요]
✅ 종류 : 개념정의
✅ 난이도 : ⭐
✅ 내용요약 : Prometheus 개념 정리
✅ 테스트환경 :
✅ 관련직무 : 시스템 엔지니어, 클라우드 엔지니어, 데이터 엔지니어
Prometheus 아키텍처
✅ Prometheus 구성 요소 요약 및 설명
구성 요소 | 주요 역할 및 설명 |
---|---|
Prometheus | 시계열 데이터 수집 및 저장 설정 파일( prometheus.yml )을 기반으로 Pull 방식으로 Exporter 또는 Client App의 /metrics 엔드포인트에서 메트릭 수집 |
Exporter | 시스템/서비스의 메트릭을 수집하고 /metrics 포맷으로 노출예시: node_exporter , gpu_exporter , blackbox_exporter , mysqld_exporter 등 |
Client Library | 사용자 애플리케이션 코드에 직접 메트릭을 계측할 수 있도록 도와주는 라이브러리 예시: prometheus_client (Python), prom-client (Node.js), prometheus-client (Go 등) |
Pushgateway | 짧은 수명 또는 비정기성 작업(예: batch job)의 메트릭을 Push 방식으로 Prometheus에 전달 Prometheus는 Pushgateway에서 Pull |
Alertmanager | Prometheus에서 수집한 메트릭의 경고 조건(예: CPU > 80%)을 평가 후, 알림 전송 (Slack, Email, Webhook 등) |
Grafana (외부 툴) | Prometheus 데이터를 시각화하는 대시보드 도구. PromQL을 사용해 강력한 시각화 가능 |
Service Discovery | 동적 인프라 환경(Kubernetes, EC2 등)에서 자동으로 타겟을 감지하여 메트릭 수집 수동으로 job 타겟을 지정할 필요가 없음 |
Thanos / Cortex | Prometheus의 **수평 확장(Scale-Out)**과 장기 보존(Long-term Storage)을 가능하게 하는 보조 오픈소스 툴 |
✅ Prometheus를 사용하기에 적합한 일
유형 | 설명 |
---|---|
메트릭 기반 시계열 데이터 수집 | CPU 사용률, 메모리 사용량, 요청 수, 응답 시간 등 수치형(time series) 데이터 수집 및 저장 |
인프라/애플리케이션 성능 모니터링 | Node Exporter, cAdvisor, kube-state-metrics 등을 통해 다양한 시스템/컨테이너/클러스터의 상태 추적 |
마이크로서비스 환경에 적합 | Prometheus는 서비스 디스커버리(Kubernetes 등) 및 라벨링 기능을 통해 다수의 동적 인스턴스 모니터링에 효과적 |
임계치 기반 알림 생성 | Alertmanager를 통한 알림 전송 (Slack, Email 등) 가능. 예: CPU > 90% for 5m 경고 조건 |
간단하고 빠른 셋업이 필요한 경우 | 단일 바이너리로 동작, 로컬 디스크에 저장하는 구조이기 때문에 가볍고 설정이 간편함 |
❌ Prometheus가 적합하지 않은 일
유형 | 설명 |
---|---|
이벤트 기반 로깅 | 로그인 시도, 에러 발생 내역 등의 비정형 이벤트 로그 저장은 불가능 (→ ELK Stack, Loki, Graylog 사용 권장) |
고카디널리티(high cardinality) 데이터 저장 | 예: 유저 ID, 이메일 주소, 세션 ID 등을 라벨로 저장하면 메모리 사용량 폭증 → 성능 저하 발생 |
정확성이 중요한 재무 데이터 저장 | 예: 결제 트랜잭션 횟수 집계 등은 레이스 컨디션이나 스크래핑 실패로 누락 가능성이 있어 부적절 |
분산 처리 및 수평 확장이 필요한 경우 | Prometheus는 기본적으로 싱글 노드 운영을 전제로 설계되어 있어, 대규모 환경에선 Thanos 또는 Cortex 도입 필요 |
이력 보존이 중요한 환경 | Prometheus 기본 설정에서는 로컬 디스크 기반 저장이며 장기 보존이 어려움 (→ 외부 장기 스토리지 필요) |
📚 참고 링크
-
공식 문서: https://prometheus.io/docs/