石墨衍生物不显示数据

时间:2016-09-16 21:26:58

标签: graphite grafana

使用graphite / Grafana记录mongodb实例中所有集合的大小。我写了一个简单的(WIP)python脚本:

#!/usr/bin/python

from pymongo import MongoClient
import socket
import time

statsd_ip = '127.0.0.1'
statsd_port = 8125

# create a udp socket 
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

client = MongoClient(host='12.34.56.78', port=12345)
db = client.my_DB

# get collection list each runtime
collections = db.collection_names()

sizes = {}

# main
while (1):
    # get collection size per name
    for collection in collections:
        sizes[collection] = db.command('collstats', collection)['size']

    # write to statsd
    for size in sizes:
        MESSAGE = "collection_%s:%d|c" % (size, sizes[size])
        sock.sendto(MESSAGE, (statsd_ip, statsd_port))

    time.sleep(60)

这正确地显示了我在grafana中的所有收藏尺寸。但是,我希望得到这些大小的变化率,所以我在grafana中构建了以下石墨查询:

derivative(statsd.myHost.collection_myCollection)

图表显示完全空白。有什么想法吗?

FOLLOW-UP:当选择大于24h的时间范围时,所有数据同样会从图表中消失。不能为我的生活弄清楚那个。

1 个答案:

答案 0 :(得分:2)

更新:这是因为我的collectd被配置为每秒发送一次样本。但是,collectd的statsd插件每隔60秒就会收到一次数据,因此对于大多数数据点我最终得到None

我通过在浏览器中将&format=raw附加到graphite-api查询的末尾来检查Graphite中的原始数据来发现这一点,它将每个数据点的值作为逗号分隔列表。< / p>

对此的临时修复是用keepLastValue(60)围绕石墨查询。然而,这会创建一个阶梯图,因为每个None(60个值)的值将成为60个步骤中的最后一个有效值。图形化的衍生物然后变成一个间隔很大的锯齿图。

为了解决这个问题,我可能会继续修复collectd上的刷新间隔或切换到独立的statsd实例,并根据需要进行配置。