在Graphite

时间:2016-02-18 10:49:29

标签: python graphite

我有一个对象列表,每个对象包含:产品,价格,时间。它基本上保持了产品价格随时间的变化。因此,对于每个价格变化,您将获得产品名称,新价格和更改的确切秒数的记录。

我使用时间戳(用python编写)将数据发送到石墨:

import socket

sock = socket.socket()
sock.connect(('my-host-ip', 2003))
message = 'my.metric.prefix.%s %s %d\n' % (product, price, timestamp)
sock.sendall(message)
sock.close()

事实上,由于价格不经常变化,数据点非常稀疏,这意味着我得到了每个产品的点数,以小时/天为单位。如果我在价格变化的确切时间看石墨,我可以看到数据点。但如果我想看看价格随时间的变化,我想从未来价格变化的数据点画出一条恒定的线。

我尝试使用:

keepLastValue(my.metric.prefix.*)

只有在几分钟的时间范围内查看数据点,而不是几小时(当然不是几天),我才会工作。有没有办法在Graphite中做类似的事情?或者我每分钟都要提供一些冗余数据来描述缺失点?

2 个答案:

答案 0 :(得分:1)

由于storage-aggregation.conf中定义的汇总规则,我认为使用keepLastValue对您来说不适用于较粗略的时间间隔。您可以尝试使用xFilesFactor = 0aggregationMethod = last始终获取每个聚合点的指标的最后一个值。

但是我认为通过使用StatsD gauges可以更好地解决您的具体用例。基本上,您可以在StatsD中为仪表设置任意数值,默认情况下,它每隔10秒将其值发送(刷新)到Graphite。如果您确实需要记录第二个更改,则可以将刷新间隔设置为更短的时间段,例如1秒。如果在下一次冲洗时未更新仪表,StatsD将发送先前的值。

所以基本上StatsD指标就你发送冗余数据来描述缺失点的做法。

答案 1 :(得分:0)

稀疏数据也有同样的问题。 我使用下面链接中概述的耳语数据库工具来更新我的耳语文件,这些文件以10分钟为间隔汇总负载数据。

https://github.com/graphite-project/whisper

首先使用whisper-info检查我的文件:

/opt/graphite/bin/whisper-info.py /opt/graphite/storage/whisper/test/system/myserver/n001/loadave.wsp

然后使用耳语调整大小来修复聚合方法:

/opt/graphite/bin/whisper-resize.py --xFilesFactor=0 --aggregationMethod=last /opt/graphite/storage/whisper/test/system/myserver/n001/loadave.wsp 600:259200

请谨慎使用耳语调整大小,如果不小心可能会导致数据丢失!