Пример мониторинга серверной комнаты на основе Icinga и устройств NetPing

Icinga — система мониторинга с открытым исходным кодом. Изначально была создана как ответвление от системы мониторинга Nagios и очень похожа на нее. В данной статье мы рассмотрим пример настройки Icinga для работы с устройством мониторинга микроклимата серверной комнаты UniPing server solution v4/SMS, установим дополнения для построения графиков и карту.

Для реализации рассматриваемого решения нам потребуются:

  1. Сервер с предустановленной Debian 9 (в рамках статьи IP address — 192.168.0.45);
  2. UniPing server solution v4/SMS (в рамках статьи IP address — 192.168.0.100);
  3. Датчик температуры 1-Wire;
  4. Датчик влажности 1-Wire;
  5. Датчик двери;
  6. Датчик протечки;
  7. Датчик воздушного потока;
  8. Датчик наличия 220В

Настройка устройства мониторинга UniPing server solution v4/SMS для работы с выбранным комплектом датчиков

Для того, чтобы начать работу с устройством, необходимо выполнить его базовую настройку. Для этого переходим в раздел настроек устройства (1), настраиваем необходимые сетевые параметры (2) и параметры доступа (3). 

Базовая настройка UniPing server solution v4SMS

Чтобы подключить датчик 1-Wire, нам нужно узнать его уникальный номер. Сам процесс подключения хорошо описан в этой статье. За информацией по подключению и настройке датчиков можно обратиться к официальной документации.

Термодатчики 1-Wire.

Настройка термодатчиков UniPing server solution v4SMS

Датчики влажности 1-wire.

Настройка датчиков влажности UniPing server solution v4SMS

Датчики наличия 220Впротечкиоткрытия двери и воздушного потока подключаются к IO линиям. Эти датчики являются датчиками типа «сухого контакта». В документации хорошо описано конфигурирование линий ввода-вывода (IO линий).

Настройка датчиков типа сухого контакта UniPing server solution v4SMS

Установка Icinga

Установка системы мониторинга достаточно хорошо описана в официальной документации и не является сложной. Остановимся только на основных моментах установки:

Все команды в консоли, которые будут представлены далее и до конца статьи — выполнялись от имени root

Первым делом добавляем репозиторий:

apt-get -y install apt-transport-https

wget -O — https://packages.icinga.com/icinga.key | apt-key add —
echo ‘deb https://packages.icinga.com/debian icinga-stretch main’ >/etc/apt/sources.list.d/icinga.list
apt-get update

И устанавливаем Icinga:

apt-get install icinga2

Далее, необходимо установить базовый набор плагинов для мониторинга (которые в последствии будут располагаться в /usr/lib/nagios/plugins):

apt-get install monitoring-plugins

Далее перезапускам Icinga и проверяем её статус:

systemctl restart icinga2

systemctl status icinga2

На этом этап установки Icinga завершен. Сама система установлена и функционирует.

Установка и конфигурация Database Icinga Data Output (DB IDO)

IDO предназначен для вывода всех данных системы мониторинга в базу данных. Далее будет показано на примере базы данных MySQL, также возможен вариант на PostgreSQL, он подробно разобран в официальной документации.

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

apt-get install mysql-server mysql-client

mysql_secure_installation

Далее модуль IDO для Icinga:

apt-get install icinga2-ido-mysql

Далее, нам нужно сконфигурировать IDO. Для этого создадим базу данных:

# mysql -u root -p

CREATE DATABASE icinga;
GRANT SELECT, INSERT, UPDATE, DELETE, DROP, CREATE VIEW, INDEX, EXECUTE ON icinga.* TO ‘icinga’@’localhost’ IDENTIFIED BY ‘icinga’;
quit

Далее, импортируем структуру:

mysql -u root -p icinga < /usr/share/icinga2-ido-mysql/schema/mysql.sql

Включаем IDO и перезапускаем Icinga:

# icinga2 feature enable ido-mysql

systemctl restart icinga2

Файл конфигурации находится по пути /etc/icinga2/features-available/ido-mysql.conf. При необходимости, вы должны поменять в нём данные для подключения к базе.

Далее, необходимо настроить REST API для связи Icinga и Icinga Web 2:

