2016-09-16 72 views
0

使用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) 

和图形显示了完全空白。有任何想法吗?

后续操作:当选择大于24h的时间范围时,所有数据同样从图中消失。不能为我的生活找出那一个。

+0

我需要查看显示它的数据或图形,以更好地理解为什么'derivative()'函数可能会失败。另外,请发布你的'storage-schemas.conf'。 – obfuscurity

+0

下面是一些数据截图:[imgur专辑](http://imgur.com/a/NRWJr)。 无论出于何种原因,图像的顺序都搞砸了,但信息就在那里。 –

+0

更新:我认为这个问题起源于石墨。使用石墨网格界面进行图形绘制可得到与Grafana中相同的结果 - 衍生图形显示空白图形,并且包括大于过去24小时的范围显示空图形。我在irc.freenode.net上咨询过#graphite,他们似乎认为这可能是一个聚合问题。我的storage-aggregation.conf是一个空文件。 –

回答

2

更新:这是因为我的collectd配置为每秒发送一次样本。然而,collectd的statsd插件每60秒接收一次数据,所以我最终得到了大多数数据点的None

我通过在浏览器中将&format=raw添加到石墨api查询的末尾来检查Graphite中的原始数据,从而为每个数据点的值提供逗号分隔列表。

临时修复程序是围绕石墨查询keepLastValue(60)。然而,这会产生一个阶梯图,因为每个无(60个值)的值将成为60步内的最后一个有效值。绘制这个导数然后成为一个宽间隔的锯齿图。

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

+0

我有收集超时值类似的情况。用'keepLastValue(60)'围住石墨查询意味着什么?你能否展示确切的例子?例如。我有这个查询 - 'http:// /render?width = 1700&from = -2h&until = now&height = 900&target = aerospike.old_statsip-10-146-210-31.service.stat_rw_timeout&title = old_latency_cumulative_not_raw'它显示每30秒收集一次超时。 –

+0

您是否在应用keepLastValue(60)后应用了衍生物()? –