【问题标题】:Dynamic tag values for the Counter metric in Micrometer以 Micrometer 为单位的 Counter 指标的动态标签值
【发布时间】:2020-04-22 19:36:50
【问题描述】:

这里是新手,正在尝试了解有关千分尺的更多信息。我目前正在探索如何实现这一目标:

我正在使用启用了执行器和千分尺的 Spring boot 2。考虑以下类:

@Component
class MyService {
  @Autowired
  AuthorizeTransaction callbackTransaction;

  @Autowired
  AuthorizeTransaction immediateTransaction;

  private MeterRegistry meterRegistry;
  private Counter requestCounter;
  private Counter responseCounter;

  public MyService(MeterRegistry meterRegistry) {
    this.meterRegistry = meterRegistry;
    initCounters();
  }

  private initCounters() {
    requestCounter = Counter.builder("iso_request")
                      .tags("mti", "0100")  // how do I change the value of this tag for other request types like 0200, 0120, etc.,
                      .register(meterRegistry);
    responseCounter = Counter.builder("iso_response")
                      .tags("mti", "0101")
                      .tags("response_code", "00") // how do I change the value of this tag for other response codes like 01, 09, etc.,
                      .register(meterRegistry);
  }

  public ISOMsg process(ISOMsg request) {
    ISOMsg response = null;

    try {
      switch(request.getMTI()) {  // org.jboss.iso.ISOMsg
        case "0100":
        case "0200":
          if ("0100".equals(request.getMTI())) {
            requestCounter.increment();
          } else {
            requestCounter.increment(); // I want to increment the counter of the same metric with tag mti=0200
          }
          response = immediateTransaction.process(request);
          // here I want to increment the response counter but with different MTIs and response codes
          break;
        case "0120":
        case "0121"
          response = callbackTransaction.process(request);
          break;
        default:
          log.error("error here")
      }
    } catch (Exception e) {
      log.error("error here")
    }

    return response;
  }
}

我被困在这里,必须为标签值的每个组合创建不同的计数器变量,并且代码的可读性受到非常糟糕的影响。除了上面的例子,我还有很多 switch case 语句。肯定有一种简单的方法可以做到这一点,但是我找不到。

【问题讨论】:

    标签: java spring-boot-actuator micrometer prometheus-java


    【解决方案1】:

    如果您想使用特定标签计数,则必须使用Builder。方法如下:

    @Component
    class MyService {
      @Autowired
      AuthorizeTransaction callbackTransaction;
    
      @Autowired
      AuthorizeTransaction immediateTransaction;
    
      private MeterRegistry meterRegistry;
      private Counter.Builder requestCounter;
      private Counter.Builder responseCounter;
    
      public MyService(MeterRegistry meterRegistry) {
        this.meterRegistry = meterRegistry;
        initCounters();
      }
    
      private initCounters() {
        requestCounter = Counter.builder("iso_request");
        responseCounter = Counter.builder("iso_response");
      }
    
      public ISOMsg process(ISOMsg request) {
        ISOMsg response = null;
    
        try {
          switch(request.getMTI()) {  // org.jboss.iso.ISOMsg
            case "0100":
            case "0200":
              requestCounter.tag("mti", request.getMTI()).registry(meterRegistry);
              response = immediateTransaction.process(request);
              responseCounter.tags("mti", request.getMTI(), "response_code", "0101").registry(meterRegistry);
              // here I want to increment the response counter but with different MTIs and response codes
              break;
            case "0120":
            case "0121"
              response = callbackTransaction.process(request);
              break;
            default:
              log.error("error here")
          }
        } catch (Exception e) {
          log.error("error here")
        }
    
        return response;
      }
    }
    

    想一想:

    • 创建一个类来封装您的 Counter 逻辑
    • 为您的标签使用常量

    让我知道它是否有效!

    【讨论】:

    • 在我看来你还是需要打电话给increment
    • 好像也因为builder被缓存了,所以标签不断添加(见io.micrometer.core.instrument.Counter.Builder#tags)。
    猜你喜欢
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 2020-07-14
    • 2023-02-23
    • 2021-10-20
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    相关资源
    最近更新 更多