prometheus - 千分尺/普罗米修斯:如何测量处理持续时间?
问题描述
我想测量处理一些数据需要多长时间:我的应用程序以固定速率从给定源读取数据。在我存储的每个圆圈之前Instant.now()
。我读取数据,将单个时间戳添加到每个条目。数据被存储、转换,就在我通过 WebSockets 发送出去之前,我想测量now()
与初始时间戳之间的持续时间。
我试过了
long millis = Duration.between(dataEntry.getReceivedTimestamp(), Instant.now()).toMillis();
LOG.info(millis + "ms");
registry.timer("processingDuration").record(millis, TimeUnit.MILLISECONDS);
但可视化这让我只使用processingDuration_seconds_count
,_max
和_sum
. count
并且sum
随着时间的推移而增加(当然),max
大部分时间都是恒定的。那么我如何看到更高和更低的负载平台呢?我试图irate(processingDuration_seconds_sum[10m])
至少看到跳跃,但由于irate()
仅使用两个数据点,我仍然无法轻松识别较长时间的高负载。另外:图中的值约为 0.6,而记录的 ms 约为 5-10,所以我在这里失去了实际值。
所以我尝试使用 aGauge
代替——它应该允许增加和减少值:
registry.gauge("processingDurationGauge", millis);
我以为这会在记录的毫秒范围内上下波动,但它一直是 92。
如何测量数据的整个时间?
解决方案
使用计时器record
是正确的解决方案。
long millis = Duration.between(dataEntry.getReceivedTimestamp(), Instant.now()).toMillis();
LOG.info(millis + "ms");
registry.timer("processingDuration").record(millis, TimeUnit.MILLISECONDS);
假设您每 30 秒刮一次,您可以使用_sum
and_count
来获得平均记录持续时间:
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 倍的值。(我没有测试过那个查询,但它应该明白了)。
推荐阅读
- php - 控制发布的 api 链接是否已启动
- c - 将 int 重新解释为 float
- python - 计算每组唯一值的数量
- linux - 如何使用 linux cli 忽略 csv 文件中的任何特定列数据?
- php - 在 php 中将另一个类的类型声明为另一个类的属性还有哪些其他选择
- java - 使用 HQL 从 Oracle 11 DB 获取数据以在网页上显示
- javascript - Javascript按随机百分比执行函数
- word-wrap - 在网页中包装日文字符
- node.js - 如何使用设置间隔来做更多的事情而不是输出一行?节点.js
- reactjs - 反应井字游戏,Array.slice(),可变性