Анализ метрик системы с помощью InfluxDB в CentOS 7

InfluxDB – это база данных временных рядов, метрик и аналитики. БД временных рядов предназначены для хранения данных, полученных в результате последовательных измерений, выполненных в течение определенного периода времени. Эти данные могут состоять из таких элементов, как системные метрики (например, использование CPU и памяти) и метрики приложения (ошибки приложения и вызовы конечной точки REST и т.д.).

Чем дольше работает система, тем больше будет объем накопленных данных. Инструмент InfluxDB предоставляет средство для эффективного хранения этих данных. Он предназначен для работы с DevOps, метриками, данными датчиков, а также мониторинга и аналитики в реальном времени. Используя InfluxDB, вы можете быстро создать мощную инфраструктуру мониторинга в реальном времени, которая также обеспечивает исторический анализ.

В этом мануале вы узнаете:

  • Как установить и настроить InfluxDB на CentOS 7.
  • Как передать данные мониторинга системы из демона статистики collectd в InfluxDB.
  • Как использовать SQL-подобный язык запросов InfluxDB для быстрого анализа производительности отслеживаемой системы.
  • Как использовать стек инструментов визуализации Grafana для создания многофункционального дашборда, чтобы лучше изучить и визуализировать данные, хранящиеся в экземпляре InfluxDB.

Требования

  • Сервер CentOS 7 (64 бита), настроенный по этому мануалу.
  • Необходимый объем RAM, CPU и хранилища зависит от объема ваших данных. Как правило, достаточно иметь 2GB RAM и 2 CPU.
  • 4 GB своп-пространства. Читайте Как добавить своп на CentOS 7.

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

InfluxDB распространяется как автономная система. Это означает, что у нее нет внешних зависимостей; все, что вам нужно для запуска базы данных, предоставляется в пакете релиза, который используется во время установки, что упрощает весь процесс.

Сначала обновите систему, чтобы на сервере были последние исправления ошибок и безопасности.

sudo yum -y update

Установите последнюю версию InfluxDB.

sudo yum -y install  https://s3.amazonaws.com/influxdb/influxdb-latest-1.x86_64.rpm

Примечание: Версия может отличаться.

После этого в /opt/influxdb/versions/0.8.8 появятся новые файлы, а в /etc/init.d будут созданы симлинки для сервисов управления InfluxDB.

2: Настройка и запуск InfluxDB

Теперь нужно настроить InfluxDB: отключить анонимную передачу данных и расширить установленный по умолчанию предел времени чтения.

Основной конфигурационный файл InfluxDB – это /opt/influxdb/shared/config.toml. Он использует удобочитаемый (благодаря своей очевидной семантике) формат TOML, который очень похож на формат конфигурации INI.

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

sudo cp /opt/influxdb/shared/config.toml /opt/influxdb/shared/config.toml_backup

Начиная с версии 0.7.1, InfluxDB передает анонимные данные на m.influxdb.com каждые 24 часа. Чтобы минимизировать использование полосы пропускания, отключите эту отчетность. Сначала откройте конфигурационный файл в текстовом редакторе.

sudo nano /opt/influxdb/shared/config.toml

Найдите конфигурационный ключ reporting-disabled и измените его значение на true. После этого раздел должен выглядеть так:

. . .
# Change this option to true to disable reporting.
reporting-disabled = true
[logging]
. . .

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

В том же файле конфигурации найдите read-timeout и измените его значение с 5s на 10s.

. . .
# However, if a request is taking longer than this to complete, could be a problem.
read-timeout = "10s"
[input_plugins]
. . .

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

Теперь запустите демон InfluxDB:

sudo /etc/init.d/influxdb start

При успешном запуске сценарий менеджера сервисов предоставит следующий вывод.

Setting ulimit -n 65536
Starting the process influxdb [ OK ]
influxdb process was started [ OK ]

После запуска InfluxDB перейдите по адресу http://your_server_ip:8083 в браузере, чтобы убедиться, что сервис InfluxDB запущен и работает. На странице будет интерфейс управления по умолчанию, который состоит из разделов Connect и Hostname and Port Settings.

3: Изменение учетных данных InfluxDB

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

