千分尺正确表示重复性工作

问题描述 投票:0回答:1

我有一个 Spring Boot 应用程序,其中计划每 12 分钟运行一次操作。它是一个批处理作业,读取 N 条记录并处理它们。必须观察 X 次成功和 Y 次失败:经典的东西。

使用 N、X 和 Y 的原子整数来测量千分尺似乎是有意义的,但由于配置每分钟发布一次指标,我得到了 11 次无意义的指标,然后是一个与计划任务的实际运行相关的真实指标。

对于同一应用程序中的其他任务,一分钟的发布间隔非常有意义。 我希望有一种方法仅在实际运行后发布批次的指标,以便每个发布的指标代表实际运行的值。

按照千分尺的API应该如何设计? 我阅读了文档并没有找到好的答案。 我用谷歌搜索了很多,但无法找到对此有意义的解决方案的路径。

我认为唯一的方法是直接使用底层指标 API 来显式发布指标(当指标存在时)。在我的情况下,使用 AWS Cloudwatch 是可能的,但希望使用千分尺保持与供应商无关。

batch-processing micrometer
1个回答
0
投票

如果我理解正确的话,你想要成功和失败的次数。为此,您应该使用

Counter
https://docs.micrometer.io/micrometer/reference/concepts/counters.html

例如:

try {
    doSomething();
    Counter.builder("batch.job")
        .tags("outcome", "success")
        .register(registry)
        .increment();
}
catch (Exception e) {
    Counter.builder("batch.job")
        .tags("outcome", "failure")
        .register(registry)
        .increment();
}

这应该产生两个计数器(如果你同时有失败和成功):

batch_job{outcome="success"} 2
batch_job{outcome="failure"} 1

由于这是一个计数器(单调)而不是仪表,因此您可以使用指标后端的查询语言计算出

rate
(每分钟、每 10m 等)。对于超过 15 分钟的一分钟速率,这意味着您将看到 14 次零和 1 次非零值(当您的作业运行时)。

如果您使用

Timer
,您可以从中获取更多数据,因为
Timer
也始终包含
Counter
https://docs.micrometer.io/micrometer/reference/concepts/timers。 html

如果您无法手动增加计数器,因为该值是通过调用方法获得的,请查看

FunctionCounter
,但您需要确保该方法产生单调值。

© www.soinside.com 2019 - 2024. All rights reserved.