Назад | Перейти на главную страницу

Графит показывает «Нет» для всех точек данных, хотя я отправляю ему данные

Я установил 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: Я написал о своих попытках устранения неполадок здесь - Графит показывает показатели, но нет данных - Устранение неполадок

ОБНОВИТЬ:

  1. Точки данных в файлах с шепотом записываются только каждые 1 мин., Даже если политика хранения определяет более высокую точность, например «1 с» или «10 с».
  2. Обходной путь для игнорирования данных: либо используйте схему агрегации с xFilesFactor = 0.1 (вместо 0,5) или установите самую низкую точность на 1 м вместо <число от 1 до 49> с. - см. комментарии под принятым ответом или вопросом Graphite Answers. Согласно документам: "xFilesFactor должен быть числом с плавающей запятой от 0 до 1 и указывает, какая часть слотов предыдущего уровня удержания должна иметь ненулевые значения для агрегирования до ненулевого значения. По умолчанию - 0,5."Таким образом, кажется, что без учета указанной точности в 1 с данные агрегируются до 1 минуты и в конечном итоге имеют значение None, потому что менее 50% значений в течение минутного периода не являются None.

РЕШЕНИЕ

Итак, @jlawrie привел меня к решению. Оказывается, данные на самом деле есть, но не агрегированы ни к чему, причина двоякая:

  1. И пользовательский интерфейс, и шепотка показывают данные агрегированный с максимальной точностью, охватывающей весь период запроса, по умолчанию 24 часа. Т.е. все, что имеет retention <1d, никогда не будет отображаться в пользовательском интерфейсе или выборке, если вы не выберете более короткий период. Поскольку мой период хранения в течение 1 с составлял 30 минут, мне нужно было выбрать период <= последние 30 минут, чтобы действительно увидеть необработанные данные с максимальной точностью.
  2. При агрегировании данных (от 1 секунды до 1 минуты в моем случае) Graphite по умолчанию требует, чтобы 50% (xFilesFactor = 0,5) точек данных за период имели значение. В противном случае он проигнорирует существующие значения и объединит их в None. Поэтому в моем случае мне нужно было бы отправлять данные не менее 30 раз в течение минуты (30 - это 50% от 60 с = 1 мин), чтобы они отображались в агрегированном 1-минутном значении. Но мое приложение отправляет данные только каждые 10 секунд, поэтому у меня есть только 6 из 60 возможных значений.

=> Решение состоит в том, чтобы изменить первую точность с 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, файлы шепота, вместо того, чтобы хранить данные в виде точки со значением и временем (как вы предоставили программу), фактически хранят их как серию слотов, в которых сохраняется значение. Затем программа пытается выяснить, какой слот соответствует периоду времени, используя файл данных хранения. Если он получает данные, которые не помещаются в слот, я считать происходит то, что он использует среднее значение, минимум или максимум в зависимости от другого файла в том же каталоге, что и файл хранения. Я обнаружил, что лучший способ не допустить, чтобы это все испортило, - это отправлять данные с частотой, намного превышающей частоту, с которой графит сохранял данные. Честно говоря, это становится очень сложным - есть не только периоды хранения для графита и алгоритмы усреднения, которые заполняют точки (я думаю), но эти значения ТАКЖЕ применяются к файлам шепота. Когда они не совпадают, произойдут очень странные вещи, поэтому, пока ваша конфигурация не будет работать, я бы предложил несколько раз удалять ваши файлы шепота и позволить графиту воссоздать их.

Эта программа действительно поразила меня тем, что она работает довольно глючно, поэтому, если вы столкнетесь с чем-то вроде этого, не думайте, что это ваша вина.