아무거나

[Spring Actuator] Example 5편 - Gauge 본문

Java & Kotlin/Spring

[Spring Actuator] Example 5편 - Gauge

전봉근 2023. 11. 27. 14:48
반응형

이전글: https://bkjeon1614.tistory.com/784

 

  •  Gauge
    • Counter 타입인 경우 increment 메서드만 제공되지 decrement 메서드가 존재하지 않는다. 그러므로 커졌다 작아졌다 하는 값으로는 Gauge 를 사용하면 된다.
    • 또한 Counter 는 counter 값을 조회시도 하는지 여부와 무관하게 값이 증가될 때마다 내부값 갱신을 해줘야한다. 그러나 Gauge 는 조회시도 할 때만 해당 값을 계산하면 된다.
    • 샘플코드
      • 기본등록 [QueueManager.java]
        package com.example.bkjeon.base.services.api.v1.actuator.service.gauge;
        
        import org.springframework.stereotype.Service;
        
        @Service
        public class QueueManager {
        
            public long getQueueSize() {
                return System.currentTimeMillis();
            }
        
        }    
        
        [GaugeConfig.java]
        package com.example.bkjeon.base.actuator.gauge;
        
        import com.example.bkjeon.base.services.api.v1.actuator.service.gauge.QueueManager;
        import io.micrometer.core.instrument.Gauge;
        import io.micrometer.core.instrument.MeterRegistry;
        import javax.annotation.PostConstruct;
        import lombok.RequiredArgsConstructor;
        import org.springframework.context.annotation.Configuration;
        
        @Configuration
        @RequiredArgsConstructor
        public class GaugeConfig {
        
            private final QueueManager queueManager;
            private final MeterRegistry meterRegistry;
        
            @PostConstruct
            public void register() {
                Gauge.builder("my.queue.size", queueManager, QueueManager::getQueueSize)
                    .register(meterRegistry);
            }
        
        }
        
      • MeterBinder 를 통한 등록 (상기 내용에 이미 GaugeConfig 에 선언한 내용이 있으므로 @Configuration 을 주석처리 후 진행)
        [GaugeConfigWithMeterBinder.java]
        package com.example.bkjeon.base.actuator.gauge;
        
        import com.example.bkjeon.base.services.api.v1.actuator.service.gauge.QueueManager;
        import io.micrometer.core.instrument.Gauge;
        import io.micrometer.core.instrument.binder.MeterBinder;
        import org.springframework.context.annotation.Bean;
        import org.springframework.context.annotation.Configuration;
        
        @Configuration
        public class GaugeConfigWithMeterBinder {
        
            private static final String METRIC_NAME = "my.queue.size";
        
            @Bean
            public MeterBinder gaugeMeterBinder(QueueManager queueManager) {
                return registry -> Gauge.builder(METRIC_NAME, queueManager, QueueManager::increment)
                    .register(registry);
            }
        
        }
        
        [QueueManager.java]
        package com.example.bkjeon.base.services.api.v1.actuator.service.gauge;
        
        import java.util.concurrent.atomic.AtomicLong;
        import org.springframework.stereotype.Service;
        
        @Service
        public class QueueManager {
        
            private final AtomicLong count = new AtomicLong(0);
        
            public long getQueueSize() {
                return System.currentTimeMillis();
            }
        
            public long increment() {
                return count.incrementAndGet();
            }
        
            public long decrement() {
                return count.decrementAndGet();
            }
        
        }
        

참고

  • https://semtul79.tistory.com/
  • https://docs.spring.io/
  • https://www.inflearn.com/course/spring-boot-actuator-%ED%8C%8C%ED%97%A4%EC%B9%98%EA%B8%B0/dashboard
반응형
Comments