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

千分尺/普罗米修斯:如何测量处理持续时间?

阚正真
2023-03-14

我想测量处理某些数据需要多长时间:我的应用程序以固定速率从给定源读取该数据。在每个圆圈之前,我存储即时。now()。我读取数据,将单个时间戳添加到每个条目中。数据被存储,转换,就在我通过WebSockets发送它之前,我想测量现在()和初始时间戳之间的持续时间。

我试过了

long millis = Duration.between(dataEntry.getReceivedTimestamp(), Instant.now()).toMillis();
LOG.info(millis + "ms");
registry.timer("processingDuration").record(millis, TimeUnit.MILLISECONDS);

但是可视化这一点只允许我使用<code>processingDuration_seconds_count、<code>_max和<code>_ sumcountsum随时间增加(当然,max在大多数时间是恒定的。那么,我如何看待负载的较高和较低平台?我尝试了<code>irate(processingDuration_seconds_sum[10m])仅使用两个数据点,我仍然无法轻松识别长时间的高负载。另外:图中的值约为0.6,而记录的ms约为5-10,因此我在这里丢失了实际值。

所以我试着用< code >量表来代替——它应该允许增加和减少值:

registry.gauge("processingDurationGauge", millis);

我原以为它会在记录的ms范围内上下波动,但它一直是92。

如何测量数据的整个时间?

共有2个答案

裘臻
2023-03-14

问题是,长时间不是线程安全的,看到这个答案。按照记录的操作按预期工作:

private final AtomicLong processingDuration;

// ...

// in constructor:
processingDuration = meterRegistry.gauge("processingDuration", new AtomicLong(0L));

// ...

// before finishing the data entries' handling:
long millis = Duration.between(dataEntry.getReceivedTimestamp(), Instant.now()).toMillis();
LOG.info(millis + "ms");
processingDuration.set(millis);
竺捷
2023-03-14

使用计时器和< code >记录是正确的解决方案

long millis = Duration.between(dataEntry.getReceivedTimestamp(), Instant.now()).toMillis();
LOG.info(millis + "ms");
registry.timer("processingDuration").record(millis, TimeUnit.MILLISECONDS);

假设您每30秒进行一次刮片,您可以使用<code>_sum

increase(processingDuration_seconds_sum[1m])/increase(processingDuration_seconds_count[1m])

如果你想比较当前的持续时间与过去一天的平均时间的表现:

((increase(processingDuration_seconds_sum[1m])/
increase(processingDuration_seconds_count[1m]))*1.50) >
increase(processingDuration_seconds_sum[24h])/
increase(processingDuration_seconds_count[24h])

这只会返回1m平均值超过每日平均值1.5倍的值。(我还没有测试那个查询,但它应该明白了)。

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

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

  • 我可以在http://localhost:8080/hello/q/metrics看到这个指标。现在我想把这个度量标准推到普罗米修斯,但我还没有找到任何指南,说明如何在普罗米修斯注册/集成这些度量标准。理想情况下,我想把它们推到石墨上,但这不受支持。所以我想知道如何推动这些指标,这样我就可以在格拉法纳可视化它们。

  • 对于和我们希望使用千分尺应用程序监控,因此包括: 并创建一个具有以下restendpoint的控制器: 因此,我们得到了endpoint,它只等待两秒钟,我们得到了endpoint,它返回了ITME的列表。 Bot请求工作。唯一的区别是,对于endpoint,我得到的是prometheus度量,而对于endpoint,我没有得到任何度量: 对于返回或仍不受支持的请求,是否必须配置其他内容才能使其工

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

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