使用石墨和statsd绘制旧数据

时间:2012-08-21 08:50:02

标签: graphite statsd

我可以输入时间戳通过statsd(javascript statsd)将数据发送到石墨吗?我需要绘制旧数据图。

3 个答案:

答案 0 :(得分:12)

不,你不能用statsd做到这一点,但是你可以通过将数据直接发送到接受tiemstamps的carbon来实现同样的目的。

Statsd只收集实时数据,并在配置的时间段内对该时间段内收到的每个指标进行求和或平均,并将其发送到具有当前时间戳的石墨碳守护进程。

将数据发送到碳守护程序非常简单,您只需要打开一个插槽到碳公共端口(如果您想使用pickle,则有另一个端口),然后在该套接字上打印一个度量标准,每行包含以下值: metric_name metric_value metric_timestamp

Carbon会将该值存储在该时间戳中,您可以使用您想要的任何时间戳,只要它在该度量标准的存储上配置的范围内。

周围有许多例子,例如this one to send with netcat

还有Graphite client written in C

答案 1 :(得分:2)

我想使用statsd但不是实时的,因为我每小时处理一次日志文件。所以我修改了服务器代码以接受时间戳,并修改了客户端代码以发送一个。它最终为我工作,虽然感觉非常“本土”,我无法更新到没有额外工作的更新版本的statsd。棘手的部分是服务器将一些聚合到10秒的桶中。实时,这很容易做到,但如果你要接受时间戳,你必须保留更多的数据。对我来说,由于我的数据只能在一个小时左右,这并不太难,但我的解决方案并不适用于一般情况。

答案 2 :(得分:0)

看起来有一种方法可以通过STATSD发送原始数据,但它不会被聚合:

def send(self, subname, value, timestamp=None):
    '''Send the data to statsd via self.connection
    :keyword subname: The subname to report the data to (appended to the
        client name)
    :keyword value: The raw value to send
    '''
    name = self._get_name(self.name, subname)
    return statsd.Client._send(self, {name: '%s|r|%s' % (value, ts)})

请参阅: http://python-statsd.readthedocs.org/en/latest/_modules/statsd/raw.html https://github.com/chuyskywalker/statsd/blob/master/README.md