2016-09-16 117 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)後應用了衍生物()? –