커스텀 메트릭을 사용하는 이유
예제로 재고 관리 코드 작성

OrderService 구현체 작성

OrderService 구현체 빈 등록

OrderController 에서 OrderService 사용하도록 작성
마이크로미터를 사용해 메트릭 등록
MeterRegistry
카운터
_total을 붙여서 my_order_total과 같이 표현카운터 메트릭 생성 코드

각종 정보가 들어간 Counter 메트릭 생성하고 increment()를 통해 증가

my.order 메트릭 조회

프로메테우스 메트릭 조회

프로메테우스 메트릭 그라파나 적용
Counter.builder(name)를 통해서 카운터 생성 name은 메트릭 이름registry(registry) 를 통해 카운터를 MeterRegistry에 등록increment() 카운터의 값을 증가시킴http://localhost:8080/actuator/metrics/{name}으로 조회http://localhost:8080/actuator/prometheus 에서 프로메테우스 타입으로 조회된느데 . 대신 _ 가 사용되고 counter 메트릭이므로 _total이 붙음increase()를 통해 증가 수치를 나타내도록함@Counted를 이용한 간단한 메트릭 등록

적용 코드 예시 그냥 @Counted 어노테이션만 사용

AOP를 적용하기 위한 Bean 등록

my.order 메트릭 조회(커스텀 메트릭보다 다양한 tag 기본 제공)

프로메테우스 메트
@Counted 어노테이션을 워하는 메서드에서 적용하며, 애트리뷰트로 메트릭 이름 작성해주면됨(tag를 method 기준으로 분리해줌)타이머 메트릭
타이머는 시간을 측정해주는 메트릭
카운터와 유사하지만, 실행 시간이 함께 측정됨
3가지 내용을 한번에 측정
seconds_count: 누적 실행 수(카운터)seconds_sum: 실행 시간 합(sum)seconds_max: 최대 실행 시간(가장 오래 걸린 실행 시간 → 게이지)seconds_max의 경우 내부에 타임 윈도우 개념이 있어서 1~3분마다 최대 실행 시간 갱신seconds_sum / seconds_count 를 통해 평균 실행시간을 구할수도 있음커스텀 타이머 메트릭

주의할 점은 cancel메서드 전체가 측정되는 것이 아닌 record 부분만 측정, 다양한 값을 측정하기 위해 random으로 스레드 sleep

3가지 부분을 측정하는 Timer 메트릭스

프로메테우스 메트릭스도 3가지

평균 실행 시간 패널이며 increase를 통해 구간별로 확인할 수 있도록 함(취향)
@Timed를 통한 메트릭 등록

@Timed어노테이션 클래스 레벨 작성(모든 메서드에 적용되므로 getStock()에도 적용

AOP적용을 위한 TImedAspect 빈 작성(MeterRegistry 객체 필수)
@Counted와는 달리 메서드, 클래스 둘 다 적용 가능한 어노테이션@Counted와 마찬가지로 AOP 적용을 위해 TimedAspect 빈을 작성해야함게이지 메트릭 등록
게이지
게이지 메트릭 작성

처음에 게이지를 생성해주고 넘겨준 객체, 함수를 이용해서 현재 값을 가져오는 방식

게이지 메트릭 코드 단순화할 수 있는 방식
정 리