【问题标题】:Complete sparse data in Graphite在 Graphite 中完成稀疏数据
【发布时间】:2016-02-18 10:49:29
【问题描述】:

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

我正在使用时间戳(用 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()

问题是,由于价格不会经常变化,数据点非常稀疏,这意味着我以几小时/几天的频率获得每个产品的积分。如果我在价格变化的确切时间查看 Graphite,我可以看到数据点。但如果我想查看价格随时间的变化,我想从价格变化的数据点画一条恒定线。

我尝试使用:

keepLastValue(my.metric.prefix.*)

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

【问题讨论】:

    标签: python graphite


    【解决方案1】:

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

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

    所以基本上 StatsD 仪表会按照您所说的发送冗余数据来描述缺失点。

    【讨论】:

    • 感谢您的回答。我要检查一下。关于 StatsD,据我了解,我无法使用 statsd 发送历史数据,我错了吗?我需要填写历史数据,而不是从现在开始的数据
    • 我认为您是对的,您无法使用 StatsD 发送历史数据。
    【解决方案2】:

    稀疏数据也有同样的问题。 我使用下面链接中列出的耳语数据库工具来更新我的耳语文件,这些文件每隔 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
    

    然后使用 Whisper-resize 修复聚合方法:

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

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

    【讨论】:

      猜你喜欢
      • 2012-05-15
      • 2012-11-09
      • 1970-01-01
      • 2013-09-03
      • 1970-01-01
      • 2018-08-22
      • 2015-09-14
      • 2021-04-27
      • 1970-01-01
      相关资源
      最近更新 更多