Я установил Graphite через Puppet ( https://forge.puppetlabs.com/dwerder/graphite ) с nginx и PostgresSQL. Когда я отправляю ему данные вручную, он создает метрику, но все его точки данных имеют значение «Нет» (иначе говоря, ноль). Это также происходит, если я запускаю example-client.py, поставляемый с Graphite.
echo "jakub.test 42 $(date +%s)" | nc 0.0.0.0 2003 # Carbon listens at 2003
# A minute or so later:
$ whisper-fetch.py --pretty /opt/graphite/storage/whisper/jakub/test.wsp | head -n1
Sun May 4 12:19:00 2014 None
$ whisper-fetch.py --pretty /opt/graphite/storage/whisper/jakub/test.wsp | tail -n1
Mon May 5 12:09:00 2014 None
$ whisper-fetch.py --pretty /opt/graphite/storage/whisper/jakub/test.wsp | grep -v None | wc -l
0
А также:
$ python /opt/graphite/examples/example-client.py
# Wait until it sends two batches of data ...
$ whisper-fetch.py /opt/graphite/storage/whisper/system/loadavg_15min.wsp | grep -v None | wc -l
0
Согласно ngrep, это данные, поступающие в порт [из более поздней попытки] (строка 3):
####
T 127.0.0.1:34696 -> 127.0.0.1:2003 [AP]
jakub.test 45 1399362193.
####^Cexit
23 received, 0 dropped
Это соответствующая часть /opt/graphite/conf/storage-schemas.conf
:
[default]
pattern = .*
retentions = 1s:30m,1m:1d,5m:2y
Есть идеи, что не так? Собственные показатели и данные Carbon отображаются в пользовательском интерфейсе. Спасибо!
Окружающая среда: Ubuntu 13.10 Saucy, графит 0.9.12 (через пипс).
PS: я написал о моих попытках устранения проблем здесь - Графит Показывает Метрики, но Нет Данных - Устранение проблем
ОБНОВЛЕНИЕ :
- Точки данных в шепотных файлах записываются только каждые 1 мин, даже если в политике хранения указана более высокая точность, например «1 с» или «10 с».
- Обходной путь для игнорируемых данных: либо используйте схему агрегирования с
xFilesFactor = 0.1
(вместо 0,5), либо установите наименьшую точность равной 1 м вместо <число между 1-49> с. - см. комментарии ниже принятого ответа или графического ответа. Согласно документам : «xFilesFactor
должно быть числом с плавающей запятой от 0 до 1 и указывает, какая часть слотов предыдущего уровня хранения должна иметь ненулевые значения для агрегирования в ненулевое значение. По умолчанию 0,5 ». Таким образом, кажется, что без учета заданной точности 1 с, данные агрегируются за 1 минуту и заканчиваются значением None, потому что менее 50% значений в минутном периоде не являются None.
РЕШЕНИЕ
Так @jlawrie приведет меня к решению. Получается, что данные на самом деле есть, но они сводятся к нулю, причина двойная:
- И пользовательский интерфейс, и шепотная выборка показывают данные, агрегированные с максимальной точностью, охватывающей весь период запроса, который по умолчанию равен 24 часам. Т.е. что-либо с сохранением <1d никогда не будет отображаться в пользовательском интерфейсе или при извлечении, если вы не выберете более короткий период. Так как мой период хранения в течение 1 с составлял 30 минут, мне нужно было выбрать период <= последние 30 минут, чтобы фактически увидеть необработанные данные с наивысшей точностью, которые собираются.
- При агрегировании данных (от 1 с до 1 мин в моем случае) Graphite по умолчанию требует, чтобы 50% (xFilesFactor = 0,5) точек данных в периоде имели значение. Если нет, он игнорирует существующие значения и объединяет их в None. Так что в моем случае мне нужно было бы отправлять данные как минимум 30 раз в минуту (30 означает 50% от 60 с = 1 мин), чтобы они отображались в агрегированном 1-минутном значении. Но мое приложение отправляет данные только каждые 10 секунд, поэтому у меня есть только 6 из 60 возможных значений.
=> решение состоит в том, чтобы изменить первую точность от 1 с до 10 с и не забудьте выбрать более короткий период, когда я хочу видеть необработанные данные (или увеличить его время хранения до 24 ч, чтобы показать его по умолчанию).
источник
Ответы:
Я столкнулся с той же проблемой, используя тот же модуль кукол. Я не совсем уверен, почему, но изменение политики хранения по умолчанию, кажется, исправить это, например
источник
'1m:1d,5m:2y
работает (данные записаны),10s:30m,1m:1d,5m:2y
нет. На самом деле, из файла .wsp кажется, что гранулярность <1m игнорируется, поскольку временные метки для 10s: ... все еще с интервалом в 1 минуту - «08:17:00, 08:18:00 и т. Д.»xFilesFactor
(по умолчанию), которая применяется здесь, является средней иxFilesFactor=0.5
(см./opt/graphite/conf/storage-aggregation.conf
). Когда я меняю имяsum
и изменяю0.1
имя, данные сохраняются (хотя точка все еще находится на частоте 1 м):echo -e "jakub.test.10s30m+1m1d+5m2y.count 42 $(date +%s)" | nc 0.0.0.0 2003
xFilesFactor = 0.1
, Agg. Метод не имеет значения (по крайней мере, все среднее, последнее, сумма работы).Есть много способов, которыми Graphite потеряет данные, поэтому я действительно стараюсь избегать их использования. Позвольте мне начать с простого - попробуйте подключить ваше приложение, подождите секунду (буквально одну секунду) и затем выведите данные с метками времени. Я обнаружил, что во многих случаях это решит эту проблему. Еще одна вещь, которую вы должны попробовать - это отправлять данные с частотой, которая намного выше, чем частота, с которой графит регистрирует данные. Я углублюсь в это немного больше. Еще одна частая ошибка - использование утилиты whisper-resize.py, которая на самом деле не работает для меня. Если ваши данные еще не важны, просто удалите шепотные файлы и дайте им создать новые параметры хранения.
Файлы хранения Graphite, шепотные файлы, вместо того, чтобы хранить данные в виде точки со значением и временем (как вы указали в программе), фактически сохраняют их как серию слотов, в которых хранится значение. Затем программа пытается выяснить, какой слот соответствует периоду времени, используя файл данных хранения. Если он получает данные, которые не совсем вписываются в слот, я думаю,что происходит, когда он использует среднее, минимальное или максимальное значение в зависимости от другого файла в том же каталоге, что и файл хранения. Я обнаружил, что лучший способ уберечься от всего этого - отправлять данные с частотой, намного превышающей частоту, с которой графит хранит данные. Это, честно говоря, становится очень сложным - существуют не только периоды хранения графита и алгоритмы усреднения, которые заполняют точки (я думаю), но и эти значения также применяются к файлам шепота. Когда они не совпадают, произойдут очень странные вещи, поэтому до тех пор, пока ваш конфиг не заработает, я бы предлагал повторно удалять ваши шепотные файлы и позволять графиту воссоздавать их.
Эта программа действительно показалась мне глючной, поэтому, если вы столкнетесь с чем-то подобным, не думайте, что это ваша вина.
источник