我可以输入时间戳以通过 statsd(javascript statsd) 将数据发送到石墨吗?我需要绘制旧数据。
3 回答
不,你不能用 statsd 做到这一点,但是你可以通过将数据直接发送到接受 tiemstamps 的 carbon 来实现相同的目的。
Statsd 只是收集实时数据,并在配置的期间汇总或平均该期间收到的每个指标,并将其发送到当前时间戳的石墨碳守护进程。
将数据发送到 carbon daemon 非常简单,您只需要打开一个到 carbon 公共端口的套接字(如果您想使用 pickle,则有另一个端口),然后在该套接字上打印每行一个具有以下值的度量: metric_name metric_value metric_timestamp
Carbon 会将该值存储在该时间戳中,您可以使用所需的任何时间戳,只要它在该指标存储配置的范围内即可。
周围有很多例子,比如这个用netcat发送
我想使用 statsd 但不是实时的,因为我每小时处理一次日志文件。所以我修改了服务器代码以接受时间戳,并修改了客户端代码以发送时间戳。它最终对我有用,尽管它感觉非常“本土化”,而且我无法在没有额外工作的情况下更新到新版本的 statsd。棘手的部分是服务器将一些聚合到 10 秒的存储桶中。实时,这很容易做到,但如果你要接受时间戳,你必须保留更多的数据。对我来说,由于我的数据只能保存一个小时左右,这并不太难,但我的解决方案并不适用于一般情况。
看起来有一种方法可以通过 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