Мониторинг системных метрик с помощью стека TICK в Ubuntu 16.04

Стек TICK – это набор программ от разработчиков базы данных временных рядов InfluxDB. Он состоит из следующих компонентов:

  • Telegraf собирает данные временного ряда из разных источников.
  • InfluxDB хранит данные временного ряда.
  • Chronograf визуализирует данные временных рядов.
  • Kapacitor отвечает за оповещения и обнаружение аномалий в данных временных рядов.

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

Данное руководство поможет установить и настроить стек TICK для мониторинга сервера.

Требования

  • Сервер Ubuntu 16.04 (руководство по начальной настройке сервера вы найдёте здесь).
  • Пользователь с доступом к sudo.
  • Настроенный брандмауэр.
  • Аккаунт GitHub (опционально; нужен для защиты интерфейса Chronograf).

1: Репозиторий стека TICK

Компоненты стека TICK нельзя загрузить из стандартного репозитория системы. Все компоненты TICK хранятся в репозитории Influxdata. Добавьте его на сервер.

Это можно сделать с помощью команд:

curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -
source /etc/lsb-release
echo "deb https://repos.influxdata.com/${DISTRIB_ID,,} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list

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

sudo apt-get update

2: Установка InfluxDB и настройка аутентификации

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

Чтобы установить InfluxDB, введите:

sudo apt-get install influxdb

После завершения установки запустите сервис InfluxDB:

sudo systemctl start influxdb

Проверьте состояние сервиса:

systemctl status influxdb

Команда должна вернуть:

influxdb.service - InfluxDB is an open-source, distributed, time series database
Loaded: loaded (/lib/systemd/system/influxdb.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2017-03-13 15:20:53 CST; 11s ago
Docs: https://docs.influxdata.com/influxdb/
Main PID: 1619 (influxd)
CGroup: /system.slice/influxdb.service
└─1619 /usr/bin/influxd -config /etc/influxdb/influxdb.conf

База данных InfluxDB запущена. Теперь нужно настроить аутентификацию, чтобы ограничить доступ к данным. Создайте администратора.

Запустите консоль InfluxDB:

influx

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

CREATE USER "8host" WITH PASSWORD '8host_admin' WITH ALL PRIVILEGES

Примечание: Вместо условных данных 8host и 8host_admin укажите имя и пароль своего пользователя.

Убедитесь, что пользователь был создан:

show users

Команда должна показать:

user  admin
----  -----
8host true

Закройте консоль InfluxDB:

exit

Откройте конфигурационный файл InfluxDB, /etc/influxdb/influxdb.conf, в текстовом редакторе.

sudo nano /etc/influxdb/influxdb.conf

Найдите раздел [http], раскомментируйте опцию auth-enabled и установите значение true:

...
[http] # Determines whether HTTP endpoint is enabled.
# enabled = true
# The bind address used by the HTTP service.
# bind-address = ":8086"
# Determines whether HTTP authentication is enabled.
auth-enabled = true
...

Сохраните и закройте файл. Перезапустите сервис InfluxDB:

sudo systemctl restart influxdb

3: Установка и настройка Telegraf

Telegraf – это открытый агент, предназначенный для сбора метрик и данных системы или сервисов. Собранные данные Telegraf передаёт в InfluxDB.

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

sudo apt-get install telegraf

Сервис Telegraf запускается автоматически.

Telegraf использует плагины для ввода и вывода данных. Плагином вывода по умолчанию является InfluxDB. Поскольку ранее вы включили аутентификацию пользователей в IndexDB, нужно отредактировать конфигурационный файл Telegraf и указать в нём имя пользователя и пароль БД. Откройте файл Telegraf в редакторе:

sudo nano /etc/telegraf/telegraf.conf

Найдите раздел [outputs.influxdb] и введите имя пользователя и пароль IndexDB.

[[outputs.influxdb]] ## The full HTTP or UDP endpoint URL for your InfluxDB instance.
## Multiple urls can be specified as part of the same cluster,
## this means that only ONE of the urls will be written to each interval.
# urls = ["udp://localhost:8089"] # UDP endpoint example
urls = ["http://localhost:8086"] # required
## The target database for metrics (telegraf will create it if not exists).
database = "telegraf" # required
...
## Write timeout (for the InfluxDB client), formatted as a string.
## If not provided, will default to 5s. 0s means no timeout (not recommended).
timeout = "5s"
username = "8host"
password = "8host_admin"
## Set the user agent for HTTP POSTs (can be useful for log differentiation)
# user_agent = "telegraf"
## Set UDP payload size, defaults to InfluxDB UDP Client default (512 bytes)
# udp_payload = 512

Сохраните и закройте файл. Перезапустите Telegraf:

sudo systemctl restart telegraf

Убедитесь, что сервис работает:

systemctl status telegraf

Команда вернёт следующий результат:

telegraf.service - The plugin-driven server agent for reporting metrics into InfluxDB
Loaded: loaded (/lib/systemd/system/telegraf.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2017-03-14 15:24:41 CST; 1min 26s ago
Docs: https://github.com/influxdata/telegraf
Main PID: 1752 (telegraf)
CGroup: /system.slice/telegraf.service
└─1752 /usr/bin/telegraf -config /etc/telegraf/telegraf.conf -config-directory /etc/telegraf/telegraf.d

Теперь Telegraf собирает данные и записывает их в InfluxDB. Откройте консоль InfluxDB и посмотрите, какие данные Telegraf сохраняет в базе.

influx -username '8host' -password '8host_admin'

Пройдя аутентификацию, введите команду:

show databases

В выводе вы увидите БД telegraf.

name: databases
name
----
_internal
telegraf

Примечание: Если в списке баз данных нет базы telegraf, проверьте настройки Telegraf и убедитесь, что вы правильно указали учётные данные InfluxDB.

Чтобы переключиться на БД telegraf, введите:

use telegraf

Запросите метрики, которые собирает Telegraf:

show measurements
name: measurements
name
----
cpu
disk
diskio
kernel
mem
processes
swap
system

Как видите, агент Telegraf собрал и сохранил в этой базе данных много информации.

Существует более 60 плагинов ввода данных для Telegraf. Telegraf может собирать метрики популярных сервисов и СУБД:

  • Apache
  • Cassandra
  • Docker
  • Elasticsearch
  • Graylog
  • IPtables
  • MySQL
  • PostgreSQL
  • Redis
  • SNMP и многих других сервисов.

Чтобы добавить плагин ввода, используйте такой синтаксис:

telegraf -usage plugin-name

Закройте консоль InfluxDB:

exit

4: Установка Kapacitor

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

Чтобы установить Kapacitor, введите:

sudo apt-get install kapacitor

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

sudo nano /etc/kapacitor/kapacitor.conf

Найдите раздел [[influxdb]] и укажите в нём имя и пароль пользователя InfluxDB.

# Multiple InfluxDB configurations can be defined.
# Exactly one must be marked as the default.
# Each one will be given a name and can be referenced in batch queries and InfluxDBOut nodes.
[[influxdb]] # Connect to an InfluxDB cluster
# Kapacitor can subscribe, query and write to this cluster.
# Using InfluxDB is not required and can be disabled.
enabled = true
default = true
name = "localhost"
urls = ["http://localhost:8086"] username = "8host"
password = "8host_admin"
...

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

Запустите Kapacitor:

sudo systemctl start kapacitor

Убедитесь, что Kapacitor работает. Запросите список задач:

kapacitor list tasks

Если сервис Kapacitor работает, вы увидите на экране пустой список задач:

ID                            Type      Status    Executing Databases and Retention Policies

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

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

Загрузите и установите последнюю версию:

wget https://dl.influxdata.com/chronograf/releases/chronograf_1.2.0~beta5_amd64.deb
sudo dpkg -i chronograf_1.2.0~beta5_amd64.deb

Запустите сервис Chronograf:

sudo systemctl start chronograf

Примечание: Если вы включили брандмауэр ufw, разблокируйте порт 8888:

sudo ufw allow 8888/tcp

Читайте также: Настройка брандмауэра UFW на сервере Ubuntu 16.04

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

http://your_server_ip:8888

Вы увидите приветственную страницу приложения:

Welcome to Chronograf

Введите имя и пароль пользователя InfluxDB, а затем нажмите Connect New Source.

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

Теперь нужно подключить Chronograf к Kapacitor для отправления оповещений.

Наведите курсор на последний элемент в левом меню навигации и нажмите Kapacitor, чтобы открыть страницу конфигурации.

Используйте данные подключения по умолчанию (в руководстве имя пользователя и пароль для Kapacitor не были установлены). Нажмите Connect Kapacitor. Как только Kapacitor успешно подключится, вы увидите раздел Configure Alert Endpoints.

Kapacitor поддерживает несколько конечных точек для отправки оповещений:

  • HipChat
  • OpsGenie
  • PagerDuty
  • Sensu
  • Slack
  • SMTP
  • Talk
  • Telegram
  • VictorOps

По умолчанию выбран самый простой способ подключения – SMTP. В поле From email укажите почтовый адрес, с которого будут отправляться оповещения. Затем укажите данные сервера SMTP (значения по умолчанию можно не менять, если у вас есть sendmail). Нажмите Save.

6: Создание оповещений

Наведите курсор на левое меню навигации и нажмите Kapacitor Rules. Затем нажмите Create New Rule.

В первом разделе выберите временной ряд, нажав на telegraf.autogen. Затем выберите систему из появившегося списка. После этого выберите load1. Вы сразу увидите соответствующий график в следующем разделе.

Над графиком найдите поле Send Alert where load1 is Greater Than и введите 0.8.

В поле Alert Message вставьте следующий текст:

{{ .ID }} is {{ .Level }} value: {{ index .Fields "value" }}

Наведите курсор на записи в разделе Templates, чтобы получить описание каждого поля.

В выпадающем списке Send this Alert to выберите Smtp. Укажите почтовый адрес.

По умолчанию сообщения приходят в формате JSON.

{
"Name":"system",
"TaskName":"chronograf-v1-50c67090-d74d-42ba-a47e-45ba7268619f",
"Group":"nil",
"Tags":{
"host":"centos-tick"
},
"ID":"TEST:nil",
"Fields":{
"value":1.25
},
"Level":"CRITICAL",
"Time":"2017-03-08T12:09:30Z",
"Message":"TEST:nil is CRITICAL value: 1.25"
}

Вы можете настроить более удобные для восприятия сообщения, которые будут приходить на почту. Для этого введите сообщение в текстовое поле Put email body text here.

Вы можете переименовать это правило. Для этого щелкните по его имени в верхнем левом углу страницы и введите новое имя.

Нажмите Save Rule в правом верхнем углу, чтобы завершить настройку этого правила.

Чтобы протестировать новое оповещение, создайте скачок CPU. Для этого используйте команду dd, которая будет читать данные из /dev/zero и отправлять их в /dev/null.

dd if=/dev/zero of=/dev/null

Пусть команда поработает несколько минут. Это создаст скачок CPU. Чтобы остановить команду, нажмите CTRL+C.

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

Примечание: Убедившись, что можете получать уведомления, не забудьте остановить команду dd. Просто нажмите CTRL+C.

7: Безопасность Chronograf

По умолчанию доступ к данным может получить любой пользователь, если он знает адрес сервера, на котором работает приложение Chronograf. Такое допустимо в среде тестирования, но только не в производстве. Chronograf поддерживает аутентификацию OAuth для Google, Heroku и GitHub. Настройте аутентификацию через аккаунт GitHub.

Зарегистрируйте новое приложение в GitHub. Войдите в свою учётную запись и перейдите по этой ссылке.

Заполните форму:

  • Application name: Chronograf (или другое описательное имя).
  • Homepage URL:  http://your_server_ip:8888.
  • Authorization callback URL: http://your_server_ip:8888/oauth/github/callback.
  • Нажмите Register application, чтобы сохранить параметры.
  • Скопируйте значения Client ID и Client Secret.

Затем откорректируйте сценарий systemd для Chronograf, чтобы включить поддержку аутентификации.

sudo nano /lib/systemd/system/chronograf.service

Найдите раздел [Service] и отредактируйте строку ExecStart=:

[Service] User=chronograf
Group=chronograf
ExecStart=/usr/bin/chronograf --host 0.0.0.0 --port 8888 -b /var/lib/chronograf/chronograf-v1.db -c /usr/share/chronograf/canned -t 'secret_token' -i 'your_github_client_id' -s 'your_github_client_secret' -o 'your_github_organization'
KillMode=control-group
Restart=on-failure

secret_token требуют все провайдеры OAuth. Укажите здесь любую строку. Также нужно указать Github Client ID, Github Client Secret и Github Organization

Важно! Если вы пропустите параметр Github Organization, любой пользователь Github сможет войти в Chronograf. Создайте Github Organization и добавьте в организацию заведомо безопасных пользователей, чтобы ограничить доступ.

Сохраните файл. Перезапустите Chronograf.

sudo systemctl daemon-reload
sudo systemctl restart chronograf

Откройте интерфейс Chronograf:

http://your_server_ip:8888

На приветственной странице появится кнопка Login with Github. Нажмите на неё, чтобы авторизоваться с помощью аккаунта Github.

Заключение

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

Официальную документацию TICK можно найти здесь.

Tags: , , , , ,

Добавить комментарий