воскресенье, 17 января 2016 г.

Мониторинг с помощью InfluxData. Часть 3. Chronograf

В предыдущих сериях 

В первой статье мы познакомились с InfluxData - платформой для работы с временными рядами, настроили базу данных временных рядов InfluxDB. Во второй статье настроили сбор метрик и дальнейшую отправку в InfluxDB с помощью Telegraf. В текущей статье научимся рисовать графики значений метрик с помощью Chronograf.

Знакомство с Chronograf

Chronograf - это отдельное web приложение, которое вы можете развернуть для исследования временных рядов. Позволяет гибко настраивать графики временных рядов, которые хранятся в InfluxDB.

Ключевые возможности

  • Простая установка и настройка.
  • Тесная интеграция с InfluxDB позволяет очень легко подключиться к данным.
  • Возможность настраивать узкоспециализированные визуализации метрик.
  • Удобный построитель запросов к базе данных, разработанный для работы с большими массивами данных.
  • Возможность объединять несколько графиков на одной инструментальной панели (dashboard).

Установка и настройка Chronograf

Скачиваем последнюю версию Cronograf с сайта https://influxdata.com/downloads/ и устанавливаем:
wget https://s3.amazonaws.com/get.influxdb.org/chronograf/chronograf_0.4.0_amd64.deb
sudo dpkg -i chronograf_0.4.0_amd64.deb
Приложение распаковывается по умолчанию в /opt/chronograf. В этой папке находится файл с настройками config.toml:
# Chronograf configuration

# TCP address that Chronograf should bind to.
# Bind to localhost by default, so that Chronograf should be inaccessible from the public internet.
# If you do want Chronograf to be accessible to the public internet on port 10000, use the next line:
# Bind = "0.0.0.0:10000" # <- This will expose Chronograf to the public internet. Use with caution!
# Can be overridden with environment variable CHRONOGRAF_BIND.
Bind = "127.0.0.1:10000"

# Path to local database file to use or create for storing Chronograf application data.
# Can be overridden with environment variable CHRONOGRAF_LOCAL_DATABASE.
LocalDatabase = "/opt/chronograf/chronograf.db"

# DSN to connect to MySQL for storing Chronograf application data.
# If set, takes precedence over LocalDatabase setting.
# Can be overridden with environment variable CHRONOGRAF_MYSQL_DSN.
# Uncomment and update if you want to use MySQL.
# MySQLDSN = "user:password@tcp(192.0.2.1:3306)/some_database"

# Maximum response size in bytes, for queries that pass through Chronograf.
# Setting this to a reasonable value will ensure that your browser does not crash
# if a query results in an excessively large response.
# If you do have a query that is too large, you will see an error message about the
# query response being too large.
# Can be overridden with environment variable CHRONOGRAF_QUERY_RESPONSE_BYTES_LIMIT.
QueryResponseBytesLimit = 2500000
Коментарии к параметрам исчерпывающие. Не будем изменять конфигурацию, запустим chronograf командой:
sudo service chronograf start
chronograf started
Проверяем доступность перейдя по ссылке в браузере http://127.0.0.1:10000/:
Chronograf start page
Стартовая страница Chronograf
Видим стартовую страницу Chronograf. Если не работает, то смотрим лог ошибок:
cat /var/log/chronograf/chronograf.stderr 
[chronograf] 2016/01/12 21:09:38 Starting Chronograf (version 0.4.0)
[chronograf] 2016/01/12 21:09:38 open /opt/chronograf/chronograf.db: permission denied
Нажимаем на кнопку "Add new server"
Форма добавления сервера InfluxDB
Заполняем поля, нажимаем Add. Видим, что добавился локальный сервер базы данных InfluxDB и статус у него online:
Список серверов InfluxDB
Нажимаем кнопку "DONE" в левом верхнем углу. Видим 2 вкладки "Graphs" и "Dashboards". В каждой вкладке есть кнопка "Добавить". Chronograf позволяет настроить набор графиков, а затем разместить этот набор на инструментальной панели Dashboard.

Создание графиков

Создадим график статистики использования оперативной памяти. Нажимаем на + вводим название графика:
нажимаем Save и попадаем на форму построения графика. На данной форме можно в интерактивном режиме сформировать запросы InfluxQL к базе данных с помощью построителя запросов, и сразу видеть результат выборки.

Для начала необходимо установить настройки базы данных по умолчанию для построителя запроса, а именно

