Я установил 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 ч, чтобы показать его по умолчанию).