Установка и использование Graphite на сервере Ubuntu 14.04

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

Существует много разных способов получения и визуализации такого рода информации Одно из предназначенных для этого приложений называется Graphite.

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

Читайте также: Отслеживание статистики сайта (инструменты Graphite, StatsD и CollectD)

Данный мануал поможет установить Graphite на сервер Ubuntu 14.04.

1: Установка Graphite

Для начала нужно загрузить и установить компоненты Graphite. Graphite состоит из нескольких компонентов: веб-приложения, бэкэнд-хранилища под названием Carbon и библиотеки базы данных whisper.

Вообще Graphite довольно сложно установить, но, к счастью, официальный репозиторий Ubuntu 14.04 предоставляет все требуемые компоненты.

Обновите индекс пакетов и установите их:

sudo apt-get update
sudo apt-get install graphite-web graphite-carbon

Во время установки система спросит, хотите ли вы, чтобы Carbon удалил файлы базы данных, если вы когда-либо решите удалить эту программу. Выберите «No», в противном случае есть риск потерять всю собранную статистику. Если вам понадобится свежая установка, вы можете вручную удалить файлы (в var/lib/graphite/whisper).

В целом, установка Graphite уже готова к работе.

2: Настройка БД для Django

Хотя данными Graphite управляет Carbon и библиотека whisper, веб-приложение зависит от Python-приложения Django и ему нужно где-то хранить данные.

По умолчанию оно использует базу данных SQLite3. Однако эта БД не так надежна, как полноценная система управления реляционными базами данных, поэтому лучше настроить приложение для использования PostgreSQL. PostgreSQL гораздо лучше справляется с большими наборами данных и устраняет некоторые потенциальные проблемы.

Установка PostgreSQL

Чтобы установить СУБД PostgreSQL, введите:

sudo apt-get install postgresql libpq-dev python-psycopg2

Эта команда установить систему БД, а также библиотеки Python, с помощью которых Graphite сможет взаимодействовать с БД.

Создание пользователя и БД

После установки системы управления базами данных нужно создать пользователя и базу данных PostgreSQL для Graphite.

Откройте интерактивную командную строку PostgreSQL, указав в команде psql системного пользователя postgres:

sudo -u postgres psql

Теперь нужно создать учетную запись пользователя базы данных, которую Django будет использовать для работы. Пользователь будет называться graphite. Выберите надежный пароль для этого пользователя.

CREATE USER graphite WITH PASSWORD 'password';

Теперь можно создать БД и передать права на нее пользователю graphite. БД тоже будет называться graphite, чтобы показать ее связь с пользователем.

CREATE DATABASE graphite WITH OWNER graphite;

Закройте сессию PostgreSQL:

\q

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

3: Настройка веб-приложения Graphite

База данных и пользователь готовы к работе. Теперь необходимо изменить настройки Graphite, чтобы приложение могло использовать эти компоненты. Есть и другие настройки, на которые следует обратить внимание.

Откройте конфигурационный файл веб-приложения Graphite:

sudo nano /etc/graphite/local_settings.py

Сначала нужно указать секретный ключ, который будет использоваться как соль для создания хэша. Раскомментируйте параметр SECRET_KEY и укажите в нем длинную уникальную строку символов.

SECRET_KEY = 'a_salty_string'

Затем нужно указать часовой пояс. Это повлияет на время, отображаемое в графиках, поэтому этот параметр важно установить. Установите свой часовой пояс, как указано в столбце TZ в этом списке.

TIME_ZONE = 'America/New_York'

Также нужно настроить аутентификацию для защиты данных графика. Вы сможете создать учетную запись пользователя после синхронизации с БД. Чтобы включить аутентификацию, раскомментируйте эту строку:

USE_REMOTE_USER_AUTHENTICATION = True

Затем найдите определение словаря DATABASES. Укажите данные базы Postgres. Вы должны изменить значения NAME, ENGINE, USER, PASSWORD и HOST.

В результате этот раздел будет таким:

DATABASES = {
'default': {
'NAME': 'graphite',
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'USER': 'graphite',
'PASSWORD': 'password',
'HOST': '127.0.0.1',
'PORT': ''
}
}

