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
실제 우리가 작성한 어플리케이션에 직접 문제가 발생시킨 다음에 그라파나를 통해서 문제를 어떻게 모니터링할 수 있는지 확인해보자. 실무에서 주로 많이 발생하는 다음 5가지 대표적인 예시가 있다.
CPU 사용량 초과
JVM 메모리 사용량 초과
커넥션 풀 고갈
에러 로그 급증
CPU 사용량 초과
CPU에 부하를 주는 코드를 작성한다
@Slf4j@RestControllerpublicclassTrafficCountoller {
@GetMapping("/cpu) public String cpu() { log.info("cpu"); long value = 0; for (long i = 0; i < 10000000000L; i++) { value++; } return "okvalue=" + value;
}
}
JVM 메모리 사용량
privateList<String> list = newArrayList<>();
@GetMapping("/jvm) public String jvm() { log.info("jvm"); long value = 0; for (long i = 0; i < 10000000000L; i++) { list.add("hellojvm!" + i); } return "okvalue=" + value;
}
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.
-
그라파나 - 메트릭을 통한 문제 확인
어플리케이션에 문제가 발생했을 때 그라파나를 통해서 어떻게 모니터링하는지 확인해보자.
실제 우리가 작성한 어플리케이션에 직접 문제가 발생시킨 다음에 그라파나를 통해서 문제를 어떻게 모니터링할 수 있는지 확인해보자. 실무에서 주로 많이 발생하는 다음 5가지 대표적인 예시가 있다.
CPU 사용량 초과
CPU에 부하를 주는 코드를 작성한다
JVM 메모리 사용량
JDBC 커넥션
에러 로그 급증
11. 모니터링 메트릭 활용
이전에처럼 CPU사용량, 메모리 사용량, 톰캣 쓰레드, DB 커넥션 풀과 같이 공통으로 사용되는 기술 메트릭은 이미 등록되어 있다. 이런 등록된 메트릭을 사용해서 대시보드를 구성하고 모니터링 할 수 있다.
비즈니스에 특화된 부분을 모니터링하고 싶다면 직접 메트릭을 등록하고 확인해야한다.
주문, 취소, 재고 수량을 확이할 수 있는 주문 서비스 인터페이스
메트릭 등록 - 카운터
마이크로미터를 사용해서 메트릭을 직접 등록하도록 한다.
MeterRegistry
마이크로미터 기능을 제공하는 핵심 컴포넌트
스프링을 통해서 주입 받아서 사용하고, 이곳을 통해서 카운터, 게이지 등을 등록함
Counter
https://prometheus.io/docs/concepts/metric_types/#counter
단조롭게 증가하는 단일 누적 측정 항목
단일 값
보통 하나씩 증가
누적이므로 전체 값을 포함(total)
프로메테우스에서는 일바넉으로 카운터 이름 마지막에 _total 을 붙여서 my_order_total과 같이 표현함
값을 증가하거나 0으로 초기화 하는 것만 가능
마이크로미터에서 값을 감소하는 기능도 지원하지만, 목적에 맞지 않음
ie. HTTP 요청수
Counter.builder(name)을 통해서 카운터를 생성한다. name에는 메트릭 이름을 지정함
tag는 프로메테우스에서 필터할 수 있는 레이블로 사용됨
주문과 취소는 메트릭 이름은 같고 tag를 통해서 구분하도록 함
register(registry) 만든 카운터를 MeterRegistry에 등록함
increment() 카운터의 값을 하나 증가한다
http://localhost:8080/actuator/prometheus
메트릭 이름이 my.order → my_order_total로 변경된 것을 확인할 수 있음
프로메테우스는 . 를 _로 변경함
카운터는 마지막에 _total을 붙임. 프로메테우스는 관례상 카운터 이름의 끝에 _total을 붙임
method라는 tag 레이블을 기준으로 데이터가 분류되어 있음
메트릭 등록 - @counter
앞서 만든 OrderServiceV1의 가장 큰 단점은 케트릭을 관리하는 로직이 핵심 비즈니스 개발 로직에 침투했다는 점이다. 이런 부분을 분리하려면 스프링 AOP를 사용함
직접 필요한 AOP를 만들어서 적용해도 되지만, 마이크로미터는 이런 상황에 맞추어 필요한 AOP 구성요소를 이미 다 만들어둠
@counted 어노테이션을 측정을 원하는 메소드에 적용한다.
메트릭 이름을 지정하여 my.order를 적용함
이렇게 사용하면 tag에 method를 기준으로 분류해서 적용함
CountedAspect를 등록하면 @counted 를 인지해서 Counter를 사용하는 AOP를 적용함
주의! CountedAspect를 빈으로 등록하지 않으면 @counted 관련 AOP가 동작하지 않음
Beta Was this translation helpful? Give feedback.
All reactions