You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
# HELP tomcat_threads_config_max_threads
# TYPE tomcat_threads_config_max_threads gauge
tomcat_threads_config_max_threads{name="http-nio-8080",} 200.0
# HELP tomcat_sessions_alive_max_seconds
# TYPE tomcat_sessions_alive_max_seconds gauge
tomcat_sessions_alive_max_seconds 0.0
# HELP tomcat_cache_access_total
# TYPE tomcat_cache_access_total counter
tomcat_cache_access_total 0.0
# HELP jvm_info JVM version info
# TYPE jvm_info gauge
jvm_info{runtime="OpenJDK Runtime Environment",vendor="JetBrains
s.r.o.",version="17.0.3+7-b469.37",} 1.0
# HELP logback_events_total Number of events that made it to the logs
# TYPE logback_events_total counter
logback_events_total{level="warn",} 0.0
logback_events_total{level="debug",} 0.0
logback_events_total{level="error",} 2.0
logback_events_total{level="trace",} 0.0
logback_events_total{level="info",} 47.0
...
모든 메트릭이 프로메테우스 포멧으로 만들어 진 것을 확인할 수 있다.
/actuator/metrics 와 비교해서 프로메테우스에 맞추어 변환된 부분을 몇가지 확인해보자.
포멧 차이
jvm.info ⇒ jvm_info: 프로메테우스는 . 대신에 _ 포멧을 사용한다. . 대신에 _ 포멧으로 변환된 것을 확인할 수 있다.
logback.events ⇒ logback_events_total : 로그수 처럼 지속해서 숫자가 증가하는 메트릭을 카운터라 한다. 프로메테우스는 카운터 메트릭의 마지막에는 관례상 _total 을 붙인다.
http.server.requests ⇒ 이 메트릭은 내부에 요청수, 시간 합, 최대 시간 정보를 가지고 있었다. 프로메테우스에서는 다음 3가지로 분리된다.
http_server_requests_seconds_count : 요청수
http_server_requests_seconds_sum : 시간 합(요청수에 대한 시간을 합함)
http_server_requests_seconds_max : 최대 시간(가장 오래걸린 요청 수)
대략 이렇게 포멧들이 변경된다고 보면 된다. 포멧 변경에 대한 부분은 진행하면서 자연스럽게 알아보자.
(3) 프로메테우스 - 프로메테우스.yml 에서 수집 설정 2
이제 프로메테우스가 애플리케이션의 /actuator/prometheus 를 호출해서 메트릭을 주기적으로 수집하도록 설정해보자.
prometheus : 프로메테우스 자체에서 제공하는 메트릭 정보이다. (프로메테우스가 프로메테우스 자신의 메트릭을 확인하는 것이다.)
spring-actuator : 우리가 연동한 애플리케이션의 메트릭 정보이다.
State 가 UP 으로 되어 있으면 정상이고, DOWN 으로 되어 있으면 연동이 안된 것이다.
프로메테우스를 통한 데이터 조회 예제
프로메테우스를 통해서 연동한 메트릭을 간단히 조회해보자.
jvm_info 를 검색창에 넣고 실행해보면 우리 애플리케이션으로부터 수집한 메트릭을 끌고올 수 있다.
(4) 프로메테우스 - 기본 기능 (PromQL 활용)
💡
PromQL (Prometheus Query Language): Prometheus에서 수집한 시계열 데이터(time-series data)를 조회하고 분석하기 위한 쿼리 언어로 이 언어는 데이터 집계, 필터링, 시간 범위 설정 등을 통해, 사용자가 모니터링 시스템에서 중요한 정보를 추출할 수 있도록 해준다.
PromQL은 메트릭 이름, 라벨, 연산자 등을 사용하여 데이터를 쿼리하고, 합계(sum), 평균(avg), 변화율(rate) 등 다양한 집계 함수와 연산을 지원한다.
이번에는 프로메테우스를 사용하는데 필요한 간단한 기능들을 알아보자.
검색창에 실행 결과 http_server_requests_seconds_count 를 입력하고 실행해보자.
실행 결과
태그, 레이블:error, exception, instance, job, method, outcome, status, uri 는 각각의 메트릭 정보를 구분해서 사용하기 위한 태그이다. 마이크로미터에서는 이것을 태그(Tag)라 하고, 프로메테우스에서는 레이블(Label)이라 한다. 여기서는 둘을 구분하지 않고 사용하겠다.
숫자: 끝에 마지막에 보면 132, 4 와 같은 숫자가 보인다. 이 숫자가 바로 해당 메트릭의 값이다.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
2.2. 프로메테우스
💡프로메테우스 : 메트릭을 수집하고 보관하는 DB
(1) 프로메테우스 설치 및 실행
https://prometheus.io/download/
본인에게 맞는 OS를 선택한다. 참고로 Mac OS 사용자는
darwin선택windows-amd64를 선택하면 된다.darwin-amd64를 선택하면 된다../prometheus실행윈도우는 처음 실행하면 다음과 같은 메시지를 확인할 수 있다.
프로메테우스가 우리 애플리케이션의 메트릭을 수집하도록 연동해보자. 여기에는 2가지 작업이 필요하다.
(2) 프로메테우스 - 스프링 부트 애플리케이션 설정 1
프로메테우스가 애플리케이션의 메트릭을 가져가려면 프로메테우스가 사용하는 포멧에 맞추어 메트릭을 만들어야 한다.
참고로 프로메테우스는
/actuator/metrics에서 보았던 JSON 포멧은 이해하지 못한다.하지만 프로메테우스 포멧에 대한 부분은 걱정할 것이 없다. 마이크로미터가 이런 부분은 모두 해결해준다.
각각의 메트릭들은 내부에서 마이크로미터 표준 방식으로 측정되고 있다. 따라서 어떤 구현체를 사용할지를 지정만 해주면 된다.
build.gradle 추가
/actuator/prometheus실행
http://localhost:8080/actuator/prometheus
실행 결과
모든 메트릭이 프로메테우스 포멧으로 만들어 진 것을 확인할 수 있다.
/actuator/metrics와 비교해서 프로메테우스에 맞추어 변환된 부분을 몇가지 확인해보자.포멧 차이
jvm.info⇒jvm_info: 프로메테우스는.대신에_포멧을 사용한다..대신에_포멧으로 변환된 것을 확인할 수 있다.logback.events⇒logback_events_total: 로그수 처럼 지속해서 숫자가 증가하는 메트릭을 카운터라 한다. 프로메테우스는 카운터 메트릭의 마지막에는 관례상_total을 붙인다.http.server.requests⇒ 이 메트릭은 내부에 요청수, 시간 합, 최대 시간 정보를 가지고 있었다. 프로메테우스에서는 다음 3가지로 분리된다.http_server_requests_seconds_count: 요청수http_server_requests_seconds_sum: 시간 합(요청수에 대한 시간을 합함)http_server_requests_seconds_max: 최대 시간(가장 오래걸린 요청 수)(3) 프로메테우스 - 프로메테우스.yml 에서 수집 설정 2
이제 프로메테우스가 애플리케이션의
/actuator/prometheus를 호출해서 메트릭을 주기적으로 수집하도록 설정해보자.프로메테우스 폴더에 있는
prometheus.yml파일을 수정하자.prometheus.ymljob_name: 수집하는 이름이다. 임의의 이름을 사용하면 된다.metrics_path: 수집할 경로를 지정한다.scrape_interval: 수집할 주기를 설정한다.targets: 수집할 서버의 IP, PORT를 지정한다.이렇게 설정하면 프로메테우스는 다음 경로를 1초에 한번씩 호출해서 애플리케이션의 메트릭들을 수집한다.
http://localhost:8080/actuator/prometheus
설정이 끝났으면 프로메테우스 서버를 종료하고 다시 실행하자.
프로메테우스 연동 확인
프로메테우스 메뉴→Status→Configuration에 들어가서prometheus.yml에 입력한 부분이 추가되어 있는지 확인해보자.http://localhost:9090/config
프로메테우스 메뉴→Status→Targets에 들어가서 연동이 잘 되었는지 확인하자.프로메테우스 연동 확인 화면
prometheus: 프로메테우스 자체에서 제공하는 메트릭 정보이다. (프로메테우스가 프로메테우스 자신의 메트릭을 확인하는 것이다.)spring-actuator: 우리가 연동한 애플리케이션의 메트릭 정보이다.State가UP으로 되어 있으면 정상이고, DOWN 으로 되어 있으면 연동이 안된 것이다.프로메테우스를 통한 데이터 조회 예제
프로메테우스를 통해서 연동한 메트릭을 간단히 조회해보자.
jvm_info를 검색창에 넣고 실행해보면 우리 애플리케이션으로부터 수집한 메트릭을 끌고올 수 있다.(4) 프로메테우스 - 기본 기능 (PromQL 활용)
💡PromQL (Prometheus Query Language): Prometheus에서 수집한 시계열 데이터(time-series data)를 조회하고 분석하기 위한 쿼리 언어로 이 언어는 데이터 집계, 필터링, 시간 범위 설정 등을 통해, 사용자가 모니터링 시스템에서 중요한 정보를 추출할 수 있도록 해준다.PromQL은 메트릭 이름, 라벨, 연산자 등을 사용하여 데이터를 쿼리하고, 합계(sum), 평균(avg), 변화율(rate) 등 다양한 집계 함수와 연산을 지원한다.
이번에는 프로메테우스를 사용하는데 필요한 간단한 기능들을 알아보자.
검색창에 실행 결과
http_server_requests_seconds_count를 입력하고 실행해보자.실행 결과
error,exception,instance,job,method,outcome,status,uri는 각각의 메트릭 정보를 구분해서 사용하기 위한 태그이다. 마이크로미터에서는 이것을 태그(Tag)라 하고, 프로메테우스에서는 레이블(Label)이라 한다. 여기서는 둘을 구분하지 않고 사용하겠다.132,4와 같은 숫자가 보인다. 이 숫자가 바로 해당 메트릭의 값이다.Table→Evaluation time을 수정해서 과거 시간 조회 가능Graph→ 메트릭을 그래프로 조회 가능레이블을 기준으로 필터를 사용할 수 있다. 필터는 중괄호
{}문법을 사용한다.레이블 일치 연산자
=: 제공된 문자열과 정확히 동일한 레이블 선택!=: 제공된 문자열과 같지 않은 레이블 선택=~: 제공된 문자열과 정규식 일치하는 레이블 선택!~: 제공된 문자열과 정규식 일치하지 않는 레이블 선택예)
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)결과
{method="GET", status="404"} 3 {method="GET", status="200"} 120count: 메트릭 자체의 수 카운트count(http_server_requests_seconds_count)topk: 상위 3개 메트릭 조회topk(3, http_server_requests_seconds_count)오프셋 수정자
http_server_requests_seconds_count offset 10m범위 벡터 선택기
http_server_requests_seconds_count[1m]Beta Was this translation helpful? Give feedback.
All reactions