Мониторим систему при помощи TICK на CentOS 7

Если вы системный администратор, то наверное вам уже приходилось иметь дело с временными рядами (time series): статистикой скачивания файлов, статистикой запросов к серверам, данными об использовании системных и аппаратных ресурсов виртуальными машинами.

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

Telegraf –  утилита для сбора измерений временных рядов.

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

Chronograf  – инструмент для визуализации временных рядов. Web приложение для настройки графиков и dashboard’ов.

Kapacitor – утилита для обработки значений временных рядов и контроля отклонений значений.

Вы конечно можете использовать каждый из этих компонентов по отдельности, но если вы будете использовать их вместе, у вас будет масштабируемая интегрированная система с открытым исходным кодом для сбора/хранения/визуализации/управления временными рядами (time-series data).

В этой статье я покажу вам как настроить и использовать эту платформу в качестве системы мониторинга. Я покажу вам как узнать информацию о работе вашего CPU  и как получить оповещение на вашу электронную почту, если что-то  пойдет не так.

Что нужно

Прежде чем начать, вам понадобится следующее:

Сервер на CentOS 7 (если не знаете как – прочитайте руководство)

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

Шаг 1 – Добавление репозитория стека TICK

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

Создадим новый файл:

$ sudo vi /etc/yum.repos.d/influxdata.repo

В новом файле нужны примерно такие настройки:

$ /etc/yum.repos.d/influxdata.repo

[influxdb]
name = InfluxData Repository – RHEL $releasever
baseurl = https://repos.influxdata.com/rhel/$releasever/$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key

Сохраните файл и выйдите из редактора. Теперь вы можете  приступить к установке и настроить InfluxDB. 

Шаг 2 –  Установка InfluxDB и настройка проверки подлинности

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

InfluxDB отлично подходит для мониторинга операций, метрик приложений и аналитики в реальном времени.

Для установки InfluxDB выполните следующую команду:

$ sudo yum install influxdb

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

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

$ sudo systemctl start influxdb

Затем убедитесь, что служба работает правильно:

$ systemctl status influxdb

Далее вы увидите статус, который говорит о том, что служба запущена:

[secondary_label Output
influxdb.service – InfluxDB is an open-source, distributed, time series database
Loaded: loaded (/usr/lib/systemd/system/influxdb.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2017-02-07 13:19:31 EET; 2min 46s ago
Docs: https://docs.influxdata.com/influxdb/
Main PID: 14290 (influxd)

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

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

$ influx

Чтобы создать нового пользователя admin нужно выполнить следующую команду. В моем примере я буду создавать пользователя sammy с паролем sammy_admin, но если вы хотите создавайте свое:

> CREATE USER “sammy” WITH PASSWORD ‘sammy_admin‘ WITH ALL PRIVILEGES

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

> show users

Если все прошло успешно, то вы увидите результат:

user admin
—- —–
sammy true

Теперь, когда пользователь создан выходите из консоли InfluxDB:

> exit

Теперь откройте файл /etc/influxdb/influxdb.conf в вашем текстовом редакторе. Это файл конфигурации InfluxDB.

$ sudo vi /etc/influxdb/influxdb.conf

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

/etc/influxdb/influxdb.conf


[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

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

Шаг 3 – Установка и настройка Telegraf

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

Для установки Telegraf выполните следующую команду:

$ sudo yum install telegraf

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

$ sudo vi /etc/telegraf/telegraf.conf

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

/etc/telegraf/telegraf.conf

[[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 = “sammy”
password = “sammy_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 start telegraf

Затем проверьте, правильно ли работает служба :

$ systemctl status telegraf

Вы увидите  следующий статус, который указывает на то, что Telegraf запущен:


Output
telegraf.service – The plugin-driven server agent for reporting metrics into InfluxDB
Loaded: loaded (/usr/lib/systemd/system/telegraf.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2017-02-07 13:32:36 EET; 3min 27s ago
Docs: https://github.com/influxdata/telegraf
Main PID: 14412 (telegraf)

Теперь Telegraf сам собирает данные и сохраняет их в InfluxDB. Давайте откроем консоль InfluxDB и посмотрим, какие измерения Telegraf хранит в базе данных. Подключайтесь  к нашему заданному раннее  имени пользователя и паролю:

$ influx -username ‘sammy‘ -password ‘sammy_admin

После того как вы вошли в систему, просмотрите  все доступные базы данных:

> show databases

Здесь вы можете наблюдать  базу данных  telegraf:

Output
name: databases
name
—-
_internal
telegraf

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

> use telegraf

Чтобы отобразить все изменения, которые “засек” Telegraf, наберите команду:

> show measurements

Увидите вы такое:

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

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

Можете выходить из консоли InfluxDB:

> exit

Теперь, когда мы знаем какие изменения хранит telegraf, будем устанавливать Kapacitor для обработки этих данных.

Шаг четвертый – установка Kapacitor 

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

Для установки Kapacitor выполните следующую команду:

$ sudo yum install kapacitor

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

$ sudo vi /etc/kapacitor/kapacitor.conf

Найдите раздел [[influxdb]] и укажите имя пользователя и пароль для подключения к базе данных InfluxDB:

/etc/kapacitor/kapacitor.conf

# 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 = “sammy”
password = “sammy_admin”

Сохраните файл, выйдите из редактора и запустите Kapacitor :

$ sudo systemctl daemon-reload

$ sudo systemctl start kapacitor

Теперь давайте проверим, что Kapacitor запущен. Проверьте список задач Kapacitor с помощью следующей команды:

$ kapacitor list tasks

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

Output
ID Type Status Executing Databases and Retention Policies

Установив и настроив Kapacitor, теперь нужно настроить компонент пользовательского интерфейса в стеке TICK, чтобы мы могли увидеть результаты и настроить некоторые оповещения.

Шаг 5- Установка и настройка Chronograf

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

Скачаем и установим последние пакеты:

$ wget https://dl.influxdata.com/chronograf/releases/chronograf-1.2.0~beta3.x86_64.rpm

$ sudo yum localinstall chronograf-1.2.0~beta3.x86_64.rpm

Затем запустите службу Chronograf:

$ sudo systemctl start chronograf

Теперь вы можете получить доступ к интерфейсу Chronograf, просто перейдите в своем веб-браузере по адресу http: // your_server_ip: 8888 .

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

The Chronograf welcome screen with fields to connect to a data source

Введите имя пользователя и пароль для базы данных InfluxDB и нажмите «Подключить новый источник».

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

The dashboard for your server

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

Configuring Kapacitor

Используйте данные подключения по умолчанию. Мы же ведь не настраивали имя пользователя и пароль для Kapacitor. Нажмите на Connect Kapacitor. 

Как только Kapacitor успешно подключится  вы увидите Configure Alert Endpoints под формой.

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

Шаг 6 – Настройка оповещений

Давайте настроим простое оповещение, которое будет говорить нам о высокой  загрузке процессора. Наведите указатель мыши на левое меню навигации, найдите ALERTING и нажмите  Kapacitor Rules. Затем нажмите Create New Rule.

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

Выше графика найдите поле с надписью Send Alert, где load1 это Greater Than и введите 1.0 для значения. Затем вставьте следующий текст в поле «Alert Message», чтобы настроить текст сообщения с предупреждением:

{{ .ID }} is {{ .Level }} value: {{ index .Fields “value” }}

Чтобы получить описание каждого поля,  наведите указатель мыши на записи в разделе “Шаблоны”.

Затем выберите опцию Smtp в выпадающем списке « Send this Alert to» и введите свой адрес электронной почты в соответствующем поле.

По умолчанию вы будете получать сообщения в формате JSON, например:

Example message

{
“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

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

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