[Prometheus] 프로메테우스란? 사용방법

프로메테우스란?

애플리케이션에서 발생한 메트릭(지표)을 그 순간만 확인하는 것이 아니라 과거 이력까지 함께 확인하려면 메트릭을 보관하는 DB가 필요하다.

프로메테우스가 바로 이러한 메트릭을 지속해서 수집하고 저장하는 DB 역할을 담당한다.


프로메테우스의 기능

아래는 프로메테우스의 검색창에 http_server_requests_seconds_count (특정 URI의 HTTP 요청 수)를 입력해 실행한 결과이다.

 

보면 각 URL의 요청 마다 끝에 얼마의 요청이 왔는지 분리가 되어있다.

그리고 마이크로미터에서 메트릭 정보를 구분하는 태그프로메테우스에는 레이블(Lable)이라고 한다.

이 결과에서 해당하는 레이블을 보면 "error , exception , instance , job , method , outcome , status , uri"이 있다.

 

이제 프로메테우스에서 주로 사용하는 기능들을 살펴보자

 

필터 기능

레이블을 기준으로 필터를 사용할 수 있다.  ( 중괄호 {} 문법을 사용 )

레이블 일치 연산자 설 명
= 제공된 문자열과 정확히 동일한 레이블 선택
!= 제공된 문자열과 같지 않은 레이블 선택
=~ 제공된 문자열과 정규식 일치하는 레이블 선택
!~ 제공된 문자열과 정규식 일치하지 않는 레이블 선택

 

필터 기능 예시 설 명
http_server_requests_seconds_count{uri="/log", method="GET"}  uri=/log , method=GET 조건으로 필터
http_server_requests_seconds_count{uri!="/actuator/prometheus"}  /actuator/prometheus 는 제외한 조건으로 필터
http_server_requests_seconds_count{method=~"GET|POST"} method 가 GET 또는 POST 인 경우를 포함해서 필터
http_server_requests_seconds_count{uri!~"/actuator.*"} 
 /actuator 로 시작하는 uri 는 제외한 조건으로 필터

 

연산자 쿼리와 함수

프로메테우스는 다음과 같은 연산자를 지원한다.

  • + (덧셈)
  • - (빼기)
  • * (곱셈)
  • / (분할)
  • % (모듈로)
  • ^ (승수/지수)

 

sum

값의 합계를 구한다.

sum(http_server_requests_seconds_count)

 

sum by

SQL의 group by 기능과 유사하게 그룹으로 묶은 레이블의 합을 나타낸다.

sum by(method, status)(http_server_requests_seconds_count)

 

count

메트릭 자체의 수를 카운트 한다. 

count(http_server_requests_seconds_count)

여기서는 요청받은 URL의 갯수가 5개라는 뜻이된다.

 

topk

topk(n, matric)으로 해당 matric의 값 상위 n개의 지표를 나타낸다.

topk(3, http_server_requests_seconds_count)

 

오프셋 수정자

현재를 기준으로 특정 과거 시점의 데이터를 반환한다.

http_server_requests_seconds_count offset 10m

offset 10m은 10분전의 데이터를 반환하는 것이다.

 

범위 벡터 선택기

메트릭 마지막에 대괄호[] 를 붙여 [1m] , [60s] 와 같이 표현한다.

[1m]을 붙였다면 지난 1분간의 모든 기록값을 선택한다.

아래에서 설명하는 increase(), rate() 함수와 함께 사용하여 차트를 표현한다.


게이지와 카운터

게이지(Gauge)

임의로 오르내일 수 있는 값 ( Ex: CPU 사용량, 메모리 사용량, 사용중인 커넥션 )

게이지는 오르고 내리고 하는 값이기 때문에 현재 상태를 그대로 출력하면 된다.

 

카운터(Counter)

단순하게 증가하는 단일 누적 값 ( Ex : HTTP 요청 수, 로그 발생 수 )

위 이미지는 프로메테우스에서 HTTP 요청 메트릭을 그래프로 표현한 것이다.

그래프가 계속 누적해서 증가하는 것을 볼 수 있다.

이렇게 계속 증가만한다면 특정 시간에 얼마나 고객의 요청이 들어왔는지 한눈에 파악하기가어렵다.

이런 문제를 해결하기 위해 카운터는 increase(), rate() 같은 함수를 함께 사용하여 해결할 수 있다.

 

increase()

지정한 시간 단위별로 증가를 확인할 수 있다.

마지막에 [시간] 을 사용해서 범위 벡터를 선택해야 한다.

 

increase(http_server_requests_seconds_count{uri="/log"}[1m]) 결과

이렇게 분당 얼마나 고객의 요청이 어느정도 증가했는지 한눈에 파악할 수 있다.

 

rate()

범위 백터에서 초당 평균 증가율을 계산한다.

이렇게 보면 increase() 그래프와 비슷하게 보이지만 차이가 있다.

increase() 가 숫자를 직접 카운트 한다면, rate() 는 여기에 초당 평균을 나누어서 계산한다.

즉, rate()는 초당 얼마나 증가하는지 나타내는 지표이다.

 

irate()

범위 벡터에서 초당 순간 증가율을 계산한다.

위 그래프를 보면 어느 시간대에 요청이 급격하게 증가한지 확인할 수 있다.


프로메테우스와 그라파나 조합

프로메테우스 자체만으로도 메트릭(지표)을 그래프로 표현하여 볼 수는 있지만, 시각화 면에서 빈약하다.

그래서 모니터링 시각화를 담당하는 그라파나와 함께 많이 사용한다.

그라파나는 수 많은 그래프를 제공하여 모니터링하는데 훨씬 편안하게 사용할 수 있다.

그라파나 링크

[Grafana] 그라파나란? 대쉬보드 만들기 및 활용

[Grafana] 그라파나 - 프로메테우스 연동 방법


더 알아보기

[Prometheus/Spring] 프로메테우스와 스프링 연결

[Prometheus] 프로메테우스 설치하기 (Window 설치)


참고자료 : 스프링 부트 - 핵심 원리와 활용