icinga2 api setup

И снова перезапускаем Icinga, чтобы изменения вступили в силу:

systemctl restart icinga2

Установка Icinga Web 2

Icinga Web 2 — это PHP фреймворк, представляющий интуитивно понятный пользовательский интерфейс для подробного наблюдения за большим количеством служб. Также он позволяет контролировать процессы мониторинга, посылая внешние команды в Icinga в один клик. Установка, как и в случае с Icinga, достаточно подробно описана в официальной документации, мы же остановимся на основных моментах:

apt-get install icingaweb2 icingacli

Далее, необходимо создать токен для авторизации подключения Icinga Web 2 к Icinga:

icingacli setup token create

Далее подготавливаем базу данных:

mysql -u root -p

MariaDB [mysql]> CREATE DATABASE icingaweb2;

MariaDB [mysql]> GRANT ALL ON icingaweb2.* TO icingaweb2@localhost IDENTIFIED BY ‘icingapasswd’;

Дальнейшая настройка будет проходить в web-интерфейсе Icinga Web 2. Для этого переходим на http://192.168.0.45/icinga/setup. Нас приветствует окно с просьбой ввести ранее полученный токен, мы жмём:

Конфигурирование Icinga Web 2

Далее нас просят выбрать необходимые модули. Нас интересует только модуль мониторинга, выбираем его и переходим далее.

Конфигурирование Icinga Web 2

Нам будет представлен список требований к системе. Если не все из них отмечены зеленым цветом, то необходимо вернуться в консоль и обновить/установить соответствующий пакет.

Конфигурирование Icinga Web 2

Далее выбираем тип аутентификации — Database.

Конфигурирование Icinga Web 2

Следующим шагом необходимо настроить параметры подключения к базе данных:

  1. Resource Name: icingaweb2 — имя ресурса данных;
  2. Database Type: MySQL — в рамках данной статьи мы используем MySQL базу;
  3. Host: localhost — наша база данных расположена на том же сервере, что и система мониторинга, поэтому подключаемся по localhost;
  4. Database Name: icingaweb2 — имя базы данных, созданной выше;
  5. Username: icingaweb2 — имя пользователя;
  6. Password — в примере выше был использован icingapasswd;
  7. Проверяем конфигурацию на валидность, в случае успеха переходим к следующему шагу.

Конфигурирование Icinga Web 2

Далее необходимо задать имя для бэкэнда нашего web-интерфейса. Иными словами — имя источника данных, настроенного ранее.

Конфигурирование Icinga Web 2

Задаём имя пользователя (1) и пароль (2) для входа в web-интерфейс.

Конфигурирование Icinga Web 2

Далее нас просят задать параметры логирования. Оставляем значения как есть, по умолчанию.

Конфигурирование Icinga Web 2

Далее система сообщает нам об успешной настройке Icinga Web 2. Переходим далее.

Конфигурирование Icinga Web 2

Нам необходимо настроить модуль мониторинга, единственный активированный нами модуль на этапе конфигурации Icinga Web 2.

Конфигурирование Icinga Web 2

Для этого настраиваем параметры подключения к базе данных IDO (она была создана и настроена на этапе установки и конфигурации IDO):

  1. Resource Name: icinga_ido — имя ресурса данных;
  2. Database Type: MySQL — в рамках данной статьи мы используем MySQL базу;
  3. Host: localhost — наша база данных расположена на том же сервере что и система мониторинга, поэтому подключаемся по localhost;
  4. Database Name: icinga — имя базы данных, созданной выше;
  5. Username: icinga — имя пользователя;
  6. Password — в примере выше был использован icinga;
  7. Проверяем конфигурацию на валидность, в случае успеха переходим к следующему шагу.

Конфигурирование Icinga Web 2

Далее мы должны настроить способ управления Icinga через Icinga Web 2:

  1. Transport Name: Icinga2 — имя;
  2. Transport Type: Icinga 2 API — в контексте данной статьи мы будем использовать API;
  3. Host: loocalhost — и Icinga и Icinga Web 2 находятся на одном сервере, поэтому подключаемся по localhost;
  4. Port: 5665 — порт Icinga API по умолчанию;
  5. API Username: root;
  6. API Password: имя и пароль для подключения к API указаны в файле /etc/icinga2/conf.d/api-users.conf;
  7. Проверяем конфигурацию на валидность, если все хорошо — переходим далее.

