Icinga — система мониторинга с открытым исходным кодом. Изначально была создана как ответвление от системы мониторинга Nagios и очень похожа на нее. В данной статье мы рассмотрим пример настройки Icinga для работы с устройством мониторинга микроклимата серверной комнаты UniPing server solution v4/SMS, установим дополнения для построения графиков и карту.
Для реализации рассматриваемого решения нам потребуются:
- Сервер с предустановленной Debian 9 (в рамках статьи IP address — 192.168.0.45);
- UniPing server solution v4/SMS (в рамках статьи IP address — 192.168.0.100);
- Датчик температуры 1-Wire;
- Датчик влажности 1-Wire;
- Датчик двери;
- Датчик протечки;
- Датчик воздушного потока;
- Датчик наличия 220В
Настройка устройства мониторинга UniPing server solution v4/SMS для работы с выбранным комплектом датчиков
Для того, чтобы начать работу с устройством, необходимо выполнить его базовую настройку. Для этого переходим в раздел настроек устройства (1), настраиваем необходимые сетевые параметры (2) и параметры доступа (3).
Чтобы подключить датчик 1-Wire, нам нужно узнать его уникальный номер. Сам процесс подключения хорошо описан в этой статье. За информацией по подключению и настройке датчиков можно обратиться к официальной документации.
Термодатчики 1-Wire.
Датчики влажности 1-wire.
Датчики наличия 220В, протечки, открытия двери и воздушного потока подключаются к IO линиям. Эти датчики являются датчиками типа «сухого контакта». В документации хорошо описано конфигурирование линий ввода-вывода (IO линий).
Установка 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. Нас приветствует окно с просьбой ввести ранее полученный токен, мы жмём:
Далее нас просят выбрать необходимые модули. Нас интересует только модуль мониторинга, выбираем его и переходим далее.
Нам будет представлен список требований к системе. Если не все из них отмечены зеленым цветом, то необходимо вернуться в консоль и обновить/установить соответствующий пакет.
Далее выбираем тип аутентификации — Database.
Следующим шагом необходимо настроить параметры подключения к базе данных:
- Resource Name: icingaweb2 — имя ресурса данных;
- Database Type: MySQL — в рамках данной статьи мы используем MySQL базу;
- Host: localhost — наша база данных расположена на том же сервере, что и система мониторинга, поэтому подключаемся по localhost;
- Database Name: icingaweb2 — имя базы данных, созданной выше;
- Username: icingaweb2 — имя пользователя;
- Password — в примере выше был использован icingapasswd;
- Проверяем конфигурацию на валидность, в случае успеха переходим к следующему шагу.
Далее необходимо задать имя для бэкэнда нашего web-интерфейса. Иными словами — имя источника данных, настроенного ранее.
Задаём имя пользователя (1) и пароль (2) для входа в web-интерфейс.
Далее нас просят задать параметры логирования. Оставляем значения как есть, по умолчанию.
Далее система сообщает нам об успешной настройке Icinga Web 2. Переходим далее.
Нам необходимо настроить модуль мониторинга, единственный активированный нами модуль на этапе конфигурации Icinga Web 2.
Для этого настраиваем параметры подключения к базе данных IDO (она была создана и настроена на этапе установки и конфигурации IDO):
- Resource Name: icinga_ido — имя ресурса данных;
- Database Type: MySQL — в рамках данной статьи мы используем MySQL базу;
- Host: localhost — наша база данных расположена на том же сервере что и система мониторинга, поэтому подключаемся по localhost;
- Database Name: icinga — имя базы данных, созданной выше;
- Username: icinga — имя пользователя;
- Password — в примере выше был использован icinga;
- Проверяем конфигурацию на валидность, в случае успеха переходим к следующему шагу.
Далее мы должны настроить способ управления Icinga через Icinga Web 2:
- Transport Name: Icinga2 — имя;
- Transport Type: Icinga 2 API — в контексте данной статьи мы будем использовать API;
- Host: loocalhost — и Icinga и Icinga Web 2 находятся на одном сервере, поэтому подключаемся по localhost;
- Port: 5665 — порт Icinga API по умолчанию;
- API Username: root;
- API Password: имя и пароль для подключения к API указаны в файле /etc/icinga2/conf.d/api-users.conf;
- Проверяем конфигурацию на валидность, если все хорошо — переходим далее.
Далее мы видим суммарную информацию о конфигурации модуля:
Система сообщает нам об успешной настройке и предлагает ознакомится с кратким логом и перейти в web-интерфейс.
Далее, нас приветствует главный экран Icinga Web 2, по умолчанию в конфигурации присутствует localhost:
На этом установка 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).
Далее выбираем тип источника данных:
И настраиваем параметры подключения:
- Name: icinga2 — имя источника данных;
- URL: http://localhost:8086 — адрес для подключения к источнику данных. Так как InfluxDB у нас установлен на том же сервере, подключаемся по localhost;
- Database: icinga2influx — имя базы данных, где хранятся показания, которое, как и имя/пароль, были настроены выше;
- User/Password — имя и пароль для подключения к базе.
После этого необходимо создать dashboard, в которой нужно настроить необходимые нам графики. Мы подготовили для вас dashboard на основе dashboard base-metrics, взятой с просторов интернета. Для того, чтобы импортировать её, необходимо скачать base-metrics.json и загрузить его в Create (1) → Import (2) → Upload .json File (3):
Видим настройки импортируемой dashboard — оставляем тут всё по умолчанию.
После импорта мы видим 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:
- Узел: localhost:3000 — адрес и порт для подключения к Grafana;
- Protocol: http — протокол;
- Default dashboard: base-metrics — dasboard по умолчанию, из которой модуль будет брать графики;
- Default panel id: 1 — id графика по умолчанию;
- Default organization id: 1 — id «организации» для анонимного доступа;
- Datasource Backend: Database — источник данных для графиков;
- Datasource Type: InfluxDB — тип источника данных;
- Grafana access: iFrame — способ отображения графиков в интерфейсе Icinga. Данный тип будет создавать Iframe и в нём открывать «часть» интерфейса Grafana с графиком. Этот способ является самым простым в условиях установки Icinga и Grafana на одном сервере и прямого доступа к нему. Подробней о других способах в документации к модулю;
- Show debug — в случае, если графики в интерфейсе не появятся, то установкой это галочки вы включите режим отладки. Рядом с предполагаемым местом отображения графика появится отладочная информация, на основании которой можно сделать вывод о текущей проблеме.
Карта мира с отображением местоположения хостов
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 для мониторинга 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) и видим список всех наших добавленных сервисов и сервисов по-умолчанию:
Как видите, система сигнализирует о тревоге с трех датчиков на IO линиях, об отсутствии датчиков температуры и влажности на каналах №2 (на самом деле их там нет, они были добавлены ради наглядности «процесса» добавления) и о превышении относительной влажности. Также в списке присутствует два сервиса по умолчанию — http и ping (он же используется для определения hostalive). Далее перейдем к настройке отображения графиков. На данном этапе в web-интерфейсе Grafana у Вас на графиках должны появляться значения, т.к. скрипты, собирающие данные, начали работать и писать информацию в базу данных.
Для сопоставления графика из Grafana и сервиса в Icinga, нам необходимо знать полное имя сервиса, имя dashboard (base-metrics) и id интересующего графика. Рассмотрим на примере датчика влажности со встроенный датчиком температуры. Id графика, мы можем взять из url адреса странички с ним. У графика температуры датчика влажности id = 17:
Далее переходим в Web-интерфейс Icinga → Настройки → Grafana Graphs → Add New Grafana Graph и:
- Название: npRelhum server_room — имя графика, должно совпадать с именем сервиса;
- Dashboard name: base-metrics — название dashboard в Grafana, на которой располагается интересующий график;
- PanelId(s): в данном случае 17, 13 — id графиков 17 — температура датчика влажности, 13 — влажность.
Теперь, если мы перейдём в Overview (1) → Узлы (2) → UniPing server solution v4/SMS → Relative Humidity 1 (server_room), то в правой части интерфейса увидим графики показаний.
Таким образом, нужно добавить все графики для всех сервисов. Отдельный пунктом идет WorldMap со всеми устройствами. Переменной для хоста vars.geolocation = «55.758780, 37.619171» мы как раз указали её местоположение, и теперь карта выглядит следующим образом:
Вывод
Система мониторинга Icinga отлично подходит для повседневных задач мониторинга IT инфраструктуры как крупных так и мелких организаций. Система гибка и расширяема — вы можете написать плагин для мониторинга практически всего (если, конечно, такой плагин ещё не написан). Базовый набор разворачивается в пару консольных команд, а дополнительные плагины и модули сильно расширяют функционал системы и позволяют интегрировать её с такими продуктами, как InfluxDB, Grafana и прочими. Несмотря на необходимость конфигурирования большей части настроек из консоли, Icinga не кажется сложной. В целом, система мониторинга Icinga полноценный и удобный продукт, и её можно смело рекомендовать к использованию.