Графитовый график - как быстро мы можем обновить график?

Мы пытаемся использовать Graphite для графической веб-системы (почти) в реальном времени. Однако мы не можем ускорить графит быстрее, чем скорость обновления 1 секунды. В конечном итоге мы хотели бы получать обновления 100 мс.

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

информация о времени для шепота, похоже, использует временные метки UNIX

Насколько масштабируем графит?

С точки зрения ЦП, Graphite масштабируется по горизонтали как на внешнем, так и на внутреннем интерфейсе, что означает, что вы можете просто добавить больше машин в микс, чтобы увеличить пропускную способность. Это также отказоустойчиво в том смысле, что потеря серверной машины приведет к потере минимального объема данных (независимо от того, что эта машина кэшировала в памяти) и не нарушит работу системы, если у вас остается достаточно ресурсов для обработки нагрузки.

С точки зрения ввода-вывода, под нагрузкой Graphite очень быстро выполняет множество крошечных операций ввода-вывода с большим количеством разных файлов. Это связано с тем, что каждая отдельная метрика, отправляемая в Graphite, хранится в собственном файле базы данных, подобно тому, как много инструментов (drraw, Cacti, Centreon и т. Д.), Созданных поверх RRD, работают. Фактически, Graphite изначально использовал RRD для хранения, пока не возникли фундаментальные ограничения, которые потребовали нового механизма хранения.

Большой объем (несколько тысяч различных показателей обновляются ежеминутно) в значительной степени требует хорошего RAID-массива. Серверная часть Graphite кэширует входящие данные, если диски не могут справиться с большим количеством выполняемых небольших операций записи (каждая точка данных занимает всего несколько байтов, но большинство дисков не могут выполнять более нескольких тысяч операций ввода-вывода в секунду, даже если они крошечные). Когда это происходит, движок базы данных Graphite, шепотом, позволяет Carbon записывать сразу несколько точек данных, таким образом увеличивая общую пропускную способность только за счет сохранения избыточных данных в кэш-памяти в памяти до тех пор, пока они не будут записаны.

Насколько графики в реальном времени?

Очень. Даже при большой нагрузке, когда количество метрик, поступающих в каждый временной интервал, намного превышает скорость, с которой ваша система хранения может выполнять операции ввода-вывода, и множество точек данных кэшируется в конвейере хранилища (см. Предыдущий вопрос для объяснения. ), Graphite по-прежнему рисует графики в реальном времени. Хитрость заключается в том, что когда веб-приложение Graphite получает запрос на построение графика, оно одновременно извлекает данные с диска, а также из кэша предварительного хранения (который может быть распределен, если у вас несколько внутренних серверов) и объединяет два источника данные для создания графика в реальном времени.

Также здесь отображаются только секунды и не дробные точки: http://graphite.readthedocs.org/en/latest/config-carbon.html и from and until must be a time specification conforming to the AT-STYLE time specification described здесь: http://oss.oetiker.ch/rrdtool/doc/rrdfetch.en.html. http://graphite.wikidot.com/url-api-reference

Так что это? Графит быстрый? или это просто быстрая обработка больших наборов данных - мы ищем простой в использовании веб-приемник пакетных данных для визуального отображения - Graphite казался отличным решением, но теперь, когда все это настроено и запущено, я предполагаю, что мы просто потратили впустую много времени

Спасибо!


person GregM    schedule 01.10.2013    source источник


Ответы (1)


Graphite будет хранить не более одной точки данных для максимальной заданной точности (полученные дополнительные точки данных будут отброшены) в вашем storage-schemas.conf. Максимально возможная точность - 1 секунда. например удержания = 1 с: 6 ч, 1 мин: 7 дн, 10 мин: 5 лет

Для достижения ваших целей вам нужно поставить агрегатор перед Graphite. Агрегатор принимает все метрики и объединяет данные, сбрасывая их в хранилище Graphite, чтобы соответствовать схеме хранилища. Агрегатор выполнит вычисления (среднее, сумма, среднее и т. Д.) С метриками и отправит их. например за последнюю секунду вы в среднем потратили 14 мс на обработку запроса ИЛИ за последние 10 секунд общее количество запросов составило 4234.

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

Два распространенных варианта: StatsD и Графит предоставляется в агрегаторе углерода.

** StatsD, ИМО - это то, что вам нужно. Это сетевой демон, который вы запускаете отдельно и отправляете ему по UDP. Тем не менее, вы можете сделать то же самое (например, UDP) с carbon-aggregator.py.

person Matt Self    schedule 03.10.2013
comment
Могу ли я изменить некоторые механики графита, чтобы обеспечить более высокую точность? (Подумайте о приложениях осциллографов). То, что вы сказали, имеет смысл для многих приложений - но мы стараемся, чтобы информация на графике отображалась в режиме реального времени - 1-секундные обновления будут очень неуклюжими - данные, которые мы отправляем в графит, уже обработаны и обрабатываются. усредненные данные - person GregM; 03.10.2013
comment
Нет. Графит - Whisper db- был разработан для того, чтобы занимать место в хранилище на низком и постоянном уровне с течением времени (например, RRD). Данные временного ряда должны быть введены в один из определенных временных шагов (секунда, минута, час). Похоже, вам может понадобиться рассмотреть другой инструмент. - person Matt Self; 03.10.2013