Стек 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 можно найти здесь.