Конфигурирование Icinga Web 2

Далее мы видим суммарную информацию о конфигурации модуля:

Конфигурирование Icinga Web 2

Система сообщает нам об успешной настройке и предлагает ознакомится с кратким логом и перейти в web-интерфейс.

Конфигурирование Icinga Web 2

Далее, нас приветствует главный экран Icinga Web 2, по умолчанию в конфигурации присутствует localhost:

Конфигурирование Icinga Web 2

На этом установка Icinga + Icinga Web 2 завершена. Данная связка является минимально достаточной для комфортной настройки и мониторинга. Следующим шагом мы настроим отображение графиков в web-интерфейсе и карту с отображением местоположения хостов.

Построение и отображение графиков при помощи InfluxDB + Grafana и Icinga Web 2 module Grafana

Для хранения показаний датчиков и прочей информации, мы будем использовать time series базу данных InfluxDB, для построения графиков — Grafana, а для отображения графиков в web-интерфейсе — Icinga Web Grafana module

Скачаем и установим InfluxDB:

wget https://dl.influxdata.com/influxdb/releases/influxdb_1.7.2_amd64.deb
sudo dpkg -i influxdb_1.7.2_amd64.deb

Далее, нам необходимо разрешить управление базой данных через HTTP API (для работы с Grafana). Для этого в файле конфигурации InfluxDB — /etc/influxdb/influxdb.conf в секции [http] необходимо раскомментировать строки:

enabled = true
bind-address = «:8086»

Установим Grafana:

wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_5.1.4_amd64.deb
sudo apt-get install -y adduser libfontconfig
sudo dpkg -i grafana_5.1.4_amd64.deb

И запустим её:

systemctl daemon-reload
systemctl start grafana-server

Web-интерфейс Grafana будет доступен по адресу http://192.168.0.45:3000, данные для входа по-умолчанию — admin/admin. В интерфейсе нам необходимо настроить подключение к InfluxDB для построения графиков на основе данных, хранящихся в ней. Для этого переходим в Configuration (1) → Data Sources (2) → Add data source (3).

Grafana добавление Data Source

Далее выбираем тип источника данных:

Grafana добавление Data Source

И настраиваем параметры подключения:

  1. Name: icinga2 — имя источника данных;
  2. URL: http://localhost:8086 — адрес для подключения к источнику данных. Так как InfluxDB у нас установлен на том же сервере, подключаемся по localhost;
  3. Database: icinga2influx — имя базы данных, где хранятся показания, которое, как и имя/пароль, были настроены выше;
  4. User/Password — имя и пароль для подключения к базе. 

Grafana добавление Data Source

После этого необходимо создать dashboard, в которой нужно настроить необходимые нам графики. Мы подготовили для вас dashboard на основе dashboard base-metrics, взятой с просторов интернета. Для того, чтобы импортировать её, необходимо скачать base-metrics.json и загрузить его в Create (1) → Import (2) → Upload .json File (3):

Grafana импорт Dashboard

Видим настройки импортируемой dashboard — оставляем тут всё по умолчанию.

Grafana импорт Dashboard

После импорта мы видим dashboard со следующим содержимым:

Grafana Dashboard

Пусть вас не пугают ошибки и отсутствие данных. Это связано с тем, что UniPing server solution v4/SMS ещё не подключён к системе мониторинга, и она не собирает полученные с него данные.

Далее, для того, чтобы Icinga могла записывать получаемые данные в базу данных InfluxDB, необходимо активировать опцию InfluxDB Writer. Для этого в консоли пишем команду:

icinga2 feature enable influxdb

И приводим /etc/icinga2/features-enabled/influxdb.conf к виду:

object InfluxdbWriter «influxdb» {
host = «127.0.0.1»
port = 8086
database = «icinga2influx»
username = «icinga2influx»
password = «icinga»
flush_threshold = 1024
flush_interval = 10s
host_template = {
    measurement = «$host.check_command$»
    tags = {
        hostname = «$host.name$»
    }
}
service_template = {
    measurement = «$service.check_command$»
    tags = {
        hostname = «$host.name$»
        service = «$service.name$»
    }
}
enable_send_thresholds = true
enable_send_metadata = true
}

