Как отслеживать системные показатели с помощью TICK Stack в Ubuntu 16.04

Вступление

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

  • T elegraf собирает данные временных рядов из различных источников.

  • I nfluxDB хранит данные временных рядов.

  • C хронограф визуализирует и отображает данные временных рядов.

  • K apacitor обеспечивает оповещение и обнаруживает аномалии в данных временных рядов.

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

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

Предпосылки

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

  • Один сервер Ubuntu 16.04, настроенный по следующему адресу https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04, - руководство по первоначальной настройке сервера Ubuntu 16.04], включая sudo пользователь root и брандмауэр.

  • SMTP-сервер для отправки оповещений, а также сведения о соединении. Если у вас его нет, вы можете установить + sendmail + с помощью + sudo apt-get install sendmail +.

  • Если вы хотите защитить пользовательский интерфейс Chronograf, как описано в шаге 7, вам потребуется учетная запись https://github.com [GitHub], которая является частью организации GitHub. Следуйте this tutorial, чтобы создать организацию GitHub.

Шаг 1 - Добавление хранилища TICK Stack

Компоненты стека 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

Теперь мы можем установить и настроить InfluxDB.

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

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

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

sudo apt-get install influxdb

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

sudo systemctl start influxdb

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

systemctl status influxdb

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

