๊ฒŒ์ด์ง€ ๋“ฑ๋ก ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง (์Šคํ”„๋ง, ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค, ๊ทธ๋ผํŒŒ๋‚˜)

2023. 5. 22. 16:50ใ†์ธํ”„๋Ÿฐ/์Šคํ”„๋ง ๋ถ€ํŠธ - ํ•ต์‹ฌ ์›๋ฆฌ์™€ ํ™œ์šฉ

728x90

 

์นด์šดํ„ฐ ๋ฉ”ํŠธ๋ฆญ ๋“ฑ๋ก ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง (์Šคํ”„๋ง, ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค, ๊ทธ๋ผํŒŒ๋‚˜) (tistory.com)

 

์นด์šดํ„ฐ ๋ฉ”ํŠธ๋ฆญ ๋“ฑ๋ก ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง (์Šคํ”„๋ง, ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค, ๊ทธ๋ผํŒŒ๋‚˜)

์Šคํ”„๋ง & ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค & ๊ทธ๋ผํŒŒ๋‚˜ (๊ทธ๋ผํŒŒ๋‚˜ ์„ค์น˜, ์—ฐ๋™, ์‚ฌ์šฉ ๋ฐฉ๋ฒ•) (tistory.com) ์Šคํ”„๋ง & ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค & ๊ทธ๋ผํŒŒ๋‚˜ (๊ทธ๋ผํŒŒ๋‚˜ ์„ค์น˜, ์—ฐ๋™, ์‚ฌ์šฉ ๋ฐฉ๋ฒ•) ์Šคํ”„๋ง & ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค (์„ค์น˜, ์„ค์ •, ๊ธฐ๋ณธ ๊ธฐ

hyejin.tistory.com

 

Timer ๋ฉ”ํŠธ๋ฆญ ๋“ฑ๋ก ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง (์Šคํ”„๋ง, ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค, ๊ทธ๋ผํŒŒ๋‚˜) (tistory.com)

 

Timer ๋ฉ”ํŠธ๋ฆญ ๋“ฑ๋ก ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง (์Šคํ”„๋ง, ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค, ๊ทธ๋ผํŒŒ๋‚˜)

์นด์šดํ„ฐ ๋ฉ”ํŠธ๋ฆญ ๋“ฑ๋ก ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง (์Šคํ”„๋ง, ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค, ๊ทธ๋ผํŒŒ๋‚˜) (tistory.com) ์นด์šดํ„ฐ ๋ฉ”ํŠธ๋ฆญ ๋“ฑ๋ก ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง (์Šคํ”„๋ง, ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค, ๊ทธ๋ผํŒŒ๋‚˜) ์Šคํ”„๋ง & ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค & ๊ทธ๋ผํŒŒ๋‚˜ (๊ทธ๋ผํŒŒ๋‚˜

hyejin.tistory.com

 

์œ„์— ๋‘ ๊ธ€์—์„œ๋Š” ์นด์šดํ„ฐ ๊ฐ’์— ๋Œ€ํ•ด์„œ ์ง์ ‘ ๋ฉ”ํŠธ๋ฆญ์„ ๋“ฑ๋กํ•ด์„œ ๊ทธ๋ผํŒŒ๋‚˜ ๋Œ€์‹œ๋ณด๋“œ์— ๋‚˜ํƒ€๋ƒˆ์—ˆ๋‹ค. 

์ด๋ฒˆ์—๋Š” ๊ฒŒ์ด์ง€๋ฅผ ๋“ฑ๋กํ•ด์„œ ํ™•์ธํ•ด๋ณผ ๊ฒƒ์ด๋‹ค. ๐Ÿ™†‍โ™€๏ธ

 

 

1๏ธโƒฃ ๋ฉ”ํŠธ๋ฆญ ๋“ฑ๋ก 5 - ๊ฒŒ์ด์ง€ 

Gauge ๊ฒŒ์ด์ง€ 

: ๊ฒŒ์ด์ง€๋Š” ์ž„์˜๋กœ ์˜ค๋ฅด๋‚ด๋ฆด ์ˆ˜ ์žˆ๋Š” ๋‹จ์ผ ์ˆซ์ž ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฉ”ํŠธ๋ฆญ์œผ๋กœ ๊ฐ’์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋ณด๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. 

-> ๋”ฐ๋ผ์„œ ๊ฐ’์ด ์ฆ๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ฐ์†Œํ•  ์ˆ˜ ์žˆ๋‹ค. 

ex) ์ฐจ๋Ÿ‰์˜ ์†๋„, CPU ์‚ฌ์šฉ๋Ÿ‰, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ 

 

๐Ÿ‘ฉ‍๐Ÿ’ป ์ฐธ๊ณ : ๊ฒŒ์ด์ง€์™€ ์นด์šดํ„ฐ๊ฐ€ ํ—ท๊ฐˆ๋ฆฐ๋‹ค๋ฉด ๊ฐ’์ด ๊ฐ์†Œํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋œ๋‹ค. 

 

StockConfigV1

@Configuration
public class StockConfigV1
{
   
   @Bean
   public MyStockMetric myStockMetric(OrderService orderService, MeterRegistry meterRegistry)
   {
      return new MyStockMetric(orderService, meterRegistry);
   }
   
   @Slf4j
   static class MyStockMetric
   {
      private OrderService orderService;
      
      private MeterRegistry meterRegistry;
      
      public MyStockMetric(OrderService orderService, MeterRegistry meterRegistry)
      {
         this.orderService = orderService;
         this.meterRegistry = meterRegistry;
      }
      
      @PostConstruct
      public void init()
      {
         Gauge.builder("my.stock", orderService, service -> {
            log.info("stock gague call");
            return service.getStock().get();
         }).register(meterRegistry);
      }
   }
}

 my.stock์ด๋ผ๋Š” ๊ฒŒ์ด์ง€๋ฅผ ๋“ฑ๋กํ•˜๋Š”๋ฐ, ์ด๋•Œ ํ•จ์ˆ˜๋ฅผ ํ•จ๊ป˜ ์ „๋‹ฌํ•œ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ์™ธ๋ถ€์—์„œ ๋ฉ”ํŠธ๋ฆญ์„ ํ™•์ธํ•  ๋•Œ ๋งˆ๋‹ค ํ˜ธ์ถœ๋˜๋Š” ๊ฒƒ์œผ๋กœ ์ด ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์ด  ๊ฒŒ์ด์ง€์˜ ๊ฐ’์ด๋‹ค. 

 

 

ActuatorApplication 

@Import({OrderConfigV4.class, StockConfigV1.class})
@SpringBootApplication(scanBasePackages = "hello.controller")
public class ActuatorApplication {

    public static void main(String[] args) {
        SpringApplication.run(ActuatorApplication.class, args);
    }

}

 

 

* ์‹คํ–‰

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋ฉด stock gauge call ๋กœ๊ทธ๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋‚จ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ 

๊ฒŒ์ด์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜๋Š” ์™ธ๋ถ€์—์„œ ๋ฉ”ํŠธ๋ฆญ์„ ํ™•์ธํ•  ๋•Œ ํ˜ธ์ถœ๋œ๋‹ค. 

-> ์ง€๊ธˆ ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค๊ฐ€ ๋ฉ”ํŠธ๋ฆญ์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ํ™•์ธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„์† ๋กœ๊ทธ๊ฐ€ ๋‚จ๋Š”๋‹ค. 

http://localhost:8080/actuator/prometheus

 

๋งŒ์•ฝ ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค ์ข…๋ฃŒํ•˜๋ฉด ๋”์ด์ƒ ๋กœ๊ทธ๊ฐ€ ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

 

http://localhost:8080/actuator/metrics/my.stock

๊ฒŒ์ด์ง€๋Š” ๋ˆ„์ ๊ฐ’์ด ํ•„์š”์—†๊ณ  ํ˜„์žฌ ๊ฐ’๋งŒ ์žˆ์œผ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ๊ฐ’๋งŒ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

 

 

* ๊ทธ๋ผํŒŒ๋‚˜ ๋“ฑ๋ก 

 

 

 

2๏ธโƒฃ ๊ฒŒ์ด์ง€ ๊ฐ„๋‹จ ๋“ฑ๋ก 

StockConfigV2

@Slf4j
@Configuration
public class StockConfigV2
{
   
   @Bean
   public MeterBinder stockSize(OrderService orderService)
   {
      return registry -> Gauge.builder("my.stock", orderService, service -> {
         log.info("stock gague call");
         return service.getStock().get();
      }).register(registry);
   }

}

 

 

ActuatorApplication 

@Import({OrderConfigV4.class, StockConfigV2.class})
@SpringBootApplication(scanBasePackages = "hello.controller")
public class ActuatorApplication {

    public static void main(String[] args) {
        SpringApplication.run(ActuatorApplication.class, args);
    }
    
    @Bean
    public InMemoryHttpExchangeRepository httpExchangeRepository()
    {
        return new InMemoryHttpExchangeRepository();
    }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90