Войдите в пользовательский интерфейс InfluxDB, используя имя по умолчанию root и пароль root в разделе Connect. Оставьте базу данных пустой и нажмите синюю кнопку Connect.

В верхнем меню на следующей странице выберите Cluster Admins. Это откроет страницу администрирования пользователей. В разделе Username нажмите root и измените пароль, дважды введя новый пароль и нажав синюю кнопку Change Password.

Чтобы убедиться, что пароль изменился, нажмите кнопку Disconnect, а затем снова войдите в систему с помощью нового пароля.

4: Создание базы данных

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

Нажмите на Databases в верхнем меню веб-интерфейса. В разделе Create a Database (под Database Details) введите metrics в качестве имени базы данных. Параметры по умолчанию в настройках Shard Spaces можно оставить. Затем нажмите синюю кнопку Create Database в правом нижнем углу, чтобы создать базу данных.

Если база данных была успешно создана, вы увидите ее в верхней части экрана рядом со ссылкой Explore Data.

Чтобы убедиться, что база данных, которую мы создали, работает правильно, можно записать и проверить в ней тестовые данные, используя интерфейс UI. Нажмите на Explore Data, чтобы перейти к интерфейсу данных. Вы увидите экран Data Interface.

Здесь вы можете записать некоторые тестовые данные в базу данных. Вы также сможете выполнять специальные запросы к данным, хранящимся в БД, и создать базовую визуализацию.

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

В разделе Write Point в поле Time Series Name введите test_metric, а в Values введите {«value»: 23.4}. Затем нажмите кнопку Write Point, чтобы ввести данные. Вы увидите всплывающее окно 200 OK.

Повторите процесс , указывая то же имя временного ряда, для каждого из следующих значений: {«value»: 13.1}, {«value»: 13.1}, {«value»: 78.1} и {«value»: 90.4}. Обратите внимание, что значение 13,1 намеренно записывается дважды. В общей сложности получится пять значений.

Теперь, когда мы записали несколько точек данных, мы можем их проверить. В разделе Read Points в верхней части страницы в поле Query введите следующий запрос:

select * from test_metric

Нажмите кнопку Execute Query. В результате должны быть все точки данных для временного ряда test_metric, которые хранятся в БД. На экране появится график.

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

Также можно использовать идентификаторы столбцов, чтобы сузить область поиска. Например, чтобы найти события со значением 13,1, введите следующий поисковый запрос:

select * from test_metric where value = 13.1

Это выведет две строки.

Для большей детализации данные в InfluxDB организованы по временным рядам, в нашем примере это test_metric. Каждый временной ряд имеет набор точек данных, соответствующих событию. Мы создали пять событий, когда ввели данные. Каждое событие имеет время, порядковый номер и несколько столбцов, аналогичных метрике, которую нужно отследить. В данном примере у нас есть одна метрика value в каждом из пяти событий.

5: Установка и настройка collectd

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

Сначала включите репозиторий EPEL (Extra Packages for Enterprise Linux):

sudo yum -y install http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

Установите демон:

sudo yum -y install collectd

После успешной установки пакета будет создан ряд двоичных файлов, общих библиотек и файлов конфигурации. Основные файлы, о которых следует знать, это файл конфигурации collectd, /etc/collectd.conf, и основной двоичный файл демона, /usr/sbin/collectd. Сначала создайте копию исходного файла конфигурации.

sudo cp /etc/collectd.conf /etc/collectd.conf_backup

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

sudo nano /etc/collectd.conf

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

В верхней части конфигурации, в разделе Global, вы увидите следующее. То, что нужно отредактировать, выделено красным.

. . .
#Hostname    "localhost"
#FQDNLookup   true
#BaseDir     "/var/lib/collectd"
#PIDFile     "/var/run/collectd.pid"
#PluginDir   "/usr/lib64/collectd"
#TypesDB     "/usr/share/collectd/types.db"
. . .

Раскомментируйте поля Hostname, BaseDir, PIDFile, PluginDir и TypesDB, удалив символ # в начале строки. Кроме того, установите в поле Hostname значение influenxdb. В результате этот раздел файла должен выглядеть следующим образом:

Hostname    "influxdb"
#FQDNLookup   true
BaseDir     "/var/lib/collectd"
PIDFile     "/var/run/collectd.pid"
PluginDir   "/usr/lib64/collectd"
TypesDB     "/usr/share/collectd/types.db"

