DevOps/Monitoring

Prometheus 훑어보기

devsean 2025. 8. 8. 19:51

메트릭 수집의 필요성

사용자 수가 늘어나고, 서비스가 고도화됨에 따라 서버의 구성 요소(컴포넌트)들이 다분화된다. 원활한 서비스 운영을 위해 각 컴포넌트들의 상태를 쉽게 파악할 수 있어야 한다. 이를 위해 메트릭을 설정하고 운영이 잘 되고 있는지, 이슈는 없는 지를 체크할 수 있다. 프로메테우스를 활용하여, 시계열로 메트릭의 상태를 추적 관찰할 수 있다. 참고로 유용하게 활용되는 메트릭은 아래와 같다.

  • 호스트 단위 메트릭 : CPU, 메모리, 디스크 I/O 등
  • 종합(aggregated) 메트릭 : DB 계층의 성능, 캐시 계층의 성능 등
  • 핵심 비즈니스 메트릭 : DAU(일별 능동 사용자), Revenue, Retention(재방문) 등

 

Prometheus?

프로메테우스는 CNCF에 소속된 오픈소스 프로젝트이며, 시계열 데이터를 처리하는 것이 주 목적인 Time-Series DB이다. 주로 메트릭 데이터에 대한 APM(Application Performance Monitoring) 구축을 목적으로 하므로, 컨테이너 기반의 분산 서비스(MSA 등)에서 활용된다.

 

설정된 수집 주기에 맞춰 수집 대상 요소들로부터 메트릭들을 수집해오며, PromQL이라는 쿼리 언어를 활용하여 조회할 수 있다. 메트릭을 수집하는 Pull 방식을 채택하여 모니터링 설정을 Prometheus에서 편하게 관리할 수 있다. 쿠버네티스 환경에서 적용하기 위해, Prometheus Operator를 활용할 수 있다.

 

Prometheus 데이터 구조

참고하여 학습했던 블로그의 설명이 깔끔해서 예시를 그대로 가져왔다. 쿼리했을 때 화면에 보이는 결과인 기본적인 데이터 구조와, 시계열 관점에서 볼 수 있는 데이터 구조가 존재한다.

 

기본적인 데이터 구조

  1. 데이터 이름 : 지표(Metrics)를 구분하기 위한 고유한 이름으로, 이 이름만 검색해도 해당하는 데이터의 목록을 조회할 수 있다.
  2. 라벨 (Label) : 동일한 지표에 해당하는 데이터 각각을 구분하기 위한 식별자이다.
  3. 데이터 값 (Scalar) : 데이터의 값을 나타낸다. 프로메테우스는 float64 범위의 실수만을 데이터 값으로 갖는다.

 

시계열 관점에서의 데이터 구조(Vector)

Prometheus는 시계열 DB이기 때문에, 각 Metrics에 해당하는 데이터들은 시간(Timestamp)과 함께 저장된다. 아래와 같이 쿼리 뒤에 대괄호([])를 열고 시간 값을 입력하면, Value에 해당하는 Timestamp와 함께 데이터가 조회된다. 다음은 최근 1분[1m]에 해당하는 데이터를 가져오는 예시이다. 수집 주기인 10초 단위로, Value에 값과 Timestamp를 함께 출력한다.

 

시간 개념과 함께, 데이터들은 Vector라는 단위로 분류할 수 있다.

 

  1. Sample : 데이터 이름, 라벨, 스칼라 한 건을 의미한다.
  2. Instant Vector : 동일한 시간대에 속하는, 그러나 다른 라벨을 가진 데이터(Sample)의 집합을 의미한다. 데이터 이름으로만 조회했을 때 불러와지는 데이터 목록은, 가장 최신 시점에 해당하는 Instant Vector를 반환한다.
  3. Range Vector : 앞선 예시의 alice_k106_http_requests[1m]과 같이 특정 시간대의 데이터를 가져올 때 조회되는 데이터(Sample)의 집합이다.

 

PromQL

프로메테우스는 데이터를 쿼리하기 위해, PromQL이라는 자체 쿼리 언어를 사용한다. 쿼리 문법은 Prometheus 공식 문서에서 확인할 수 있으며, 참고한 블로그에 소개된 자주 사용되는 문법들 위주로 정리해두었다.

 

기본 문법

Label Selector

Metrics의 이름 뒤에 {}을 통해 Label 셀렉터를 추가하여, 셀렉터의 조건에 맞는 데이터를 반환한다.

 

특정 시간 이전부터 현재까지의 데이터 반환

