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
앞서 보았듯이 CPU 사용량, 메모리 사용량, 톰캣 쓰레드, DB 커넥션 풀과 같이 공통으로 사용되는 기술 메트릭은 이미 등록되어 있다. 우리는 이런 이미 등록된 메트릭을 사용해서 대시보드를 구성하고 모니터링 하면 된다.
여기서 더 나아가서 비즈니스에 특화된 부분을 모니터링 하고 싶으면 어떻게 해야할까? 예를 들어서 주문수, 취소수, 재고 수량 같은 메트릭 들이 있다. 이 부분은 공통으로 만들 수 있는 부분은 아니고, 각각의 비즈니스에 특화된 부분들이다.
이런 메트릭들도 시스템을 운영하는데 상당히 도움이 된다. 예를 들어서 취소수가 갑자기 급증하거나 재고 수량이 임계치 이상으로 쌓이는 부분들은 기술적인 메트릭으로 확인할 수 없는 우리 시스템의 비즈니스 문제를 빠르게 파악하는데 도움을 준다.
예를 들어서 택배회사에 문제가 생겨서 고객들이 많이 기다리다가 지쳐서 취소수가 증가해도 CPU, 메모리 사용량 같은 시스템 메트릭에는 아무런 문제가 발생하지 않는다. 이럴 때 비즈니스 메트릭이 있으면 이런 문제를 빠르게 인지할 수 있다.
비즈니스에 관한 부분은 각 비즈니스 마다 구현이 다르다. 따라서 비즈니스 메트릭은 직접 등록하고 확인해야 한다.
여기서는 우리 비즈니스의 실시간 주문수, 취소수 또 실시간 재고 수량을 메트릭으로 등록하고 확인해보자.
# HELP my_order_total order
# TYPE my_order_total counter
my_order_total{class="hello.order.v1.OrderServiceV1",method="order",} 1.0
my_order_total{class="hello.order.v1.OrderServiceV1",method="cancel",} 1.0
메트릭 이름이 my.order my_order_total 로 변경된 것을 확인할 수 있다.
프로메테우스는 . _ 로 변경한다.
카운터는 마지막에 _total 을 붙인다. 프로메테우스는 관례상 카운터 이름의 끝에 _total 을 붙인다.
method 라는 tag , 레이블을 기준으로 데이터가 분류되어 있다.
그라파나 등록 - 주문수, 취소수
앞서 만들어둔 hello-dashboard 에 주문수, 취소수 그래프를 추가하자
Panel options
Title : 주문수
PromQL
increase(my_order_total{method="order"}[1m])
Legend : {{method}}
increase(my_order_total{method="cancel"}[1m])
Legend : {{method}}
참고: 카운터는 계속 증가하기 때문에 특정 시간에 얼마나 증가했는지 확인하려면 increase() , rate() 같은 함수와 함께 사용하는 것이 좋다.
앞서 만든 OrderServiceV1 의 가장 큰 단점은 메트릭을 관리하는 로직이 핵심 비즈니스 개발 로직에 침투했다는 점이다. 이런 부분을 분리하려면 어떻게 해야할까? 바로 스프링 AOP를 사용하면 된다.
직접 필요한 AOP를 만들어서 적용해도 되지만, 마이크로미터는 이런 상황에 맞추어 필요한 AOP 구성요소를 이미 다 만들어두었다.
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.
-
1. 메트릭 등록 - 예제 만들기
앞서 보았듯이 CPU 사용량, 메모리 사용량, 톰캣 쓰레드, DB 커넥션 풀과 같이 공통으로 사용되는 기술 메트릭은 이미 등록되어 있다. 우리는 이런 이미 등록된 메트릭을 사용해서 대시보드를 구성하고 모니터링 하면 된다.
여기서 더 나아가서 비즈니스에 특화된 부분을 모니터링 하고 싶으면 어떻게 해야할까? 예를 들어서 주문수, 취소수, 재고 수량 같은 메트릭 들이 있다. 이 부분은 공통으로 만들 수 있는 부분은 아니고, 각각의 비즈니스에 특화된 부분들이다.
이런 메트릭들도 시스템을 운영하는데 상당히 도움이 된다. 예를 들어서 취소수가 갑자기 급증하거나 재고 수량이 임계치 이상으로 쌓이는 부분들은 기술적인 메트릭으로 확인할 수 없는 우리 시스템의 비즈니스 문제를 빠르게 파악하는데 도움을 준다.
예를 들어서 택배회사에 문제가 생겨서 고객들이 많이 기다리다가 지쳐서 취소수가 증가해도 CPU, 메모리 사용량 같은 시스템 메트릭에는 아무런 문제가 발생하지 않는다. 이럴 때 비즈니스 메트릭이 있으면 이런 문제를 빠르게 인지할 수 있다.
비즈니스에 관한 부분은 각 비즈니스 마다 구현이 다르다. 따라서 비즈니스 메트릭은 직접 등록하고 확인해야 한다.
여기서는 우리 비즈니스의 실시간 주문수, 취소수 또 실시간 재고 수량을 메트릭으로 등록하고 확인해보자.
각각의 메트릭은 다음과 같이 정의했다.
주문수, 취소수
재고 수량
actuator 프로젝트에 코드를 추가하자.
OrderService
주문, 취소, 재고 수량을 확인할 수 있는 주문 서비스 인터페이스이다.
OrderServiceV0
OrderConfigV0
앞서 만든 OrderService 빈을 직접 등록하는 설정이다.
OrderController
주문, 취소, 재고 수량을 확인하는 컨트롤러이다.
참고: 예제의 단순함을 위해서 GET 을 사용했습니다.
ActuatorApplication
실행
http://localhost:8080/order
http://localhost:8080/cancel
http://localhost:8080/stock
2. 메트릭 등록1 - 카운터
마이크로미터를 사용해서 메트릭을 직접 등록하는 방법을 알아보자. 먼저 주문수, 취소수를 대상으로 카운터 메트릭을 등록해보자.
MeterRegistry
마이크로미터 기능을 제공하는 핵심 컴포넌트
스프링을 통해서 주입 받아서 사용하고, 이곳을 통해서 카운터, 게이지 등을 등록한다.
Counter(카운터)
주문수 취소수 서비스에 카운터 메트릭을 적용해보자.
OrderServiceV1
정리하면 각각의 메서드를 하나 호출할 때 마다 카운터가 증가한다.
OrderConfigV1
ActuatorApplication - 수정
실행
http://localhost:8080/order
http://localhost:8080/cancel
주문과 취소를 각각 한번씩 실행한 다음에 메트릭을 확인해보자.
(각각 실행해야 메트릭이 등록된다.)
액츄에이터 메트릭 확인
http://localhost:8080/actuator/metrics/my.order
{ "name": "my.order", "description": "order", "measurements": [ { "statistic": "COUNT", "value": 2 } ], "availableTags": [ { "tag": "method", "values": [ "cancel", "order" ] }, { "tag": "class", "values": [ "hello.order.v1.OrderServiceV1" ] } ] }프로메테우스 포멧 메트릭 확인
http://localhost:8080/actuator/prometheus
그라파나 등록 - 주문수, 취소수
앞서 만들어둔 hello-dashboard 에 주문수, 취소수 그래프를 추가하자
Panel options
PromQL
참고: 카운터는 계속 증가하기 때문에 특정 시간에 얼마나 증가했는지 확인하려면 increase() , rate() 같은 함수와 함께 사용하는 것이 좋다.
그림
3. 메트릭 등록2 - @counted
앞서 만든 OrderServiceV1 의 가장 큰 단점은 메트릭을 관리하는 로직이 핵심 비즈니스 개발 로직에 침투했다는 점이다. 이런 부분을 분리하려면 어떻게 해야할까? 바로 스프링 AOP를 사용하면 된다.
직접 필요한 AOP를 만들어서 적용해도 되지만, 마이크로미터는 이런 상황에 맞추어 필요한 AOP 구성요소를 이미 다 만들어두었다.
OrderServiceV2
OrderConfigV2
ActuatorApplication - 변경
실행
http://localhost:8080/order
http://localhost:8080/cancel
액츄에이터 메트릭 확인
http://localhost:8080/actuator/metrics/my.order
{ "name": "my.order", "measurements": [ { "statistic": "COUNT", "value": 5 } ], "availableTags": [ { "tag": "result", "values": [ "success" ] }, { "tag": "exception", "values": [ "none" ] }, { "tag": "method", "values": [ "cancel", "order" ] }, { "tag": "class", "values": [ "hello.order.v2.OrderServiceV2" ] } ] }프로메테우스 포멧 메트릭 확인
http://localhost:8080/actuator/prometheus
그라파나 대시보드 확인
메트릭 이름과 tag 가 기존과 같으므로 같은 대시보드에서 확인할 수 있다.
Beta Was this translation helpful? Give feedback.
All reactions