繁体   English   中英

Codahale指标会每天重置并计数

[英]Codahale metrics counter reset and count everyday

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

生成如下报告:

请求计数:

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

回应计数:

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

仪表方法来获取最后一秒,一分钟,十五个速率。 但是如何获得最后一小时和今天的计数呢?

下面试过了:

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();
    }
}

汇总或计算使用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') ,并且还应根据落入所选聚集间隔的碳的保留期(一个或多个)进行缩放。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM