Graphite

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 23:41, 28 февраля 2019.
Graphite
Cec.png
Разработчики: Orbitz
Выпущена: 2008
Постоянный выпуск: 4.0.8 / 2 февраля 2015 года
Состояние разработки: Развивается
Написана на: JavaScript
Операционная система: Кросс-платформенное ПО
Платформа: x86-64
Локализация: Английский
Лицензия: Apache-2.0
Веб-сайт http://graphiteapp.org/

Graphite - это масштабируемая графическая система реального времени. Это инструмент мониторинга масштаба предприятия, который хорошо работает на дешевом оборудовании. Приложение, которое собирает числовые данные временных рядов и отправляете их в обработчик Graphite, carbon , который хранит данные в специализированной базе данных Graphite. Затем данные можно визуализировать через веб-интерфейсы графита [Источник 1].

Особенности и преимущества

Зачем нужен Graphite

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

В частности, Graphite предназначен для обработки числовых данных временных рядов. Например, Graphite будет хорошо отображать цены на акции, потому что они представляют собой числа, которые со временем меняются. Будь то несколько точек данных или десятки показателей производительности от тысяч серверов [Источник 1].

Установка

Последние исходные архивы для Graphite-web, Carbon и Whisper можно получить со страницы загрузки проекта Graphite или последние ветки разработки можно клонировать со страницы проекта Github :

Установка будет происходить в директорию /opt/graphite, являющуюся директорией по умолчанию. Часть компонентов написана на Go, так что его также придется предварительно установить и прописать соответствующие переменные окружения. Установка подразумевает, что Go в системе один. Если у вас установлено несколько версий Go, то этот шаг можете пропустить и настроить нужную версию по своему усмотрению [Источник 2].

cd /opt
wget https://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> /etc/profile
echo 'export GOPATH=/opt/go' >> /etc/profile
echo 'export GOBIN="$GOPATH/bin"' >> /etc/profile
echo 'export PATH=$PATH:$GOBIN' >> /etc/profile
source /etc/profile
go env
# Вывод должен содержать следующие строчки
#GOBIN="/opt/go/bin"
#GOPATH="/opt/go"
#GOROOT="/usr/local/go"

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

Архитектура

Для хранения значений метрик во времени Graphite использует собственный бинарный формат Whisper, отчасти похожий на RRD, с тем лишь отличием, что в файле формата wsp каждое значение сопровождается временной отметкой. Это позволяет, например, при необходимости перезаписать исторические данные, что по определению невозможно в циклических базах типа rrd, такая задача в rrd решается выборкой данных и последующей перезаписью всего хранилища [Источник 2].

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

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

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

Рисунок 1 - Архитектура Graphite

Carbon домен

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

carbon-cache.py

carbon-cache.py принимает метрики по различным протоколам и записывает их на диск максимально эффективно. Это требует кэширования значений метрик в ОЗУ по мере их поступления и их сброса на диск с интервалом, используя базовую шепотную библиотеку. Он также предоставляет сервис запросов для метрических точек данных в памяти, используемых веб-приложением Graphite для извлечения «горячих данных».

carbon-cache.py для запуска требуется несколько основных файлов конфигурации:

  • carbon.conf

В этом разделе рассказывается, carbon-cache.py какие порты (2003/2004/7002), протоколы (с разделителями новой строки, pickle) и транспорты (TCP / UDP) следует прослушивать.

  • хранение schemas.conf

Определяет политику хранения входящих метрик на основе шаблонов регулярных выражений. Эта политика передается шепотом, когда .wspфайл предварительно выделен, и определяет, как долго хранятся данные.

carbon-relay.py

carbon-relay.py служит двум различным целям: репликация и разбиение.

При работе с , экземпляр может работать вместо сервера и передавать все входящие метрики на несколько бэкенд работает « на разных портах или хостов. RELAY_METHOD = rules carbon-relay.py

В режиме параметр определяет стратегию разделения на несколько бэкэндов. Тот же согласованный список хеширования может быть предоставлен веб-приложению с графитом для распространения чтения по нескольким бэкэндам. RELAY_METHOD = consistent-hashing DESTINATIONS carbon-cache.py CARBONLINK_HOSTS

carbon-relay.py настраивается через:

  • carbon.conf

[relay]Раздел определяет слушатель хоста / порта и RELAY_METHOD

  • релейно-rules.conf

С помощью set, кортежи шаблонов / серверов в этом файле определяют, какие метрики, соответствующие определенным правилам регулярных выражений, перенаправляются на какие хосты. RELAY_METHOD = rules

carbon-aggregator.py carbon-aggregator.py может быть запущен перед carbon-cache.py буферизацией метрик с течением времени, прежде чем сообщать о них шепотом . Это полезно, когда подробные отчеты не требуются, и могут помочь уменьшить нагрузку ввода-вывода и размер файла шепота из-за более низких политик хранения.

carbon-aggregator.py настраивается через:

  • carbon.conf

[aggregator]Раздел определяет слушатель и назначение хоста / порты.

  • Агрегация-rules.conf

Определяет временной интервал (в секундах) и функцию агрегирования (сумма или среднее) для входящих показателей, соответствующих определенному шаблону. В конце каждого интервала полученные значения агрегируются и публикуются carbon-cache.pyв виде единой метрики.

Функции

Функции используются для преобразования, объединения и выполнения вычислений на данных серии . Функции применяются с помощью интерфейса Composer или путем манипулирования target параметрами в API визуализации. Большинство функций применяются к одному списку серий . Функции с параметром *seriesLists могут принимать произвольное количество списков рядов. Чтобы передать несколько списков серий в функцию, которая принимает только один, используйте group() функцию.

  • absolute( seriesList )

Принимает одну метрику или подстановочный знак seriesList и применяет математическую функцию abs к каждой точке данных, преобразуя ее в абсолютное значение.

  • aggregate( seriesList , func , xFilesFactor = False )

Агрегировать ряды, используя указанную функцию.

  • aggregateLine( seriesList , func = 'Average' , keepStep = False )

Берет метрику или подстановочный знак seriesList и рисует горизонтальную линию на основе функции, примененной к каждой серии. Если для необязательного параметра keepStep установлено значение True, результат будет иметь тот же период времени и шаг, что и исходная серия. Примечание. По умолчанию средство визуализации графита объединяет точки данных путем их усреднения по времени. Если вы используете функцию 'min' или 'max' для aggregateLine, это может вызвать необычный разрыв в линии, проведенной этой функцией и самими данными. Чтобы это исправить, вы должны использовать функцию 'consolidateBy () с тем же аргументом функции, который вы используете для aggregateLine. Это обеспечит сохранение правильных точек данных и правильное выравнивание графика.

  • aggregateWithWildcards(seriesList, func, *positions)

Вызов агрегатора после вставки подстановочных знаков в заданную positions(s)

  • alias(seriesList, newName)

Принимает одну метрику или подстановочный знак seriesList и строку в кавычках. Печатает строку вместо имени метрики в легенде.

  • aliasByMetric(seriesList)

Принимает seriesList и применяет псевдоним, полученный из имени основной метрики [Источник 2].

Источники

  1. 1,0 1,1 Graphite // Graphiteapp. [2008—2019]. Дата обновления: 05.03.2018. URL: http://graphiteapp.org/ (дата обращения: 14.02.2019).
  2. 2,0 2,1 2,2 Graphite Documentation // Graphiteapp. [2008—2019]. Дата обновления: 15.03.2018. URL: https://graphite.readthedocs.io/en/latest/index.html (дата обращения: 14.02.2019).