На следующем шаге для отображения графиков из Grafana прямо в web-интерфейсе Icinga необходимо установить Icinga Web 2 module Grafana. Подробней об этом модуле можно узнать из документации. Остановимся на основных моментах его установки. Скачиваем:

MODULE_VERSION=»1.1.7″
ICINGAWEB_MODULEPATH=»/usr/share/icingaweb2/modules»
REPO_URL=»https://github.com/Mikesch-mp/icingaweb2-module-grafana«
TARGET_DIR=»${ICINGAWEB_MODULEPATH}/grafana»
URL=»${REPO_URL}/archive/v${MODULE_VERSION}.tar.gz»
install -d -m 0755 «${TARGET_DIR}»
wget -q -O — «$URL» | tar xfz — -C «${TARGET_DIR}» —strip-components 1

И подключаем его:

icingacli module enable grafana

Далее, нужно разрешить анонимный read only доступ к Grafana API. Для этого в файле конфигурации /etc/grafana/grafana.ini секцию [auth.anonymous] приводим к виду:

[auth.anonymous]
# enable anonymous access
enabled = true

# specify organization name that should be used for unauthenticated users
org_name = Koebbes

# specify role for unauthenticated users
org_role = Viewer

Дальнейшую настройку можно с комфортом проводить в web-интерфейсе. Переходим в Настройки → Расширения → Grafana → Configuration:

  1. Узел: localhost:3000 — адрес и порт для подключения к Grafana;
  2. Protocol: http — протокол;
  3. Default dashboard: base-metrics — dasboard по умолчанию, из которой модуль будет брать графики;
  4. Default panel id: 1 — id графика по умолчанию;
  5. Default organization id: 1 — id «организации» для анонимного доступа;
  6. Datasource Backend: Database — источник данных для графиков;
  7. Datasource Type: InfluxDB — тип источника данных;
  8. Grafana access: iFrame — способ отображения графиков в интерфейсе Icinga. Данный тип будет создавать Iframe и в нём открывать «часть» интерфейса Grafana с графиком. Этот способ является самым простым в условиях установки Icinga и Grafana на одном сервере и прямого доступа к нему. Подробней о других способах в документации к модулю;
  9. Show debug — в случае, если графики в интерфейсе не появятся, то установкой это галочки вы включите режим отладки. Рядом с предполагаемым местом отображения графика появится отладочная информация, на основании которой можно сделать вывод о текущей проблеме.

Настройка Icinga Web 2 module Grafana

Карта мира с отображением местоположения хостов

Icinga из коробки не содержит карту для отображения местоположения хостов, поэтому воспользуемся модулем Icinga Web 2 module map. Установка проста и описана в документации

Скачиваем с git репозитория:

ICINGAWEB_MODULEPATH=»/usr/share/icingaweb2/modules»
REPO_URL=»https://github.com/nbuchwitz/icingaweb2-module-map«
TARGET_DIR=»${ICINGAWEB_MODULEPATH}/map»
git clone «${REPO_URL}» «${TARGET_DIR}»

И включаем модуль:

icingacli module enable map

На этом установка и настройка карты закончена. В web-интерфейсе появилось новое меню:

Icinga world map

Конфигурация Icinga для мониторинга UniPing server solution v4/SMS и подключенных к нему датчиков

Удобней всего конфигурировать и добавлять хосты к системе мониторинга через консоль. Нас будут интересовать три файла конфигурации:

  • /etc/icinga2/conf.d/hosts.conf — описание конфигурации хоста;
  • /etc/icinga2/conf.d/services.conf — описание конфигурации сервисов мониторинга различных показателей;
  • /etc/icinga2/conf.d/commands.conf — непосредственно описание команд мониторинга

Начнем с /etc/icinga2/conf.d/hosts.conf. Основные моменты прокомментированы. Добавляем в конец файла:

