15

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

4

3 回答 3

12

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

Statsd 只是收集实时数据,并在配置的期间汇总或平均该期间收到的每个指标,并将其发送到当前时间戳的石墨碳守护进程。

将数据发送到 carbon daemon 非常简单,您只需要打开一个到 carbon 公共端口的套接字(如果您想使用 pickle,则有另一个端口),然后在该套接字上打印每行一个具有以下值的度量: metric_name metric_value metric_timestamp

Carbon 会将该值存储在该时间戳中,您可以使用所需的任何时间戳,只要它在该指标存储配置的范围内即可。

周围有很多例子,比如这个用netcat发送

还有一个用 C 编写的 Graphite 客户端

于 2012-10-03T16:15:27.817 回答
2

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

于 2013-06-26T19:21:42.663 回答
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

于 2014-10-24T23:44:12.887 回答