Затем прокрутите вниз до раздела LoadPlugin, где в алфавитном порядке перечислено большое количество плагинов. Найдите и раскомментируйте строки LoadPlugin network и LoadPlugin uptime, удалив символ # в начале строки.

Затем нужно настроить collectd для отправки данных в InfluxDB.

Прокрутите вниз до раздела Plugin Configuration. После разделителя разделов (как показано ниже) добавьте конфигурацию сетевого плагина (она выделена красным).

. . .
##############################################################################
# Plugin configuration                                                       #
#----------------------------------------------------------------------------#
# In this section configuration stubs for each plugin are provided. A desc-  #
# ription of those options is available in the collectd.conf(5) manual page. #
##############################################################################
<Plugin network>

Server "127.0.0.1" "8096"


</Plugin>

#<Plugin "aggregation">
. . .

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

sudo /usr/sbin/collectd -t

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

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

sudo service collectd start

6: Настройка InfluxDB для обработки метрик collectd

Чтобы сохранить метрики системы, собираемые с помощью collectd, в InfluxDB, нужно включить и настроить плагин InfluxDB для ввода collectd.

Сначала откройте файл конфигурации InfluxDB в редакторе.

sudo nano /opt/influxdb/shared/config.toml

Найдите плагин input_plugins.collectd, который выглядит так. То, что нужно отредактировать, выделено красным.

. . .
# Configure the collectd api
[input_plugins.collectd]
enabled = false
# address = "0.0.0.0" # If not set, is actually set to bind-address.
# port = 25826
# database = ""
# types.db can be found in a collectd installation or on github:
# https://github.com/collectd/collectd/blob/master/src/types.db
# typesdb = "/usr/share/collectd/types.db" # The path to the collectd types.db file
. . .

Измените его в соответствии с приведенным ниже примером, внеся следующие изменения:

  • В enabled установите значение true.
  • Измените порт на 8096.
  • Укажите имя БД — metrics.
  • Раскомментируйте строки port, database, and typesdb.

. . .
# Configure the collectd api
[input_plugins.collectd]
enabled = true
# address = "0.0.0.0" # If not set, is actually set to bind-address.
port = 8096
database = "metrics"
# types.db can be found in a collectd installation or on github:
# https://github.com/collectd/collectd/blob/master/src/types.db
typesdb = "/usr/share/collectd/types.db" # The path to the collectd types.db file
. . .

Сохраните и закройте файл. Перезапустите InfluxDB, чтобы активировать новую конфигурацию.

sudo /etc/init.d/influxdb restart

Теперь убедитесь, что InfluxDB принимает данные collectd. В Data Interface в UI, который вы использовали в разделе 5, введите следующий запрос в поле Query под Read Points, а затем нажмите кнопку Execute Query.

list series

Если InfluxDB получает данные из collectd, вы должны увидеть длинный список временных рядов.

Теперь можно начать анализ производительность системы, изучив эти данные, как в разделе 5. Например, следующий запрос позволит вам наблюдать за использованием памяти в вашей системе:

select * from "influxdb/memory/memory-used"

Визуализация данных четко показывает изменения в использовании памяти, которые были записаны для вашего экземпляра InfluxDB.

7: Установка и запуск Grafana

Веб-интерфейс InfluxDB можно использовать для изучения данных и визуализации тенденций системы на основе временных рядов. Однако UI слишком прост и не очень хорошо подходит для представления данных метрик, которые мы собираем.

Grafana — это многофункциональная панель метрик, которая хорошо интегрируется с InfluxDB. Grafana дает возможность создавать информационные дашборды.

Чтобы установить Grafana, введите следующую команду.

sudo yum -y install  https://grafanarel.s3.amazonaws.com/builds/grafana-2.0.2-1.x86_64.rpm

Чтобы запустить стек Grafana, перезапустите демон systemd:

sudo systemctl daemon-reload

Затем запустите Grafana:

sudo systemctl start grafana-server

Проверьте статус:

sudo systemctl status grafana-server

Если все прошло успешно, менеджер сервисов подтвердит, что сервис Grafana запущен и что веб-интерфейс обслуживается. Вывод, который вы получите в своем терминале, будет начинаться так:

