2016-09-16 2 views
0

흑연/그라파 나를 사용하여 mongodb 인스턴스의 모든 컬렉션 크기를 기록합니다. 이렇게 간단한 (WIP) 파이썬 스크립트를 작성했습니다 :흑연 미분 데이터 없음

#!/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) 

그리고 그래프는 완전히 빈 나타납니다. 어떤 아이디어?

후속 조치 : 24 시간보다 큰 시간 범위를 선택하면 모든 데이터가 그래프에서 비슷하게 사라집니다. 내 인생에서 그걸 알아 채지 못해.

+0

'derivative()'함수가 왜 실패했는지 더 잘 이해하려면 데이터 나 그래프를보아야합니다. 또한,'storage-schemas.conf'를 게시하십시오. – obfuscurity

+0

다음은 데이터의 일부 스크린 샷입니다 : [imgur album] (http://imgur.com/a/NRWJr). 이유가 무엇이든간에 이미지 순서가 엉망이지만 정보가 있습니다. –

+0

업데이트 :이 문제는 흑연에서 기인한다고 생각합니다. Graphite 웹 인터페이스를 사용하여 그래프를 작성하면 grafana 파생물에 표시된 것과 동일한 결과가 빈 그래프로 나타나며 지난 24 시간보다 큰 범위를 포함하면 빈 그래프가 표시됩니다. 나는 irc.freenode.net에서 #graphite와상의했는데 집단적 문제라고 생각하는 것 같았다. 내 storage-aggregation.conf는 빈 파일입니다. –

답변

2

업데이트 : 이것은 내 collectd가 매초마다 샘플을 보내도록 설정 되었기 때문입니다. 그러나 collectd에 대한 statsd 플러그인은 60 초마다 데이터를 수신하므로 대부분의 데이터 포인트에 대해 None으로 끝났습니다.

브라우저에서 graphite-api 쿼리 끝에 &format=raw을 추가하여 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)를 적용한 후 derivative()를 적용합니까? –