当前位置: 首页 > 知识库问答 >
问题:

如何让Spring Boot指标将平均值和绝对值导出到csv

罗毅
2023-03-14

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

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

对于csv导出,我使用以下代码行创建了一个reporter:

@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帖子,但它们并没有帮助我解决我的问题:

  • 导出Spring Boot Actuator指标(

共有1个答案

洪开济
2023-03-14

所有这些都是基于我这边的误解:Spring Boot提供的指标只允许使用量规计数器。对于这两者,都没有计算平均值。

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

@Autowired
MetricRegistry metricRegistry;

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

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

这些值将由CsvReporter导出到名为timer的文件中。傅。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
 类似资料:
  • 我是新来的。任何帮助都将不胜感激 这是我的原始数据: 我想得到的是: 1创建一个新的列调用平均值,以计算每个提要的平均市值。 2求加权平均数。 这是我当前的代码,我得到NaN: 对于加权平均代码: 我得到了一个错误: AttributeError:“Series”对象没有属性“value”

  • 问题内容: 我无法获得熊猫列的平均值或均值。有一个数据框。我在下面尝试的任何事情都没有给我该列的平均值 以下返回几个值,而不是一个: 这样: 问题答案: 如果您只想要列的均值,请选择列(这是一个系列),然后调用:

  • 我不能得到熊猫的平均值或平均值。有一个数据框。下面我尝试的东西都没有给我列的平均值 以下内容返回多个值,而不是一个值: 这也是:

  • 问题内容: 我的表中有一列具有FLOAT类型的值。如何获得此列中所有元素的平均值? 问题答案: 这将平均所有行。要平均子集,请使用子句。要平均每个组(某物),请使用by子句。

  • 问题内容: 我如何平均?我想找到的平均值,学生总数和的总数。例: 输入 :4 4 4 4 产出: 学生总数 :4 总GPA :16 平均GPA: 4 问题答案: 如果问题是您得到错误的答案,则原因是此循环: 大概您打算在用户输入负数时退出循环。这样做有问题,它将在总数和计数中包含负数。您可以这样重写循环: (其他解决方案也是可能的)。在代码的后面,您将需要防止第一个数字为负。如果发生这种情况,将为