scrape_interval : 수집할 주기를 설정한다.(수집 주기의 기본 값은 1m이다. 수집 주기가 너무 짧으면 애플리케이션 성능에 영향을 줄 수 있으므로 운영에서는 10s ~ 1m정도를 권장)
targets : 수집할 서버의 IP, PORT를 지정한다.
설정이 끝났으면 프로메테우스 서버를 종료하고 다시 실행해야 한다.
프로메테우스 연동 확인
프로메테우스 메뉴 -> Status -> Configuration 에 들어가서 prometheus.yml 에 입력한 부분이 추가되어 있는지 확인
http://localhost:9090/config
프로메테우스 메뉴 -> Status -> Targets 에 들어가서 연동이 잘 되었는지 확인
http://localhost:9090/targets
prometheus : 프로메테우스 자체에서 제공하는 메트릭 정보이다. (프로메테우스가 프로메테우스 자신의 메트릭을 확인하는 것이다.)
spring-actuator : 우리가 연동한 애플리케이션의 메트릭 정보이다.
State 가 UP 으로 되어 있으면 정상이고, DOWN 으로 되어 있으면 연동이 안된 것이다.
기본 기능
검색창에 http_server_requests_seconds_count 를 입력하고 실행
Table -> Evaluation time 을 수정해서 과거 시간 조회 가능
Graph -> 메트릭을 그래프로 조회 가능
태그, 레이블: error , exception , instance , job , method , outcome , status , uri 는 각각의 메트릭 정보를 구분해서 사용하기 위한 태그이다. 마이크로미터에서는 이것을 태그(Tag)라 하고, 프로메테우스에서는 레이블(Label)이라 한다.
숫자: 끝에 마지막에 보면 19 , 6, 2 와 같은 숫자가 보인다. 이 숫자가 바로 해당 메트릭의 값이다.
필터
레이블을 기준으로 필터를 사용할 수 있다. 필터는 중괄호 '{}' 문법을 사용한다.
레이블 일치 연산자
= : 제공된 문자열과 정확히 동일한 레이블 선택
!= : 제공된 문자열과 같지 않은 레이블 선택
=~ : 제공된 문자열과 정규식 일치하는 레이블 선택
!~ : 제공된 문자열과 정규식 일치하지 않는 레이블 선택
예시
uri=/log , method=GET 조건으로 필터 : http_server_requests_seconds_count{uri="/log", method="GET"}
/actuator/prometheus 는 제외한 조건으로 필터 : http_server_requests_seconds_count{uri!="/actuator/prometheus"}
method 가 GET , POST 인 경우를 포함해서 필터 : http_server_requests_seconds_count{method=~"GET|POST"}
/actuator 로 시작하는 uri 는 제외한 조건으로 필터 : http_server_requests_seconds_count{uri!~"/actuator.*"}
연산자 쿼리와 함수
다음과 같은 연산자를 지원한다.
+(덧셈)
-(빼기)
*(곱셈)
/ (분할)
% (모듈로)
^ (승수/지수)
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)
topk
예) topk(3, http_server_requests_seconds_count) : 상위 3개 메트릭 조회
오프셋 수정자
http_server_requests_seconds_count offset 10m
offset 10m 과 같이 나타낸다. 현재를 기준으로 특정 과거 시점의 데이터를 반환한다.
범위 벡터 선택기
http_server_requests_seconds_count[1m]
마지막에 [1m], [60s] 와 같이 표현한다. 지난 1분간의 모든 기록값을 선택한다.
참고로 범위 벡터 선택기는 차트에 바로 표현할 수 없다. 데이터로는 확인할 수 있다. 범위 벡터 선택의 결과를 차트에 표현하기 위해서는 약간의 가공이 필요
게이지와 카운터
메트릭은 크게 보면 게이지와 카운터라는 2가지로 분류할 수 있다.
게이지(Gauge)
임의로 오르내일 수 있는 값
예) CPU 사용량, 메모리 사용량, 사용중인 커넥션
예를 들어서 대표적인 게이지인 CPU 사용량(system_cpu_usage)는 CPU 사용량의 현재 상태를 계속 측정하고 그 값을 그대로 그래프에 출력하면 과거부터 지금까지의 CPU 사용량을 확인할 수 있다.
게이지는 가장 단순하고 사용하기 쉬운 메트릭이다. 크게 고민하지 않고 있는 그대로를 사용하면 된다.
카운터(Counter)
단순하게 증가하는 단일 누적 값
예) HTTP 요청 수, 로그 발생 수
카운터는 계속 누적해서 증가하는 값이다. 따라서 계속 증가하는 그래프만 보게 될 것이다. 이렇게 증가만 하는 그래프에서는 특정 시간에 얼마나 고객의 요청이 들어왔는지 한눈에 확인하기 매우어렵다.
이런 문제를 해결하기 위해 increase() , rate() 같은 함수를 지원한다.
increase() 지정한 시간 단위별로 증가를 확인할 수 있다. 마지막에 [시간] 을 사용해서 범위 벡터를 선택해야 한다. 예) increase(http_server_requests_seconds_count{uri="/log"}[1m])
rate() 범위 백터에서 초당 평균 증가율을 계산한다. increase() 가 숫자를 직접 카운트 한다면, rate() 는 여기에 초당 평균을 나누어서 계산한다. rate(data[1m]) 에서 [1m] 이라고 하면 60초가 기준이 되므로 60을 나눈 수이다. rate(data[2m]) 에서 [2m] 이라고 하면 120초가 기준이 되므로 120을 나눈 수이다. 너무 복잡하게 생각하기 보다는 초당 얼마나 증가하는지 나타내는 지표로 보면 된다.
irate() rate 와 유사한데, 범위 벡터에서 초당 순간 증가율을 계산한다. 급격하게 증가한 내용을 확인하기 좋다.
그라파나
프로메테우스의 단점은 한눈에 들어오는 대시보드를 만들어보기 어렵다는 점이다. 이 부분은 그라파나를 사용하면 된다.