프로메테우스란?
애플리케이션에서 발생한 메트릭(지표)을 그 순간만 확인하는 것이 아니라 과거 이력까지 함께 확인하려면 메트릭을 보관하는 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 by
SQL의 group by 기능과 유사하게 그룹으로 묶은 레이블의 합을 나타낸다.
count
메트릭 자체의 수를 카운트 한다.
여기서는 요청받은 URL의 갯수가 5개라는 뜻이된다.
topk
topk(n, matric)으로 해당 matric의 값 상위 n개의 지표를 나타낸다.
오프셋 수정자
현재를 기준으로 특정 과거 시점의 데이터를 반환한다.
offset 10m은 10분전의 데이터를 반환하는 것이다.
범위 벡터 선택기
메트릭 마지막에 대괄호[] 를 붙여 [1m] , [60s] 와 같이 표현한다.
[1m]을 붙였다면 지난 1분간의 모든 기록값을 선택한다.
아래에서 설명하는 increase(), rate() 함수와 함께 사용하여 차트를 표현한다.
게이지와 카운터
게이지(Gauge)
임의로 오르내일 수 있는 값 ( Ex: CPU 사용량, 메모리 사용량, 사용중인 커넥션 )
게이지는 오르고 내리고 하는 값이기 때문에 현재 상태를 그대로 출력하면 된다.
카운터(Counter)
단순하게 증가하는 단일 누적 값 ( Ex : HTTP 요청 수, 로그 발생 수 )
위 이미지는 프로메테우스에서 HTTP 요청 메트릭을 그래프로 표현한 것이다.
그래프가 계속 누적해서 증가하는 것을 볼 수 있다.
이렇게 계속 증가만한다면 특정 시간에 얼마나 고객의 요청이 들어왔는지 한눈에 파악하기가어렵다.
이런 문제를 해결하기 위해 카운터는 increase(), rate() 같은 함수를 함께 사용하여 해결할 수 있다.
increase()
지정한 시간 단위별로 증가를 확인할 수 있다.
마지막에 [시간] 을 사용해서 범위 벡터를 선택해야 한다.
이렇게 분당 얼마나 고객의 요청이 어느정도 증가했는지 한눈에 파악할 수 있다.
rate()
범위 백터에서 초당 평균 증가율을 계산한다.
이렇게 보면 increase() 그래프와 비슷하게 보이지만 차이가 있다.
increase() 가 숫자를 직접 카운트 한다면, rate() 는 여기에 초당 평균을 나누어서 계산한다.
즉, rate()는 초당 얼마나 증가하는지 나타내는 지표이다.
irate()
범위 벡터에서 초당 순간 증가율을 계산한다.
위 그래프를 보면 어느 시간대에 요청이 급격하게 증가한지 확인할 수 있다.
프로메테우스와 그라파나 조합
프로메테우스 자체만으로도 메트릭(지표)을 그래프로 표현하여 볼 수는 있지만, 시각화 면에서 빈약하다.
그래서 모니터링 시각화를 담당하는 그라파나와 함께 많이 사용한다.
그라파나는 수 많은 그래프를 제공하여 모니터링하는데 훨씬 편안하게 사용할 수 있다.
그라파나 링크
[Grafana] 그라파나란? 대쉬보드 만들기 및 활용
더 알아보기
[Prometheus/Spring] 프로메테우스와 스프링 연결
[Prometheus] 프로메테우스 설치하기 (Window 설치)
참고자료 : 스프링 부트 - 핵심 원리와 활용
'◼ 오픈소스' 카테고리의 다른 글
[Grafana] 그라파나란? 대쉬보드 만들기 및 활용 (0) | 2023.05.24 |
---|---|
[Grafana] 그라파나 - 프로메테우스 연동 방법 (0) | 2023.05.23 |
[Grafana] 그라파나 설치 방법 (Window) (0) | 2023.05.23 |
[Prometheus] 프로메테우스 설치하기 (Window 설치) (0) | 2023.05.23 |
Utterances - 댓글 기능 추가하기 (0) | 2023.02.21 |