[secondary_label Output
●  - InfluxDB is an open-source, distributed, time series database
  Loaded: loaded (/lib/systemd/system/influxdb.service; enabled; vendor preset: enabled)
  Active:
    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

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

CREATE USER "" WITH PASSWORD '' WITH ALL PRIVILEGES

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

show users

Вы увидите следующий вывод, подтверждающий, что ваш пользователь был создан:

Output    user  admin
   ----  -----
    true

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

exit

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

sudo nano /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.

...

Затем сохраните файл, выйдите из редактора и перезапустите службу InfluxDB:

sudo systemctl restart influxdb

InfluxDB теперь настроен, поэтому давайте установим Telegraf, агент для сбора метрик.

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

Telegraf - это агент с открытым исходным кодом, который собирает метрики и данные в системе, в которой он работает, или из других служб. Затем Telegraf записывает данные в InfluxDB или другие выходы.

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

sudo apt-get install telegraf

Служба Telegraf запускается автоматически после установки.

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

sudo nano /etc/telegraf/telegraf.conf

Найдите раздел + [output.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"


     ## 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 работает.

Output●  - The plugin-driven server agent for reporting metrics into InfluxDB
  Loaded: loaded (/lib/systemd/system/telegraf.service; enabled; vendor preset: enabled)
  Active:
    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 '' -password ''

После входа выполните эту команду, чтобы увидеть доступные базы данных:

show databases

Вы увидите базу данных + telegraf + в списке:

Output    name: databases
   name
   ----
   _internal

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

use telegraf

Показать различные измерения, которые Telegraf собрал, выполнив эту команду:

show measurements

Вы увидите следующий вывод:

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

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

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

  • апаш

  • Cassandra

  • докер

  • Elasticsearch

  • Graylog

  • IPtables

  • MySQL

  • PostgreSQL

  • Redis

  • SNMP

  • и много других

Вы можете просмотреть инструкции по использованию для каждого входного плагина, запустив + telegraf -usage + в окне терминала.

Выход из консоли InfluxDB:

exit

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

Шаг 4 - Установка Kapacitor

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

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

sudo apt-get install kapacitor

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

sudo nano /etc/kapacitor/kapacitor.conf

Найдите раздел + + и укажите имя пользователя и пароль для подключения к базе данных 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"]


...

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

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__amd64.deb
sudo dpkg -i chronograf__amd64.deb

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

sudo systemctl start chronograf

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

Вы увидите страницу приветствия, подобную приведенной на следующем рисунке:

image: https: //assets.digitalocean.com/articles/tickstack_ubuntu1604/BM7l6eF.png [Экран приветствия Chronograf с полями для подключения к источнику данных]

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

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

изображение: https: //assets.digitalocean.com/articles/tickstack_ubuntu1604/OXk2ohb.png [Панель управления для вашего сервера]

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

изображение: https: //assets.digitalocean.com/articles/tickstack_ubuntu1604/B1pTobl.png [Конфигурирование Kapacitor]

Используйте информацию о соединении по умолчанию; мы не настроили имя пользователя и пароль для Kapacitor. Нажмите * Подключить конденсатор *. Как только Kapacitor успешно подключится, под формой появится раздел * Настройка конечных точек предупреждений *.

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

  • HipChat

  • OpsGenie

  • PagerDuty

  • Sensu

  • слабина

  • SMTP

  • Talk

  • телеграмма

  • VictorOps

Самый простой способ связи - это * SMTP *, который выбирается по умолчанию. Заполните поле * От электронной почты * адресом, с которого будут отправляться оповещения. Затем заполните данные для вашего SMTP-сервера или оставьте их со значениями по умолчанию, если вы установили + sendmail +. Затем нажмите * Сохранить *.

С настройкой, давайте создадим несколько предупреждений.

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

Давайте настроим простое оповещение о высокой загрузке процессора.

Наведите указатель мыши на значок с восклицательным знаком в левом меню навигации и нажмите «Правила конденсатора» *. Затем нажмите * Создать новое правило *.

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

Над графиком найдите поле с надписью * Send Alert, где load1 больше, чем *, и введите + 0.8 + для значения.

Затем вставьте следующий текст в поле * Alert Message *, чтобы настроить текст сообщения:

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

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

Затем выберите параметр * 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 text body here *.

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

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

Чтобы проверить это вновь созданное предупреждение, создайте всплеск ЦП с помощью команды + dd +, чтобы прочитать данные из + / dev / zero + и отправить их в + / dev / null +:

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

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

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

У нас работают оповещения, но любой может войти в Chronograf. Давайте ограничим доступ.

Шаг 7 - Защита хронографа с помощью OAuth

По умолчанию любой, кто знает адрес сервера, на котором запущено приложение Chronograf, может просматривать любые данные. Это приемлемо для среды тестирования, но не для производства. Chronograf поддерживает аутентификацию OAuth для Google, Heroku и GitHub. Мы настроим вход в систему через учетную запись https://github.com [GitHub], поэтому вам потребуется ее для продолжения.

Сначала зарегистрируйте новое приложение на GitHub. Войдите в свою учетную запись GitHub и перейдите по адресу https://github.com/settings/applications/new.

Затем заполните форму со следующими данными:

  1. Заполните * Имя приложения * с помощью * Chronograf * или подходящего описательного имени.

  2. Для * URL-адреса домашней страницы * используйте + http: //: 8888 +.

  3. Введите * URL обратного вызова авторизации * с помощью + http: //: 8888 / oauth / github / callback +.

  4. Нажмите * Зарегистрировать приложение *, чтобы сохранить настройки.

  5. Скопируйте значения * Client ID * и * Client Secret *, представленные на следующем экране.

Затем отредактируйте системный скрипт Chronograf, чтобы включить аутентификацию. Откройте файл + / lib / systemd / system / chronograf.service +:

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

Затем найдите раздел + [Service] + и отредактируйте строку, начинающуюся с + ExecStart = +:

/lib/systemd/system/chronograf.service

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

+ Secret_token + требуется всем поставщикам OAuth. Установите его в случайную строку. Используйте свой идентификатор клиента Github, секрет клиента Github и организацию Github для других значений.

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

sudo systemctl daemon-reload
sudo systemctl restart chronograf

Откройте + http: //: 8888 + для доступа к интерфейсу Chronograf. На этот раз вам будет представлена ​​кнопка * Login with Github *. Нажмите кнопку, чтобы войти, и вам будет предложено разрешить приложению доступ к вашей учетной записи Github. Как только вы разрешите доступ, вы войдете в систему.

Заключение

В этом уроке вы увидели, как стек TICK может быть мощным инструментом для хранения, анализа и визуализации данных временных рядов. У этого есть много особенностей и вариантов использования. Например, вы можете использовать Kapacitor для выполнения anomaly обнаружения или https://docs.influxdata.com/kapacitor/v1.2/ examples / live_leaderboard / [создать живую таблицу лидеров игровых результатов]. Вы можете узнать больше о стеке TICK, прочитав official документацию.

Related