Graphite Derivative не показывает данных

Использование графита / графана для записи размеров всех коллекций в экземпляре 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)

Это правильно показывает все размеры моей коллекции в графане. Однако я хочу получить скорость изменения этих размеров, поэтому я создаю следующий графитовый запрос в графане:

derivative(statsd.myHost.collection_myCollection)

И график оказывается совершенно пустым. Любые идеи?

ПОСЛЕДУЮЩИЕ ДЕЙСТВИЯ: при выборе диапазона времени более 24 часов все данные аналогично исчезают с графика. Не могу, хоть убей, понять это.


person Min.E.On    schedule 16.09.2016    source источник
comment
Мне нужно увидеть данные или график, показывающий это, чтобы лучше понять, почему функция derivative() может не работать для вас. Кроме того, опубликуйте свой storage-schemas.conf.   -  person obfuscurity    schedule 18.09.2016
comment
Вот несколько снимков экрана с данными: альбом imgur. По какой-то причине был испорчен порядок изображений, но информация есть.   -  person Min.E.On    schedule 19.09.2016
comment
Обновление: я думаю, что эта проблема связана с графитом. Построение графиков с использованием графитового веб-интерфейса дает те же результаты, что и в графане - производная показывает пустой график, а при включении диапазона, превышающего последние 24 часа, отображается пустой график. Я проконсультировался с #graphite на irc.freenode.net, и они, похоже, подумали, что это проблема агрегации. Мой storage-aggregation.conf - пустой файл.   -  person Min.E.On    schedule 21.09.2016


Ответы (1)


Обновление: это произошло из-за того, что мой collectd был настроен на отправку образцов каждую секунду. Плагин statsd для collectd, однако, получал данные каждые 60 секунд, поэтому я получил None для большинства точек данных.

Я обнаружил это, проверив необработанные данные в Graphite, добавив &format=raw в конец запроса graphite-api в браузере, который дает вам значение каждой точки данных в виде списка, разделенного запятыми.

Временное исправление для этого заключалось в том, чтобы заключить графитовый запрос в keepLastValue(60). Однако это создает ступенчатый график, так как значение для каждого Нет (60 значений) становится последним допустимым значением в пределах 60 шагов. График производной этого затем становится широко разнесенным пилообразным графом.

Чтобы исправить это, я, вероятно, продолжу исправлять интервал сброса на collectd или переключусь на автономный экземпляр statsd и настрою по мере необходимости оттуда.

person Min.E.On    schedule 23.09.2016
comment
У меня аналогичная ситуация со сбором значений тайм-аута. Что вы имеете в виду, заключив в запрос о графите keepLastValue(60). Не могли бы вы показать точный пример? Например. У меня есть этот запрос - http://<domain>/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 секунд. - person Sandeepan Nath; 25.07.2017
comment
Применяете ли вы производную () после применения keepLastValue (60)? - person Sandeepan Nath; 25.07.2017
comment
См. Также здесь perehospital.cat/blog / для хорошего объяснения - person Mariano Paniga; 03.09.2018