Примечание: Вместо условных данных введите свои значения. Кроме того, убедитесь, что вы установили параметр HOST. Если вы оставите его без значения, Postgres подумает, что вы используете одноранговую аутентификацию, что не сработает в данном случае.

Сохраните и закройте файл.

4: Синхронизация базы данных

Теперь можно синхронизировать базу данных, чтобы создать правильную структуру.

Для этого введите:

sudo graphite-manage syncdb

Вам будет предложено создать учетную запись суперпользователя для базы данных. Создайте нового пользователя, чтобы вы могли войти в интерфейс. Его можно назвать как угодно. Это позволит вам сохранять графики и изменять интерфейс.

5: Настройка Carbon

Теперь нужно настроить Carbon, хранилище данных для Graphite.

Сначала нужно включить Carbon ка сервис, чтобы добавить его в автозагрузку.

sudo nano /etc/default/graphite-carbon

В этом service-файле хранится только один параметр, который включает его автозагрузку. Измените его значение на true:

CARBON_CACHE_ENABLED=true

Откройте конфигурационный файл Carbon:

sudo nano /etc/carbon/carbon.conf

Большая часть параметров этого файла уже содержит правильные значения. Нужно только включить ротацию логов, установив для этой директивы значение true:

ENABLE_LOGROTATION = True

Сохраните и закройте файл.

Настройка схем хранения данных

Откройте файл storage-schemas. Он определяет, как долго Carbon хранит данные и насколько они подробны.

sudo nano /etc/carbon/storage-schemas.conf

В файле вы найдете такие записи:

[carbon]
pattern = ^carbon\.
retentions = 60:90d
[default_1min_for_1day]
pattern = .*
retentions = 60s:1d

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

Слова в скобках – это заголовки разделов, которые используются для определения нового раздела. В каждом разделе есть определение шаблона и политика хранения данных.

Определение шаблона – это регулярное выражение, которое используется для проверки любой информации, отправленной в Carbon (в том числе и названия метрик). В первом примере шаблон проверяет, начинается ли имя метрики со строки «carbon.».

Политика хранения данных определяется наборами чисел. Каждый набор состоит из интервала мониторинга метрики, за которым следует двоеточие, а затем идет срок хранения этих значений. Вы можете определить несколько наборов чисел, разделив их запятыми.

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

Перед разделом по умолчанию поместите новый раздел:

[test]
pattern = ^test\.
retentions = 10s:10m,1m:1h,10m:1d

Он будет собирать все метрики, которые начинаются с «test.». Он будет собирать данные 3 раза и хранить их с различной детализацией. Первое определение (10 с: 10 м) создает точку данных каждые десять секунд. Эти значения хранятся всего десять минут.

Второе определение (1m:1h) создает точку данных каждую минуту. Оно собирает точки за последнюю минуту (получается 6 точек, так как предыдущая запись собирает данные каждые 10 секунд) и создает на их основе свою точку. По умолчанию это делается путем усреднения значений, но позже это можно изменить. Данные на этом уровне детализации хранятся в течение одного часа.

Последнее определение (10m:1d), будет создавать точку данных каждые 10 минут, агрегируя данные так же, как и второе определение. Эти данные хранятся один день.

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

Сохраните и закройте файл.

Методы агрегирования хранилищ

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

Как говорилось ранее, по умолчанию Carbon принимает при агрегировании среднее значение. Это означает, что Carbon будет усреднять полученные данные для создания метки (это не касается только самого подробного архива).

Однако это не всегда желательно. Например, если вам нужно, чтобы в графике отображалось общее количество раз, когда то или иное событие происходило в разные периоды времени, вы должны добавить точки данных и переопределить усредненные данные.

Эти настройки хранятся в файле storage-aggregation.conf. Скопируйте этот файл из каталога examples в каталог конфигураций Carbon.

sudo cp /usr/share/doc/graphite-carbon/examples/storage-aggregation.conf.example /etc/carbon/storage-aggregation.conf

Откройте файл:

sudo nano /etc/carbon/storage-aggregation.conf

Он похож на предыдущий файл. В нем вы найдете такие записи:

[min]
pattern = \.min$
xFilesFactor = 0.1
aggregationMethod = min

