Система визуализации статистики Graphite: Общие сведения

Организовать сбор статистики,- это не просто, а очень просто. Надо только сначала определиться,- нужна ли именно статистика, или душа мечтает о волшебном аналитическом инструменте уровня Business Intelligence. Различия систем таких классов следующие: статистика,- это сбор, хранение и отображение значений заранее известных метрик заранее определённым способом, а BI,- это скорее поиск и извлечение значений и зависимостей из необработанных наборов данных по заранее неизвестным критериям.


Статистика в Graphite,- это временные ряды, характеризующие абсолютные значения или изменения значений какой-либо измеряемой величины во времени. Каждый такой временной ряд (метрика или показатель) имеет собственное название. Для хранения значений метрик во времени Graphite использует собственный бинарный формат Whisper, отчасти похожий на RRD, с тем лишь отличием, что в файле формата wsp каждое значение сопровождается временной отметкой. Это позволяет, например, при необходимости перезаписать исторические данные, что по определению невозможно в циклических базах типа rrd, такая задача в rrd решается выборкой данных и последующей перезаписью всего хранилища. 

С точки зрения архитектуры, Graphite состоит из трёх компонент:

  • демон carbon-cache, принимающий значения метрик из сетевого сокета и сохраняющий их в хранилище (в файлах whisper)
  • демон carbon-relay, предназначенный для перенаправления метрик из одного сокета на другой или несколько других сокетов
  • graphite-web,- веб-интерфейс (на базе Python Django) отображения значений метрик, хранящихся в хранилище.
В простейшем варианте необходимо и достаточно установить carbon-cache и graphite-web. Carbon-relay понадобится в случае, если необходимо построить разветвлённую архитектуру, включающую в себя несколько удалённых точек сбора данных (коллекторов), или в случае, если необходимо обеспечить параллельное хранение данных на нескольких узлах (для резервирования или распределения нагрузки).


Если предполагается загружать в Graphite данные большого количества различных метрик, лучше заранее продумать структуру именования метрик. Вообще, графиту безразлично что именно используется в качестве имени метрики, можно выбрать что-то вроде supermetrikaserverakotoriyvskafupyatyisverhu,- и наслаждаться ровно до тех пор, пока таких названий не станет слишком много. Но лучше заложить структуру в названия метрик, разбивая их на смысловые части символом точки. При хранении данных и отображении в вебинтерфейсе точки в названиии метрики используются как разделители файловой структуры. 


Например, собственная внутренняя метрика carbon.agents.<имя сервера>.memUsage будет  отображаться в виде memUsage внутри папки <имя сервера> внутри agents внутри carbon. Carbon-cache будет хранить значения метрики в файле carbon/agents/<имя сервера>/memUsage.wsp. Такое свойство системы позволяет формировать удобную для поиска структуру представления данных. Желательно учитывать, что одинаковые по смыслу данные внутри одной ветки желательно должны располагаться на одном уровне вложения. Например, если статистика содержит однотипные метрики для парка серверов,- сравнить значения однотипной метрики на всех серверах сразу можно будет просто задав имя необходимой метрики для отображения с помощью маски (*-wildcard).


Разделение имён метрик на части, разделённые точками, удобно ещё по нескольким причинам: для хранения значений для каждого файла необходимо выбрать количество значений для хранения и способ аггрегирования для значений, которые вышли за выделенный диапазон. Задавать настройки для каждого файла вручную,- дело долгое и неблагодарное. К счастью, Carbon-relay также понимает настройки для файлов, имена которых заданы масками, что существенно упрощает дело.

После установки и настройки carbon-cache, данные в систему можно загружать сразу, используя простой текстовый протокол с помощью netcat:
echo "local.random.dice 3 `date +%s`" | nc 127.0.0.1 2003