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

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

班展
2023-03-14

我正在从前端客户端向指标微服务发送具有以下数据的 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);
    }
}

如您所见,我为每个时间间隔制作了一个新指标。我想知道我是否可以将所有时间间隔放入一个指标中?如果我不必在指标微服务上计算网络时间,而是在Grafana中计算,那就太好了。

另外,我是否可以在注册表.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,而不是boolean,所以我不确定如何以可维护的方式实现它

共有1个答案

上官恩
2023-03-14
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信息放入另一个标签并发送即可。

 类似资料:
  • 根据Micrometer的文档https://Micrometer.io/docs/concepts#_server_side,框架(Micrometer)应该处理将计时器度量从绝对量转换为速率 下面的代码模拟一个伪定时器: 然而,在Prometheus中,我只看到单调增加的度量和而不是将它们视为速率 也许我误解了或者忽略了文档中的某些内容?

  • 我想测量处理某些数据需要多长时间:我的应用程序以固定速率从给定源读取该数据。在每个圆圈之前,我存储。我读取数据,将单个时间戳添加到每个条目中。数据被存储,转换,就在我通过WebSockets发送它之前,我想测量和初始时间戳之间的持续时间。 我试过了 但是可视化这一点只允许我使用<code>processingDuration_seconds_count、<code>_max和<code>_ sum

  • 我试图在Spring Boot 2.0.0 .版本中使用Micrometer.io生成普罗米修斯指标 当我试图将列表的大小公开为Gauge时,它一直显示NaN。在留档中,它说; 你有责任对你用量规测量的状态对象保持强烈的引用。 我已经尝试了一些不同的方法,但我不能解决这个问题。这是我的代码和一些试验。 有人能帮忙解决这个问题吗?任何帮助都将不胜感激。

  • 响应于“/acturet/prometheus”的DistributionSummary可用的度量仅是度量的Sum、Max和Count。 我想显示在选定的时间量内API调用所用的平均时间。用于EX:API在过去5分钟内所用的平均时间。

  • 我已经在一个千分尺计的方法中检测了我的代码,如下所示: 我还添加了一些其他指标。 其他指标显示在普罗米修斯endpoint上,但此指标指标不会。 我错过了什么?

  • 我正在将Spring Boot应用程序从Spring Boot 1(使用Prometheus Simpleclient)转换为Spring Boot 2(使用微米)。 我很难将我们在《春靴1》和《普罗米修斯》中的标签转换为千分尺的概念。例如(普罗米修斯): Micrometer的标签似乎与Prometheus的标签有些不同:所有的值都必须预先声明,不仅仅是键。 可以将普罗米修斯的标签与Spring