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

Вступление

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

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

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

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

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

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

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

Предпосылки

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

  • Один сервер CentOS 7, настроенный следующим образомthe CentOS 7 initial server setup guide, включая пользователя sudo без полномочий root и брандмауэр.

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

[[step-1 -—- add-the-tick-stack-repository]] == Шаг 1. Добавление репозитория TICK Stack

Компоненты стека 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 -—- install-Influxdb-and-configuring-authentication]] == Шаг 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

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

CREATE USER "sammy" WITH PASSWORD 'sammy_admin' WITH ALL PRIVILEGES

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

show users

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

Output    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, агент для сбора метрик.

[[step-3 -—- install-and-configuring-telegraf]] == Шаг 3 - Установка и настройка Telegraf

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

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

sudo yum install telegraf

Telegraf использует плагины для ввода и вывода данных. Плагин вывода по умолчанию предназначен для InfluxDB. Поскольку мы включили аутентификацию пользователя для 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

[.note] #Note: Если вы не видите базу данныхtelegraf, проверьте настройки Telegraf, которые вы настроили, чтобы убедиться, что вы указали правильное имя пользователя и пароль.
#

Давайте посмотрим, что 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 plugin-name в окне терминала.

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

exit

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

[[step-4 -—- install-kapacitor]] == Шаг 4 - Установка конденсатора

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, чтобы мы могли видеть некоторые результаты и настраивать некоторые оповещения.

[[step-5 -—- install-and-configuring-chronograf]] == Шаг 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

[.Примечание]##

Note: Если вы используете FirewallD, настройте его, чтобы разрешить подключения к порту`8888`:

sudo firewall-cmd --zone=public --permanent --add-port=8888/tcp
sudo firewall-cmd --reload

Чтобы узнать больше о правилах FirewallD, следуйте инструкциямHow To Set Up a Firewall Using FirewallD on CentOS 7.

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

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

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

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

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

The dashboard for your server

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

Configuring Kapacitor

Используйте информацию о соединении по умолчанию; мы не настроили имя пользователя и пароль для Kapacitor. ЩелкнитеConnect Kapacitor. После успешного подключения Kapacitor под формой появится разделConfigure Alert Endpoints.

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

  • HipChat

  • OpsGenie

  • PagerDuty

  • Sensu

  • слабина

  • SMTP

  • Talk

  • телеграмма

  • VictorOps

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

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

[[step-6 -—- configuring-alerts]] == Шаг 6 - Настройка предупреждений

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

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

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

Над графиком найдите поле с надписьюSend Alert where load1 is Greater Than и введите1.0 в качестве значения.

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

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

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

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

По умолчанию вы будете получать сообщения в формате 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 в правом верхнем углу, чтобы завершить настройку этого правила.

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

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

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

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

[.note] #Note: Убедившись, что вы можете получать оповещения, обязательно остановите командуdd, которую вы начали сCTRL+C.
#

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

[[step-7 -—- securing-chronograf-with-oauth]] == Шаг 7. Защита Chronograf с помощью OAuth

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

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

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

  1. ВведитеApplication name с помощьюChronograf или подходящего описательного имени.

  2. ДляHomepage URL используйтеhttp://your_server_ip:8888.

  3. ЗаполнитеAuthorization callback URL с помощьюhttp://your_server_ip:8888/oauth/github/callback.

  4. ЩелкнитеRegister application, чтобы сохранить настройки.

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

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

sudo vi /usr/lib/systemd/system/chronograf.service

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

/usr/lib/systemd/system/chronograf.service

[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, секрет клиента Github и организацию Github для других значений.

[.warning] #Warning: Если вы опустите опцию организации Github в команде, любой пользователь Github сможет войти в ваш экземпляр Chronograf. Создайте организацию Github и добавьте в нее соответствующих пользователей для ограничения доступа.
#

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

sudo systemctl daemon-reload
sudo systemctl restart chronograf

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

Заключение

В этом уроке вы увидели, как стек TICK может быть мощным инструментом для хранения, анализа и визуализации данных временных рядов. У этого есть много особенностей и вариантов использования. Например, вы можете использовать Kapacitor для выполненияanomaly detection илиbuild live leaderboard of game scores. Вы можете узнать больше о стеке TICK, прочитавofficial documentation.

Related