普罗米修斯+千分尺:如何记录时间间隔和成功/失败率

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

我将从前端客户端发送到带有以下数据的metrics-microservice JSON:

{
    totalTimeOnTheNetwork: number;
    timeElasticsearch: number;
    isSuccessful: boolean;
}

metrics-microservice目前处理数据如下:

@AllArgsConstructor
@Service
public class ClientMetricsService {
    @Autowired
    MeterRegistry registry; // abstract class, SimpleMeterRegistry gets injected
    public void metrics(final MetricsProperty metrics) {
        final long networkTime = metrics.getTotalTime() - metrics.getElasticTime();
        registry.timer(ELASTIC_TIME_LABEL).record(metrics.getElasticTime(), TimeUnit.MILLISECONDS);
        registry.timer(TOTAL_TIME_LABEL).record(metrics.getTotalTime(), TimeUnit.MILLISECONDS);
        registry.timer(NETWORK_TIME_LABEL).record(networkTime, TimeUnit.MILLISECONDS);
    }
}

如您所见,我为每个时间间隔制定了一个新指标。我想知道我是否可以将所有间隔放入一个指标?如果我不必在metrics-microservice上计算网络时间而在Grafana中计算网络时间会很棒。

另外,我可以在registry.timer中放置成功/失败标记吗?我假设我需要在每个请求上使用timer.builder,然后像这样:

Timer timer = Timer
    .builder("my.timer")
    .description("a description of what this timer does") // optional
    .tags("region", "test") // optional
    .register(registry);

这是一种典型的方法吗(例如,在每个HTTP请求上创建一个新的计时器并将其链接到注册表),或者计时器是否应该像我当前的版本一样从MeterRegistry派生?

或者您会使用其他指标来记录成功/失败吗?在未来而不是布尔值,度量可能会更改为http-error-code,例如,所以我不确定如何以可维护的方式实现它

spring metrics prometheus micrometer
1个回答
0
投票
Timer timer = Timer
    .builder("your-timer-name-here")
    .tags("ResponseStatus", isSuccessful.toString, "ResponseCode", http-error-code.toString)
    .register(registry);

timer.record(metrics.getTotalTime);

应该是响应你的问题的工作代码,但我觉得有一个误解。为什么你想要一个指标中的所有内容?

无论哪种方式,您都可以使用标签对其进行排序。我不知道Grafana端的功能,但它可能就像将.getElasticTime信息扔到另一个标签并发送它一样简单。

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