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 my_order_seconds order
# TYPE my_order_seconds summary
my_order_seconds_count{class="hello.order.v3.OrderServiceV3",method="order",} 3.0
my_order_seconds_sum{class="hello.order.v3.OrderServiceV3",method="order",} 1.518434959
my_order_seconds_count{class="hello.order.v3.OrderServiceV3",method="cancel",} 2.0
my_order_seconds_sum{class="hello.order.v3.OrderServiceV3",method="cancel",} 0.410640083
# HELP my_order_seconds_max order
# TYPE my_order_seconds_max gauge
my_order_seconds_max{class="hello.order.v3.OrderServiceV3",method="order",} 0.509926375
my_order_seconds_max{class="hello.order.v3.OrderServiceV3",method="cancel",} 0.20532925
프로메테우스로 다음 접두사가 붙으면서 3가지 메트릭을 제공한다.
seconds_count : 누적 실행 수
seconds_sum : 실행 시간의 합
seconds_max : 최대 실행 시간(가장 오래걸린 실행 시간), 프로메테우스 gague
참고: 내부에 타임 윈도우라는 개념이 있어서 1~3분 마다 최대 실행 시간이 다시 계산된다.
여기서 평균 실행 시간도 계산할 수 있다.
- seconds_sum / seconds_count = 평균 실행시간
그라파나 등록 - 주문수 v3
앞서 만들어둔 hello-dashboard 에 주문수, 취소수 그래프를 추가하자
OrderConfigV4 @import({OrderConfigV4.class, StockConfigV1.class}) 로 변경한다.
애플리케이션을 실행하면 stock gauge call 로그가 주기적으로 남는 것을 확인할 수 있다.
게이지를 확인하는 함수는 외부에서 메트릭을 확인할 때 호출 된다. 현재 프로메테우스가 다음 경로를 통해 주기적으로 메트릭을 확인하기 때문이다. http://localhost:8080/actuator/prometheus
프로메테우스를 종료해보면 해당 함수가 호출되지 않는 것을 확인할 수 있다. 물론 메트릭 확인 경로를 직접 호출하면 해당 함수가 호출된다.
카운터와 다르게 게이지는 무언가를 누적할 필요도 없고, 딱 현재 시점의 값을 보여주면 된다. 따라서 측정 시점에 현재 값을 반환한다.
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.
Uh oh!
There was an error while loading. Please reload this page.
-
4. 메트릭 등록3 - Timer
Timer
Timer는 좀 특별한 메트릭 측정 도구인데, 시간을 측정하는데 사용된다.
OrderServiceV3
걸리는 시간을 확인하기 위해 주문은 0.5초, 취소는 0.2초 대기하도록 했다. 추가로 가장 오래 걸린 시간을 확인하기 위해 sleep() 에서 최대 0.2초를 랜덤하게 더 추가했다. (모두 0.5초로 같으면 가장 오래 걸린 시간을 확인하기 어렵다.)
OrderConfigV3
ActuatorApplication - 변경
실행
http://localhost:8080/order
http://localhost:8080/cancel
주문과 취소를 각각 한번씩 실행한 다음에 메트릭을 확인해보자.
액츄에이터 메트릭 확인
http://localhost:8080/actuator/metrics/my.order
{ "name": "my.order", "description": "order", "baseUnit": "seconds", "measurements": [ { "statistic": "COUNT", "value": 5 }, { "statistic": "TOTAL_TIME", "value": 1.929075042 }, { "statistic": "MAX", "value": 0.509926375 } ], "availableTags": [ { "tag": "method", "values": [ "cancel", "order" ] }, { "tag": "class", "values": [ "hello.order.v3.OrderServiceV3" ] } ] }타이머를 사용하면 총 3가지 측정 항목이 생기는 것을 확인할 수 있다.
프로메테우스 포멧 메트릭 확인
http://localhost:8080/actuator/prometheus
프로메테우스로 다음 접두사가 붙으면서 3가지 메트릭을 제공한다.
여기서 평균 실행 시간도 계산할 수 있다.
- seconds_sum / seconds_count = 평균 실행시간
그라파나 등록 - 주문수 v3
앞서 만들어둔 hello-dashboard 에 주문수, 취소수 그래프를 추가하자
패널 옵션
PromQL
참고: 카운터는 계속 증가하기 때문에 특정 시간에 얼마나 증가했는지 확인하려면 increase() , rate() 같은 함수와 함께 사용하는 것이 좋다.
그라파나 등록 - 최대 실행시간
패널 옵션
PromQL
그라파나 등록 - 평균 실행시간
패널 옵션
PromQL
5. 메트릭 등록4 - @timed
타이머는 @timed 라는 애노테이션을 통해 AOP를 적용할 수 있다.
OrderServiceV4
OrderConfigV4
ActuatorApplication - 변경
실행
http://localhost:8080/order
http://localhost:8080/cancel
주문과 취소를 각각 한번씩 실행한 다음에 메트릭을 확인해보자.
액츄에이터 메트릭 확인
http://localhost:8080/actuator/metrics/my.order
{ "name": "my.order", "baseUnit": "seconds", "measurements": [ { "statistic": "COUNT", "value": 2 }, { "statistic": "TOTAL_TIME", "value": 0.969096792 }, { "statistic": "MAX", "value": 0.685785584 } ], "availableTags": [ { "tag": "exception", "values": [ "none" ] }, { "tag": "method", "values": [ "cancel", "order" ] }, { "tag": "class", "values": [ "hello.order.v4.OrderServiceV4" ] } ] }tag 중에 exception 이 추가 되는 부분을 제외하면 기존과 같다.
타이머를 사용하면 총 3가지 측정 항목이 생기는 것을 확인할 수 있다.
프로메테우스 포멧 메트릭 확인
http://localhost:8080/actuator/prometheus
생성되는 프로메테우스 포멧도 기존과 같다.
그라파나 대시보드 확인
메트릭 이름과 tag 가 기존과 같으므로 같은 대시보드에서 확인할 수 있다.
6. 메트릭 등록5 - 게이지
Gauge(게이지)
참고: 카운터와 게이지를 구분할 때는 값이 감소할 수 있는가를 고민해보면 도움이 된다.
이번에는 재고 수량을 통해 게이지를 등록하는 방법을 알아보자
가장 단순한 방법은 다음과 같이 등록하는 것이다.
StockConfigV1
my.stock 이라는 이름으로 게이지를 등록했다.
게이지를 만들 때 함수를 전달했는데, 이 함수는 외부에서 메트릭을 확인할 때 마다 호출된다. 이 함수의 반환 값이 게이지의 값이다.
ActuatorApplication - 변경
애플리케이션을 실행하면 stock gauge call 로그가 주기적으로 남는 것을 확인할 수 있다.
게이지를 확인하는 함수는 외부에서 메트릭을 확인할 때 호출 된다. 현재 프로메테우스가 다음 경로를 통해 주기적으로 메트릭을 확인하기 때문이다.
http://localhost:8080/actuator/prometheus
프로메테우스를 종료해보면 해당 함수가 호출되지 않는 것을 확인할 수 있다. 물론 메트릭 확인 경로를 직접 호출하면 해당 함수가 호출된다.
카운터와 다르게 게이지는 무언가를 누적할 필요도 없고, 딱 현재 시점의 값을 보여주면 된다. 따라서 측정 시점에 현재 값을 반환한다.
액츄에이터 메트릭 확인
http://localhost:8080/actuator/metrics/my.stock
{ "name": "my.stock", "measurements": [ { "statistic": "VALUE", "value": 100 } ], "availableTags": [] }게이지는 현재 값을 그대로 보여주면 되므로 단순하다.
프로메테우스 포멧 메트릭 확인
http://localhost:8080/actuator/prometheus
그라파나 등록 - 재고
패널 옵션
PromQL
게이지 단순하게 등록하기
StockConfigV2
MeterBinder 타입을 바로 반환해도 된다.
ActuatorApplication - 변경
StockConfigV1 @import({OrderConfigV4.class, StockConfigV2.class}) 로 변경한다.
7. 정리
Micrometer 사용법 이해
메트릭은 100% 정확한 숫자를 보는데 사용하는 것이 아니다. 약간의 오차를 감안하고 실시간으로 대략의 데이터를 보는 목적으로 사용한다.
마이크로미터 핵심 기능
Counter, Gauge, Timer, Tags
MeterRegistry
마이크로미터 기능을 제공하는 핵심 컴포넌트
스프링을 통해서 주입 받아서 사용하고, 이곳을 통해서 카운터, 게이지 등을 등록한다.
Counter(카운터)
Gauge(게이지)
참고: 카운터와 게이지를 구분할 때는 값이 감소할 수 있는가를 고민해보면 도움이 된다.
Timer
Timer는 좀 특별한 메트릭 측정 도구인데, 시간을 측정하는데 사용된다.
Tag, 레이블
8. 실무 모니터링 환경 구성 팁
모니터링 3단계
대시보드
전체를 한눈에 볼 수 있는 가장 높은 뷰
제품
마이크로미터, 프로메테우스, 그라파나 등등
모니터링 대상
시스템 메트릭(CPU, 메모리)
애플리케이션 메트릭(톰캣 쓰레드 풀, DB 커넥션 풀, 애플리케이션 호출 수)
비즈니스 메트릭(주문수, 취소수)
애플리케이션 추적
주로 각각의 HTTP 요청을 추적, 일부는 마이크로서비스 환경에서 분산 추적
제품
핀포인트(오픈소스), 스카우트(오픈소스), 와탭(상용), 제니퍼(상용)
로그
가장 자세한 추적, 원하는데로 커스텀 가능
같은 HTTP 요청을 묶어서 확인할 수 있는 방법이 중요, MDC 적용
파일로 직접 로그를 남기는 경우
일반 로그와 에러 로그는 파일을 구분해서 남기자
에러 로그만 확인해서 문제를 바로 정리할 수 있음
클라우드에 로그를 저장하는 경우
검색이 잘 되도록 구분
모니터링 정리
각각 용도가 다르다.
관찰을 할 때는 전체 -> 점점 좁게
핀포인트는 정말 좋다. 강추 마이크로 서비스 분산 모니터링도 가능, 대용량 트래픽에 대응
알람
모니터링 툴에서 일정 이상 수치가 넘어가면, 슬랙, 문자 등을 연동
알람은 2가지 종류로 꼭 구분해서 관리
경고, 심각
경고는 하루 1번 정도 사람이 직접 확인해도 되는 수준(사람이 들어가서 확인)
심각은 즉시 확인해야 함, 슬랙 알림(앱을 통해 알림을 받도록), 문자, 전화
예)
경고와 심각을 잘 나누어서 업무와 삶에 방해가 되지 않도록 해야함
거짓(False) 알람은 바로바로 처리 - 늑대가 나타났다
Beta Was this translation helpful? Give feedback.
All reactions