Servers=Local InfluxDB, Databases=telegraf, Retention Policies=default и установить флаг Make Default во включенное положение. Данные настройки позволят выбирать мышкой необходимые параметры запроса. Нажимаем Apply.
Можно можно приступать к построению запроса. В блоке FILTER BY можно выбрать измерение (measurement), которое хотим отобразить, а также набор тегов, по которым хотим отфильтровать набор выбираемых точек:
Выбираем measurement=mem_used_percent. И тег host=echernyshev.
В блоке EXTRACT BY настраивается агрегация выбираемых значений. Так как у нас метрики собираются каждые 10 секунд, то для получения более гладкого графика необходимо агрегировать значения.  Агрегируем значения за одну минуту и используем для агрегации функции mean (среднее значение), max (максимальное значение), min (минимальное значение).

Нажимаем кнопку "GROUP BY" и устанавливаем время агрегации 1m.

Вот что в итоге получилось:

Видим 3 линии, которым соответствуют минимальное, максимальное и среднее значения доступной памяти за минуту. Обратите внимание, в правом верхнем углу есть контрол для выбора "глубины запроса" в нашем случае мы выбрали точки за последний час (Past hour). Разберемся в построенном InfluxQL запросе, который получился в ходе настройки графика:
SELECT 
    mean("value") AS "mean_value", 
    max("value") AS "max_value", 
    min("value") AS "min_value" 
FROM 
    "telegraf"."default"."mem_used_percent" 
WHERE 
    time > now() - 1h AND "host"='echernyshev' 
GROUP BY 
    time(1m)

Если вы знакомы с SQL, то построение InfluxQL становится интуитивно понятным. В фильтрации точек (предложение WHERE) могут быть использованы поля (fields), колонка time и значения тегов. Группировку (GROUP BY) можно проводить по времени и по тегам. В случае группировки по тегам, для каждого тега будет своя линия на графике. В нашем случае тег всего один host=echernyshev.

Загрузка процессора

Создадим график для загрузки процессора. Добавляем новый график с названием "Загрузка процессора [echernyshev]". Разместим на одном графике несколько измерений:

  • cpu_usage_system - использование процессора системой;
  • cpu_usage_user - использование процессора пользователем;
  • cpu_usage_idle - простой процессора;
Для каждого измерения необходимо сформировать отдельный InfluxQL запрос.
Настройки для графика cpu_usage_system:

Для добавления на график нового запроса, нужно нажать на кнопку "ADD QUERY":

Настройки для графика cpu_usage_user:

Настройки для графика cpu_usage_idle:

Во всех трех запросах делаем группировку по полю time в течении 1 минуты. В итоге получился график:

Свободное место на дисках

На моем компьютере установлено 2 жестких диска. Один разделен на 2 раздела, которые смонтированы в / и в /opt соответственно. Второй жесткий диск смонтирован в /opt/hdd. Создадим три графика, отображающие свободное место на в указанных трех папках. Telegraf записывает свободное место на диске в измерение под названием disk_free. Каждая папка сохраняется под тегом "path" в этом измерении. То есть нам нужно в каждом графике выбрать из measurement'а  disk_free и отфильтровать по тегу path. Например, для path=/ настройки запроса для графика выглядят так:
Аналогично для path=/opt и path=/opt/hdd.

Создание панелей (dashboards)

Chronograf кроме графиков позволяет создавать панели (dashboards). Панели - это сборники графиков с любой контекстной точки зрения. Графики сохраняемые отдельно от панелей можно добавлять на разные панели. Создание панелей интуитивно понятно и позволяет добавить на панель как уже существующие графики, так и добавить новые на лету. Создадим для наших графиков панель с названием "Основные параметры  [echernyshev]" и удобно разместим графики:


Заключение

Таким образом, в данной статье мы научились устанавливать и настраивать средство для отображения временных рядов Chronograf. Научились настраивать графики основных метрик таких как загрузка процессора, использование оперативной памяти, занятое место на дисках. Научились компоновать из графиков панели (dashboards). Для более глубокого изучения Chronograf можете обратиться к документации.
На данный момент мы умеем сохранятьсобирать, визуализировать метрики. А в следующей статье научимся реагировать на отклонения от нормальных значений метрик с помощью Kapacitor - последнего приложения из TICK стека.

P.S.
Инструментарий для отображения метрик в Chronograf на данный момент очень скудный, потому что проект достаточно молодой. Если необходим более мощный инструмент для отображения графиков, то можно использовать Grafana, которая хорошо интегрирована с InfluxDB. Но эта уже совсем другая история, заслуживающая отдельной статьи.