Я установил Graphite через Puppet (https://forge.puppetlabs.com/dwerder/graphite) с nginx и PostgresSQL. Когда я отправляю ему данные вручную, он создает метрику, но все его точки данных имеют значение «None» (также известное как null). Это также происходит, если я запускаю 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, graphite 0.9.12 (через pip).
PS: Я написал о своих попытках устранения неполадок здесь - Графит показывает показатели, но нет данных - Устранение неполадок
ОБНОВИТЬ:
xFilesFactor = 0.1
(вместо 0,5) или установите самую низкую точность на 1 м вместо <число от 1 до 49> с. - см. комментарии под принятым ответом или вопросом Graphite Answers. Согласно документам: "xFilesFactor
должен быть числом с плавающей запятой от 0 до 1 и указывает, какая часть слотов предыдущего уровня удержания должна иметь ненулевые значения для агрегирования до ненулевого значения. По умолчанию - 0,5."Таким образом, кажется, что без учета указанной точности в 1 с данные агрегируются до 1 минуты и в конечном итоге имеют значение None, потому что менее 50% значений в течение минутного периода не являются None.РЕШЕНИЕ
Итак, @jlawrie привел меня к решению. Оказывается, данные на самом деле есть, но не агрегированы ни к чему, причина двоякая:
=> Решение состоит в том, чтобы изменить первую точность с 1 до 10 и не забыть выбрать более короткий период, когда я хочу видеть необработанные данные (или увеличить время хранения до 24 часов, чтобы показывать его по умолчанию).
Я столкнулся с той же проблемой, используя тот же марионеточный модуль. Я не совсем уверен, почему, но изменение политики хранения по умолчанию, похоже, исправляет это, например
class { 'graphite':
gr_storage_schemas => [
{
name => 'carbon',
pattern => '^carbon\.',
retentions => '1m:90d'
},
{
name => 'default',
pattern => '.*',
retentions => '1m:14d'
}
],
}
Есть много способов, которыми Graphite может потерять данные, поэтому я действительно стараюсь избегать его использования. Позвольте мне начать с простого - попробуйте подключить ваше приложение, подождите секунду (буквально одну секунду), а затем выведите данные с отметкой времени. Я обнаружил, что во многих случаях это решит именно эту проблему. Еще одна вещь, которую вы должны попробовать, - это отправлять данные с частотой, которая намного выше, чем частота, с которой данные регистрируются графитом. Я углублюсь в это немного подробнее. Еще одна частая ошибка - использование утилиты whper-resize.py, которая у меня действительно не сработала. Если ваши данные еще не важны, просто удалите файлы шепота и позвольте им быть созданы с новыми настройками хранения.
Файлы хранилища Graphite, файлы шепота, вместо того, чтобы хранить данные в виде точки со значением и временем (как вы предоставили программу), фактически хранят их как серию слотов, в которых сохраняется значение. Затем программа пытается выяснить, какой слот соответствует периоду времени, используя файл данных хранения. Если он получает данные, которые не помещаются в слот, я считать происходит то, что он использует среднее значение, минимум или максимум в зависимости от другого файла в том же каталоге, что и файл хранения. Я обнаружил, что лучший способ не допустить, чтобы это все испортило, - это отправлять данные с частотой, намного превышающей частоту, с которой графит сохранял данные. Честно говоря, это становится очень сложным - есть не только периоды хранения для графита и алгоритмы усреднения, которые заполняют точки (я думаю), но эти значения ТАКЖЕ применяются к файлам шепота. Когда они не совпадают, произойдут очень странные вещи, поэтому, пока ваша конфигурация не будет работать, я бы предложил несколько раз удалять ваши файлы шепота и позволить графиту воссоздать их.
Эта программа действительно поразила меня тем, что она работает довольно глючно, поэтому, если вы столкнетесь с чем-то вроде этого, не думайте, что это ваша вина.