【问题标题】:Codahale metrics counter reset and count everydayCodahale 指标计数器每天重置和计数
【发布时间】:2016-08-29 04:37:41
【问题描述】:

使用 Codahale 指标可以计算过去 24 小时(今天)。

生成如下报告:

请求计数:

lastSec   lastMin    lastHour    today
=======================================
1           5           22        45   

响应计数:

lastSec   lastMin    lastHour    today
=======================================
1           5           22        45   

Meter methods 可以获取最后一秒、一分钟、十五个费率。但是如何计算最后一小时和今天的数据?

以下尝试:

public class ReportMetrics {

    static final MetricRegistry metrics = new MetricRegistry();
    static final Counter aReqCount = ReportMetrics.metrics.counter(name(AProcessor.class, "a-req-count"));
    static final Counter aResCount = ReportMetrics.metrics.counter(name(AProcessor.class, "a-res-count"));
    
    private static final AProcessor aProcessor = new AProcessor();
    
    public static void main(String[] args) {
        startReport();
        
        for(int i=0; i<=5; i++){
            //add
            aProcessor.addJob();
            wait5Seconds();         
            
            //take
            arProcessor.takeJob();
            wait5Seconds();         
        }
        
    }
    
    static void startReport() {
          ConsoleReporter reporter = ConsoleReporter.forRegistry(metrics)
              .convertRatesTo(TimeUnit.SECONDS)
              .convertDurationsTo(TimeUnit.MILLISECONDS)
              .build();
          reporter.start(1, TimeUnit.SECONDS);
      }
    
    static void wait5Seconds() {
          try {
              Thread.sleep(5*1000);
          }
          catch(InterruptedException e) {}
      }
    
    public long requestCount(){
        ReportMetrics.metrics.aReqCount.getCount();
    }
    
    public long responseCount(){
        ReportMetrics.metrics.aResCount.getCount();
    }
    
    public long pendingRequestCount(){
        return requestCount() - responseCount();
    }   
    
}

class AProcessor {
    
    public void addJob(){
        ReportMetrics.metrics.aReqCount.inc();
    }

    public Object takeJob(){
        ReportMetrics.metrics.aResCount.inc();
    }
}

【问题讨论】:

    标签: java metrics codahale-metrics


    【解决方案1】:

    总结或计算counter.inc 报告的计数器的每个任意间隔的计数(总数):

    hitcount(perSecond(AProcessor.a-req-count.count), '1hour')
    
    hitcount(perSecond(AProcessor.a-res-count.count), '1day')
    

    Afaik 它在里面做了所有的黑魔法。包括但不限于summarize(scaleToSeconds(nonNegativeDerivative(your.count),1), '1day') 并且还应该根据落入所选聚合间隔的碳保留期(一个或多个)进行缩放。

    【讨论】:

      猜你喜欢
      • 2014-12-14
      • 1970-01-01
      • 1970-01-01
      • 2020-04-16
      • 2020-04-16
      • 1970-01-01
      • 1970-01-01
      • 2020-07-22
      • 1970-01-01
      相关资源
      最近更新 更多