首页 > 解决方案 > 将机器状态存储在 Graphite 时间序列上,以便稍后提取 KPI

问题描述

拥有一台发送(不定期)其状态值 0、1、2 的机器,我们将其存储在 Graphite 中。现在状态意味着:

要求提取的 KPI 是经典 KPI:一天或一周中有多少时间处于状态 0、1 或 2?在重新发明轮子之前,我们正在研究计算这些 PKI 的最佳方法,如果在 Graphite(或可能的其他时间序列解决方案)中已经有函数处理求和数据点值只是一个条件的时间。显然,没有存储求和的时间间隔,它是一个数据点和下一个数据点之间经过的时间。

或者是否应该对数据进行预处理以计算时间间隔,然后存储三个数据集,例如:status.working、status.stopped、status.alarm 以及每个存储的特定“事件”何时开始以及持续了多长时间?

还有其他 KPI,例如一天中的警报数量。连续接收两个状态数据点都指示状态“2”,实际上是一个单一的报警条件,必须计为 1。

那么,有没有一种最好的方法来存储这些数据而不进行预处理呢?这听起来是一种常见的模式,但是(我们感到羞耻?)我们还没有发现这个话题得到了很好的探索。

谢谢。

标签: time-seriesgraphitekpi

解决方案


Graphite 有许多功能可以在这里为您提供帮助。一个突出的是summarize()您可以传递聚合方法(在这种情况下sum)和持续时间(以分钟/小时/天/周/等为单位)的函数,看看这里

isNonNull是另一个有用的功能:它可用于确定数据点的存在,而不管值如何。

当您说机器报告一个值0以指示它已停止时 - 它实际上是发送该值还是什么都不报告?这是一个重要的细节,将对您的解决方案的最终结果产生一些影响。


推荐阅读