0

我需要将计数器和仪表导出到 csv 以便以后处理它们。通过使用 gradle,我得到了 codahale 指标 3.1.2 的罐子:

compile('io.dropwizard.metrics:metrics-core:${metricsVersion}' )
compile('io.dropwizard.metrics:metrics-annotations:${metricsVersion}' )

对于 csv 导出,我使用以下代码行创建了一名记者:

@Configuration
public class MetricsConfiguration {
    @Autowired
    MetricRegistry metricRegistry;

    @Bean
    public CsvReporter configureReporters() {
        CsvReporter reporter = CsvReporter.forRegistry(metricRegistry).build(new File("C:/temp/metrics"));
        reporter.start(5, TimeUnit.SECONDS);

        return reporter;
    }
}

我可以看到文件已创建并且它们包含时间戳和值(在此示例中,值是为仪表设置的):

1444137261,42.0
1444137266,42.0
1444137271,42.0
1444137276,1.0
1444137281,1.0
1444137286,1.0

唯一的问题是该文件重复设置的最后一个值,直到它被我使用覆盖gaugeService.submit()。在这种情况下,我将仪表值设置为42.0一次,等待几分钟,然后设置一个新值1.0.

这使得我很难解析 csv 并自己创建平均值或创建直方图,因为我不知道42.0提交了一次还是三次。

我查看了这些 SO 帖子,但它们并没有帮助我解决我的问题:

4

1 回答 1

1

所有这一切都是基于我的一个误解:Spring Boot 提供的指标只允许使用 agaugecounters. 两者均未计算平均值。

为了访问我需要的内容,我必须访问底层 Codahale 指标注册表:

@Autowired
MetricRegistry metricRegistry;

然后我可以在我的代码中启动和停止计时器:

Context timer = metricRegistry.timer("foo").time();
// do whatever needs to be timed
timer.stop();

这些值将由 CsvReporter 导出到一个名为的文件中,该文件timer.foo.csv包含这些值:

t,count,max,mean,min,stddev,p50,p75,p95,p98,p99,p999,mean_rate,m1_rate,m5_rate,m15_rate,rate_unit,duration_unit
1446036738,5,18,597084,14,172184,12,832516,2,145484,13,280135,13,445525,18,597084,18,597084,18,597084,18,597084,0,215907,0,494353,0,577132,0,592274,calls/second,milliseconds
1446036798,5,18,597084,14,172184,12,832516,2,145484,13,280135,13,445525,18,597084,18,597084,18,597084,18,597084,0,060092,0,181862,0,472516,0,554077,calls/second,milliseconds
1446036858,5,18,597084,14,172184,12,832516,2,145484,13,280135,13,445525,18,597084,18,597084,18,597084,18,597084,0,034923,0,066903,0,386863,0,518343,calls/second,milliseconds
1446036918,5,18,597084,14,172184,12,832516,2,145484,13,280135,13,445525,18,597084,18,597084,18,597084,18,597084,0,024578,0,024612,0,316737,0,484913,calls/second,milliseconds
于 2015-11-03T08:05:57.680 回答