我可以输入时间戳通过statsd(javascript statsd)将数据发送到石墨吗?我需要绘制旧数据图。
答案 0 :(得分:12)
不,你不能用statsd做到这一点,但是你可以通过将数据直接发送到接受tiemstamps的carbon来实现同样的目的。
Statsd只收集实时数据,并在配置的时间段内对该时间段内收到的每个指标进行求和或平均,并将其发送到具有当前时间戳的石墨碳守护进程。
将数据发送到碳守护程序非常简单,您只需要打开一个插槽到碳公共端口(如果您想使用pickle,则有另一个端口),然后在该套接字上打印一个度量标准,每行包含以下值: metric_name metric_value metric_timestamp
Carbon会将该值存储在该时间戳中,您可以使用您想要的任何时间戳,只要它在该度量标准的存储上配置的范围内。
周围有许多例子,例如this one to send with netcat
答案 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