使用石墨和 statsd 绘制旧数据

Posted

技术标签:

【中文标题】使用石墨和 statsd 绘制旧数据【英文标题】:Graph old data using graphite and statsd 【发布时间】:2012-08-16 14:03:33 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

还有一个Graphite client written in C

【讨论】:

使用旧时间戳发送数据的完整示例。首先,您需要更改时间,然后更改 echo "stats.gauges.asdf.qwer.zxc 0.55 date +%s" | nc -q0 100.100.100.100 2003 。在这里阅读:graphite.readthedocs.org/en/1.0/feeding-carbon.html【参考方案2】:

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

【讨论】:

你在任何地方开源了吗?我对您的解决方案非常感兴趣,因为我也需要这样做 我还没有开源它。我不介意与特定的人分享它,它只是不是很笼统。除了在 cmets 之外,我不习惯在堆栈溢出时联系人们——有没有办法让我们交换电子邮件地址而不只是在这里打印它们? 你能通过推特联系我吗? @ManuelRauber 您的实现是否有任何更新可以分享,我们希望在项目中使用相同的功能。 对此也感兴趣!【参考方案3】:

看起来有一种方法可以通过 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

【讨论】:

以上是关于使用石墨和 statsd 绘制旧数据的主要内容,如果未能解决你的问题,请参考以下文章

石墨:总结所有匹配模式的统计数据?

安装石墨+statsd ....得到错误未知的碳缓存

Graphite 以外的 statsd 数据的 GUI? [关闭]

Graphite 在长时间使用时无法正确绘制数值?

使用 StatsD + Grafana + InfluxDB 搭建 Node.js 监控系统

[转]使用 StatsD + Grafana + InfluxDB 搭建 Node.js 监控系统