대괄호[]를 사용하여, 현재를 기준으로 특정 시간 만큼의 데이터를 가져온다. 사용할 수 있는 시간 단위는 s, m, h, d, w, y 6가지이며 반환되는 데이터는 Range Vector 타입이다.

 

정규 표현식을 사용한 Label 쿼리

정규 표현식을 사용해 특정 라벨의 값을 가지는 데이터를 반환할 수 있다. 이 때, 정규 표현식은 RE2 문법을 따른다.

 

기본 연산자를 통한 데이터 쿼리

다른 데이터 간에 같은 라벨을 가지는 데이터가 존재한다면, +, - 등의 연산이 가능하다. 예를 들어 아래와 같이 두 개의 라벨이 일치한다면, 직접 데이터를 빼는 것이 가능하다.

 

Recording Rules

기본적으로 제공되는 Metrics 이외에도, rule을 정의하여 데이터를 재정의할 수 있다. 자주 사용되는 쿼리를 미리 정의해둔 뒤, 주기적으로 rule에 정의된 쿼리를 수행해 그 결과물을 새로운 데이터 Metrics로서 다시 저장한다. 이렇게 함으로써 자주 사용하는 쿼리에 의미를 부여할 수도 있고, Grafana와 같은 Dashboard를 활용할 때에도 매 번 새로운 쿼리를 실행하는 부담을 줄여줄 수 있다.

 

sum, avg, rate 등의 기본 함수

sum은 합계를, avg는 평균을 계산한다. by(label1, label2, …)와 같이 특정 label들을 기준으로 계산할 수도 있다. rate는 기간 내에서의 1초 당 증감률을 계산한다.

 

Vector Matching

Prometheus는 Vector Matching이라는 기능을 통해, Vector 간 연산을 제공한다. Vector 간 연산은 기본적으로는 라벨이 일치하는 두 Vector 간에 이루어지는데, 라벨이 달라도 on과 ignoring 키워드를 활용해서 연산을 가능케 한다. ignoring명시된 라벨들을 무시하고 연산을 수행하며, on명시된 라벨을 기준으로만 연산을 수행한다.

 

한편 연산은 One-to-One, One-to-Many, Many-to-One 3가지를 제공한다. 쉽게 이야기해서 Cardinality 기준으로 Many인 벡터가 왼쪽이면 group_left(), 오른쪽이면 group_right()를 사용하면 된다. 괄호 안에 라벨을 넣어서, One인 벡터 쪽의 라벨이 보존되도록 할 수도 있다.

 

예시 : One-to-One

예시 : One-to-Many, Many-to-One

 

예시 : on

 

예시 : group_left(success_message)

상기 예시 : on과 비교하여, group_left 뒤에 success_message 추가

 

 

참고 자료

가상 면접 사례로 배우는 대규모 시스템 설계 기초 1 - 1장(알렉스 쉬, 2021)

 

169. [Prometheus] 1편 : Prometheus (프로메테우스) 사용 방법, 기본 개념, 데이터 구조

이번 포스트에서는 프로메테우스 (Prometheus) 에 대한 전반적인 사용 방법에 대해서 다룬다. k8s와 같은 ...

blog.naver.com

 

 

170. [Prometheus] 2편. PromQL 사용하기, k8s에서 Meta Label과 relabel을 활용한 기본 라벨 설정, 그 외의 이

이번 포스트에서는 프로메테우스에서 PromQL을 사용하는 방법과 기본 라벨 설정 방법에 대해서 다룬다.&...

blog.naver.com

 

 

Querying basics | Prometheus

Prometheus project documentation for Querying basics

prometheus.io

 

 

Defining recording rules | Prometheus

Prometheus project documentation for Defining recording rules

prometheus.io

 

Prometheus Operator를 사용해 Kubernetes 환경에서 Prometheus 구성하기

Prometheus는 CNCF의 몇 안되는 graduate 프로젝트 중 하나인 시계열 모니터링 시스템입니다. 이런 Prometheus는 일반적인 VM 환경에서도 사용할 수 있지만 Kuberenetes에서 사용하는 MSA 구성에도 사용할 수

nangman14.tistory.com

 

 

 

향후 참고할 자료

*참고했던 블로그 저자가 출판한 책으로 2025년 7월 출간되었다. 시간될 때 읽어볼 예정이다.

 

도커/쿠버네티스 | 용찬호 - 교보문고

도커/쿠버네티스 | 쿠버네티스와 도커의 기본 사용 방법을 정확히 이해하는 것을 목표로 합니다!도커 컨테이너는 애플리케이션을 배포하기 위한 새로운 패러다임을 제시하는 가상화 패러다임

product.kyobobook.co.kr