grafana-server.service - Starts and stops a single grafana instance on this system
Loaded: loaded (/usr/lib/systemd/system/grafana-server.service; disabled)
Active: active (running) since Tue 2015-06-02 18:59:17 EDT; 3s ago
. . .

8: Изменение учетных данных Grafana

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

Для этого можно использовать UI или конфигурационный файл Grafana. UI проще, потому мы используем его.

После запуска Grafana откройте страницу http://your_server_ip:3000. Войдите в пользовательский интерфейс Grafana, используя имя по умолчанию admin и пароль admin. Кликните на логотип Graphana в верхнем левом углу экрана, затем кликните admin в появившемся меню. Вы попадете на страницу настроек профиля.

Нажмите Change Password в верхнем меню. Введите новый пароль и нажмите Change Password.

9: Интеграция базы данных InfluxDB и Grafana

Теперь пора добавить базу данных InfluxDB в качестве источника в Grafana.

Чтобы добавить источник данных, откройте боковое меню, кликнув на значок Grafana. В боковом меню выберите Data Sources. Нажмите на ссылку Add New в верхнем мею, чтобы открыть экран определения источника данных.

Заполните эту форму, используя следующие значения:

  • Name: influxdb
  • Type: в выпадающем меню выберите InfluxDB 0.8.x.
  • Default: поставьте галочку. Источник данных по умолчанию будет предварительно выбран для новых дашбордов.
  • Url: http://localhost:8086
  • Access: proxy
  • Basic Auth: оставьте пустым.
  • Database: metrics
  • User: root
  • Password: пароль БД InfluxDB root (вы установили его в разделе 4).

Нажмите Add.

10: Создание дашбордов Grafana

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

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

Перейдите на домашнюю страницу Grafana (http://your_server_ip:3000). Нажмите на ссылку Home в верхнем заголовке, чтобы открыть экран со списком дашбордом. В нижней части этого экрана нажмите + New. Это создаст новый дашборд.

Нажмите на шестеренку в верхнем меню дашборда, а затем нажмите Settings.

Вы увидите экран, который используется для изменения основных настроек панели управления. Измените значение Title – вместо New dashboard введите System Overview. Затем кликните на значок дискеты в верхнем меню, чтобы сохранить дашборд.

Теперь заполните дашборд элементами отображения, чтобы создать информационный обзор системы.

В дашборде кликните меню элементов управления строками, которое представляет собой маленький зеленый прямоугольник, расположенный в левом верхнем углу. В этом меню наведите курсор на панель Add Panel и нажмите Graph. Это создаст в дашборде пустой график.

Нажмите на заголовок диаграммы — no title (click here) — и затем нажмите edit в появившемся меню. Это приведет вас в меню управления графиком. Откройте вкладку General и измените поле заголовка на Network.

Затем откройте вкладку Metrics, чтобы перейти к построителю запросов. В поле series  можно указать метрики, которые мы хотим использовать в качестве источника данных для графика. Начните вводить interface; затем вам будет предложено выбрать автозаполнение. Выберите метрику influxdb/interface-eth0/if_errors.

Затем нажмите + Add query внизу меню настройки диаграммы. Это добавит вторую строку запроса в построитель запросов. Используйте тот же метод, что и раньше, чтобы добавить запрос для метрики influxdb/interface-eth0/if_octets и для influxdb/interface-eth0/if_packets.

Нажмите на ссылку Back to Dashboard, чтобы перейти в дашборд, который теперь содержит график, отображающий сетевые тренды вашей системы. Нажмите значок дискеты в верхнем меню, чтобы сохранить новый график и дашборд.

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

Заключение

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

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

InfluxDB и Grafana имеют много дополнительных возможностей и вариантов использования. Вы можете выполнить более глубокий анализ поведения ваших систем, используя агрегатные функции InfluxDB. Возможно, вы также захотите начать сбор данных из распределенных систем, чтобы сравнить производительность по нескольким системам, или провести анализ других метрик несистемного уровня (например, количество вызовов API для конечной точки REST). В официальной документации InfluxDB вы найдете ряд полезных инструментов и библиотек.

Tags: , , , ,