object Host «UniPing server solution v4 SMS» { 
import «generic-host»
address = «192.168.0.21»
vars.geolocation = «55.758780, 37.619171» /* Координаты местоположения устройства. Используются плагином с картой */
vars.http_vhosts[«http»] = {
    http_uri = «/»
}
vars.notification[«mail»] = {
    groups = [ «icingaadmins» ]
}

/* Пользовательские переменные */
vars.os = «netping» /* Явно указываем, что это устройство NetPing, для автоматической привязки сервисов и скриптов проверки */
vars.snmp_port = «161»
vars.snmp_community = «ping21»

/* конфигурация сервисов мониторинга температуры, влажности и IO линий построены таким образом, что добавляя переменную — мы добавляем сервис */

vars.tempsensors[«server_room»] = { temp_sensor_n = «1» } /* Мониторинг датчика температуры, vars.tempsensors[«имя_датчика»] = { temp_sensor_n = «номер_датчика» } */
vars.tempsensors[«Windows»] = { temp_sensor_n = «2» }

vars.relhumsensors[«server_room»] = { relhum_sensor_n = «1» } /* Мониторинг датчика влажности, vars.relhumsensors[«имя_датчика»] = { relhum_sensor_n = «номер_датчика» } */
vars.relhumsensors[«Rack 1»] = { relhum_sensor_n = «2» }

vars.iolines[«door»] = { io_sensor_n = «1», norm_value = «0», alert_value = «1» } /* Мониторинг IO, vars.relhumsensors[«имя_датчика»] = { io_sensor_n = «номер_IO_линии», norm_value = «норма», alert_value = «тревога» } */
vars.iolines[«air_flow»] = { io_sensor_n = «2», norm_value = «0», alert_value = «1» }
vars.iolines[«3»] = { io_sensor_n = «3», norm_value = «0», alert_value = «1» }
vars.iolines[«4»] = { io_sensor_n = «4», norm_value = «1», alert_value = «0» }
}

Далее переходим к /etc/icinga2/conf.d/services.conf. Добавляем в конец файла:

apply Service «npTemp » for (tempsensor => config in host.vars.tempsensors) {
    import «generic-service»

    vars += config

    display_name = «Temperature » + vars.temp_sensor_n + » (» + tempsensor + «)» /* Имя, которое будет отображаться в web-интерфейсе */
    check_command = «npTemp» /* команда-скрипт, выполняющая проверку */
    vars.arguments = [ vars.temp_sensor_n ] 
    assign where host.vars.os == «netping»
}

    apply Service «npRelhum » for (relhumsensor => config in host.vars.relhumsensors) {
    import «generic-service»

    vars += config

    display_name = «Relative Humidity » + vars.relhum_sensor_n + » (» + relhumsensor + «)»
    check_command = «npRelhum»
    vars.arguments = [ vars.relhum_sensor_n ]
    assign where host.vars.os == «netping»
}

apply Service «npIo » for (ioline => config in host.vars.iolines) {
    import «generic-service»

    vars += config
    if(!vars.norm_value) {vars.norm_value = «1»}
    if(!vars.alert_value) {vars.alert_value = «0»}

    display_name = «IO » + vars.io_sensor_n + » (» + ioline + «)»
    check_command = «npIo»
    vars.arguments = [ vars.io_sensor_n , vars.norm_value, vars.alert_value ]
    assign where host.vars.os == «netping»
}

И последний /etc/icinga2/conf.d/commands.conf. В конфигурации мы ссылаемся на скрипты, которые будут представлены далее. В конец файла добавить:

object CheckCommand «npTemp» { /* имя команды проверки */
    import «plugin-check-command»
    command = [ PluginContribDir + «/np_temp» ] /* скрипт, который она вызывает */
    arguments = { /* аргументы, передаваемые скрипту */
        «-ip» = «$address$»
        «-p» = «$snmp_port$»
        «-c» = «$snmp_community$»
        «-n» = «$temp_sensor_n$»
}
    vars.plugin_address = «$address$»
    vars.snmp_port = «161»
}

object CheckCommand «npRelhum» {
    import «plugin-check-command»
    command = [ PluginContribDir + «/np_relhum» ]
    arguments = {
        «-ip» = «$address$»
        «-p» = «$snmp_port$»
        «-c» = «$snmp_community$»
        «-n» = «$relhum_sensor_n$»
}
    vars.plugin_address = «$address$»
    vars.snmp_port = «161»
}

