如何让 spring 引导指标将平均值和绝对值导出到 csv
How to have spring boot metrics export averages and absolute values to csv
我需要将计数器和仪表导出到 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 帖子,但它们并没有帮助我解决我的问题:
- Exporting Spring Boot Actuator Metrics (& Dropwizard Metrics) to Statsd
所有这些都是基于我的误解:Spring Boot 提供的指标只允许使用 gauge
or counters
。两者均未计算平均值。
为了访问我需要的内容,我必须获得对底层 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
我需要将计数器和仪表导出到 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 帖子,但它们并没有帮助我解决我的问题:
- Exporting Spring Boot Actuator Metrics (& Dropwizard Metrics) to Statsd
所有这些都是基于我的误解:Spring Boot 提供的指标只允许使用 gauge
or counters
。两者均未计算平均值。
为了访问我需要的内容,我必须获得对底层 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