본문 바로가기
Observability/Prometheus & Grafana

Prometheus 란?

by wlsdn3004 2023. 5. 10.
728x90
반응형

 

Prometheus란?

Prometheus는 시스템 및 서비스의 상태를 모니터링하는 인기 있는 오픈소스 모니터링 도구이다.

 

Prometheus는 다양한 대상(Target)에서 시간 경과에 따른 지표(Metric)를 수집하여 시계열 데이터베이스 형태로 저장한다.

 

메트릭 수집은 주로 HTTP 엔드포인트를 통한 Pull 방식으로 이루어지며, 서비스 디스커버리 기능을 통해 동적인 환경에서 실행 중인 서비스를 자동으로 탐지하고 모니터링할 수 있다. 또한, Exporters를 활용하여 Prometheus가 기본적으로 지원하지 않는 애플리케이션의 메트릭도 수집할 수 있다. 

 

Prometheus의 쿼리 언어인 PromQL을 사용하여, 수집된 데이터를 기반으로 쿼리를 실행하고, 결과를 Grafana와 같은 시각화 도구를 통해 그래프와 대시보드 형태로 볼 수 있다. 또한, 설정된 조건에 따라 경고 규칙을 정의하고, 임계값을 초과하는 등의 문제가 발생하면 경고를 발송하여 운영자가 신속하게 문제를 인지하고 대응할 수 있도록 도와준다.

 

 

Prometheus 데이터 저장 방식

Prometheus에서 WAL(Write-Ahead Log)과 청크(chunk)는 Prometheus의 데이터 저장 메커니즘의 핵심 부분이다. Prometheus는 시계열 데이터를 효율적으로 저장하기 위해 청크라는 단위로 데이터를 저장하고, WAL을 사용하여 데이터의 안정성을 보장한다.

아래는 Prometheus에서 WAL과 chunk가 어떻게 상호작용하여 데이터를 저장하는지에 대한 설명이다.

  1. Prometheus는 타겟으로부터 메트릭을 수집하고, 이 메트릭은 시계열 데이터로 구성된다.
  2. 메트릭이 수집되면, Prometheus는 먼저 수집된 데이터를 인메모리 데이터 구조에 저장한다.
  3. 거의 동시에, Write-Ahead Log(WAL)에도 기록한다.
  4. 데이터는 메모리 내에서 chunk 형태로 조직되고, 주기적으로 데이터를 로컬 파일 시스템에 chunk 블록으로 flush 한 뒤 가장 오래된 WAL 파일을 삭제한다
  5. 디스크에 쓰여진 chunk 블록들은 일정 시간 간격으로 compaction 과정을 거치며, 이 과정에서 저장 공간을 최적화한다.
  6. Prometheus가 재시작되면 WAL을 사용하여 데이터를 읽어 들여 메모리 내의 chunk에 다시 적재하여 데이터의 연속성을 유지한다.

 

 

프로메테우스의 구조는 다음과 같다.

 

각 기능들에 대해 설명하자면 다음과 같다.

Prometheus의 Retrieval은 Service discovery에 정의되어 있는 Target을 식별한다. Kubernetes 클러스터에서는 Kubernetes Service Discovery를 사용하여 클러스터 내에서 실행 중인 서비스를 자동으로 검색하고 모니터링할 수 있다. 

 

Exporters는 Prometheus에서 기본적으로 모니터링할 수 없는 서비스나 애플리케이션으로부터 메트릭을 수집하는 데 사용된다. 즉, 시스템의 메트릭 데이터를 Prometheus가 이해할 수 있는 형식으로 변환하여 노출시켜 주는 기능을 하며, Prometheus Retrieval가 이 메트릭을 가져와 처리한다.

 

Pushgateway는 단일 작업 또는 배치 작업과 같은 짧은 지속 시간의 작업의 지표를 수집하고 Prometheus 서버의 Retrieval에서 해당 게이트웨이로 메트릭을 가져와 처리한다.

 

Prometheus는 알림이 생성되면 Alertmanager가 사용하는 HTTP API를 통해 알림을 전송한다. Alertmanager는  Prometheus가 생성한 알림을 수신하고 필터링, 그룹화, 전달 등의 작업을 수행하여 최종적으로 수신자에게 전송하는 역할을 한다. 수신자는 Email이 될 수 있고, webhook 알림 을 받을 수 있는 다른 솔루션이 될 수도 있다.

 

Prometheus HTTP Server는 Prometheus에서 수집한 메트릭 데이터를 HTTP 엔드포인트로 노출하는 역할을 한다. 이를 통해 웹 브라우저 또는 다른 애플리케이션(예: Grafana)에서 쿼리하고 데이터를 시각화할 수 있다.

 

모든 데이터는 Local Storage를 사용하여 TSDB(Time Series Database) 형식으로 저장하여 보관한다.

반응형

댓글