object CheckCommand «npIo» {
    import «plugin-check-command»
    command = [ PluginContribDir + «/np_io» ]
    arguments = {
        «-ip» = «$address$»
        «-p» = «$snmp_port$»
        «-c» = «$snmp_community$»
        «-n» = «$io_sensor_n$»
        «-normVal» = «$norm_value$»
        «-alertVal» = «$alert_value$»
}
    vars.plugin_address = «$address$»
    vars.snmp_port = «161»
}

Далее скачайте архив со скриптами и разархивируйте содержимое в папку /usr/lib/nagios/plugins (icinga для мониторинга использует базовый набор плагинов для мониторинга Nagios и самописные плагины от Nagios совместимы с Icinga).

Далее, перезапускаем Icinga:

systemctl restart icinga2

И в web-интерфейсе в Overview (1) → Узлы (2) → UniPing server solution v4/SMS (3) → Службы (4) и видим список всех наших добавленных сервисов и сервисов по-умолчанию:

Icinga UniPing server solution v4SMS services

Как видите, система сигнализирует о тревоге с трех датчиков на IO линиях, об отсутствии датчиков температуры и влажности на каналах №2 (на самом деле их там нет, они были добавлены ради наглядности «процесса» добавления) и о превышении относительной влажности. Также в списке присутствует два сервиса по умолчанию — http и ping (он же используется для определения hostalive). Далее перейдем к настройке отображения графиков. На данном этапе в web-интерфейсе Grafana у Вас на графиках должны появляться значения, т.к. скрипты, собирающие данные, начали работать и писать информацию в базу данных.

Grafana Dashboard

Для сопоставления графика из Grafana и сервиса в Icinga, нам необходимо знать полное имя сервиса, имя dashboard (base-metrics) и id интересующего графика. Рассмотрим на примере датчика влажности со встроенный датчиком температуры. Id графика, мы можем взять из url адреса странички с ним. У графика температуры датчика влажности id = 17:

Grafana id графика

Далее переходим в Web-интерфейс Icinga → Настройки → Grafana Graphs → Add New Grafana Graph и:

  1. Название: npRelhum server_room — имя графика, должно совпадать с именем сервиса;
  2. Dashboard name: base-metrics — название dashboard в Grafana, на которой располагается интересующий график;
  3. PanelId(s): в данном случае 17, 13 — id графиков 17 — температура датчика влажности, 13 — влажность.

Icinga Web 2 module Grafana настройка графика

Теперь, если мы перейдём в Overview (1) → Узлы (2) → UniPing server solution v4/SMS → Relative Humidity 1 (server_room), то в правой части интерфейса увидим графики показаний.

Icinga отображение графиков

Таким образом, нужно добавить все графики для всех сервисов. Отдельный пунктом идет WorldMap со всеми устройствами. Переменной для хоста vars.geolocation = «55.758780, 37.619171» мы как раз указали её местоположение, и теперь карта выглядит следующим образом:

Icinga world map

Вывод

Система мониторинга Icinga отлично подходит для повседневных задач мониторинга IT инфраструктуры как крупных так и мелких организаций. Система гибка и расширяема — вы можете написать плагин для мониторинга практически всего (если, конечно, такой плагин ещё не написан). Базовый набор разворачивается в пару консольных команд, а дополнительные плагины и модули сильно расширяют функционал системы и позволяют интегрировать её с такими продуктами, как InfluxDB, Grafana и прочими. Несмотря на необходимость конфигурирования большей части настроек из консоли, Icinga не кажется сложной. В целом, система мониторинга Icinga полноценный и удобный продукт, и её можно смело рекомендовать к использованию.

?
×

    Получите бесплатную консультацию по выбору оптимального оборудования

    Наши операторы свяжутся с вами при первой возможности

    ×

      Обращение в техническую поддержку

      Сформулируйте, пожалуйста, тему и текст вашего обращения. Вам ответят в течении рабочего дня.

      ×
      Ваша заявка отправлена. Мы свяжемся с вами при первой возможности.