Имя раздела и шаблон определяются так же, как и в файле storage-schemas. Это просто произвольное имя и шаблон для сбора метрик.

Параметр XFilesFactor позволяет указать минимальный процент значений, которые Carbon будет использовать для агрегации. По умолчанию все значения равны 0,5; это означает, что для агрегирования точки  должны быть доступны 50% более подробных точек данных.

Это можно использовать для того, чтобы не исказить реальную ситуацию при создании точек данных. Например, если 70% данных удаляются из-за сетевых проблем, вы не будете создавать точку, которая правдиво представляет только 30% данных.

Далее определяется метод агрегации. Доступны значения average, sum, last, max и min. Очень важно выбрать правильный метод агрегации. В противном случае вы рискуете получить неправильные записи данных. Выбор метода полностью зависит от метрик, которые вы отслеживаете.

Примечание: Если вы отправляете точки данных Graphite чаще, чем в кратчайший интервал архива, некоторые из данных будут потеряны! Это связано с тем, что Graphite применяет агрегацию только при переходе от подробных архивов к более обобщенным. При создании подробной точки данных Graphite записывает только самые последние данные за интервал.

Сохраните и закройте файл.

Запустите Carbon:

sudo service carbon-cache start

6: Установка и настройка Apache

Для работы с веб-интерфейсом вам понадобится веб-сервер Apache. Graphite предоставляет конфигурационные файлы для Apache «из коробки».

Установите компоненты веб-сервера.

sudo apt-get install apache2 libapache2-mod-wsgi

После завершения установки нужно отключить файл виртуального хоста по умолчанию, поскольку он конфликтует с новым файлом.

sudo a2dissite 000-default

Скопируйте виртуальный хост, предоставляемый Graphite, в каталог sites-available:

sudo cp /usr/share/graphite-web/apache2-graphite.conf /etc/apache2/sites-available

Включите виртуальный хост:

sudo a2ensite apache2-graphite

Перезапустите сервис:

sudo service apache2 reload

7: Проверка веб-интерфейса

Теперь нужно проверить работу веб-интерфейса.

Откройте в браузере страницу:

http://server_domain_name_or_IP

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

Если вы откроете дерево Graphite в левой панели, вы увидите запись для Carbon. Здесь вы можете найти графики данных Carbon.

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

Сообщения о метриках должны содержать имя метрики, значение и временную метку. Создать сообщение можно в терминале. Используйте при этом схему test. Временную метку можно создать с помощью команды date. Введите:

echo "test.count 4 `date +%s`" | nc -q0 127.0.0.1 2003

Если вы обновите страницу, а затем откроете дерево Graphite, вы увидите новую метрику test. Запустите приведенную выше команду несколько раз с интервалом не менее 10 секунд. Помните, что Graphite хранит только последнее значение, если более одного значения отправляется в течение кратчайшего интервала времени.

С помощью веб-интерфейса запросите в Graphite данные за последние 8 минут. На графике метрики test кликните значок в виде белого прямоугольника с зеленой стрелкой. Он предложит выбрать последние данные.

Во всплывающем окне выберите 8 минут. Нажмите Update Graph, чтобы визуализировать самые последние данные. Вы должны увидеть график, не содержащий практически никакой информации. Это связано с тем, что у приложения слишком мало данных.

Однако, если вы просмотрите график за последние 15 минут (при условии, что вы запустите команду еще несколько раз в интервале от 10 секунд до 1 минуты), вы увидите другой график.

Это связано с тем, что первый архив не сохраняет данные в течение пятнадцати минут, поэтому Graphite запрашивает данные во втором архиве. График выглядит по-другому, потому что Graphite получил метрику «count», которая совпадает с одним из определений агрегации.

Благодаря этому Graphite добавляет значения, полученные приложением в течение больших интервалов времени, не усредняя их.

Заключение

Теперь у вас есть рабочая установка Graphite. Чтобы не отправлять ей данные вручную, используйте сопроводительные инструменты. Чтобы настроить демон collectd для сбора статистики и отправки данных в Graphite, обратитесь к статье Сбор метрик для Graphite с помощью Collectd в Ubuntu 14.04.

Tags: , , , ,