В прошлой части мы провели развёртывание СУБД MariaDB, базовой компоненты Icinga 2, а также выполнили активацию фичи Icinga 2 API. В этой части мы пройдёмся по следующим четырём пунктам нашего плана и выполним установку специализированного экземпляра Redis, бакэнд компоненты Icinga DB и фронтэнд компоненты Icinga Web 2 с модулем Icinga DB Web, после чего проведём инициализацию Master-сервера Icinga.
Архитектура Icinga DB
Ключевую информацию об архитектуре и развёртыванию Icinga DB можно найти в онлайн документации по ссылкам: "Icinga DB", "Set up Icinga DB" и "Installing Icinga DB on Debian".
Архитектурно Icinga DB - это набор механизмов для публикации, синхронизации и визуализации данных мониторинга в экосистеме Icinga, состоящий из:
- Бакэнд служба Icinga DB, которая синхронизирует данные мониторинга между сервером Redis и базой данных;
- Базовая служба Icinga 2 с включенной функцией Icinga DB, отвечающей за публикацию данных на сервере Redis;
- Фронтэнед Icinga Web с включенным модулем Icinga DB Web, использующий как подключение к Redis, так и подключение к базе данных.
Можно считать, что функционал Icinga DB является заменой старому механизму DB IDO (Database Icinga Data Output), который мы использовали ранее.
Развёртывание фронтэнда Icinga Web с использованием в качестве бакэнда Icinga DB вместо устаревшего бакенда IDO имеет свои особенности, но при этом имеет и некоторые схожие моменты с ранее представленным описанием в заметке "Развёртывание и настройка Icinga 2 на Debian 8.6. Часть 2. Установка Icinga Web 2".
Установка экземпляра Redis
Установим из ранее подключенного репозитория Icinga специализированный вспомогательный экземпляр сервера Redis:
# apt-get install icingadb-redis
Запустим службу icingadb-redis и проверим её статус:
# systemctl start icingadb-redis.service
# systemctl status icingadb-redis.service
В системе на loopback-интерфейсе появится TCP прослушиватель на порту 6380.
# ss -lnptu | grep redis
tcp LISTEN 0 511 127.0.0.1:6380 0.0.0.0:* users:(("icingadb-redis-",pid=4231,fd=6))
Конфигурация экземпляра Redis описана в файле /etc/icingadb-redis/icingadb-redis.conf.
Установка компоненты Icinga DB
Согласно документа "Installing Icinga DB Package" устанавливаем компоненту Icinga DB:
# apt-get install icingadb
Активируем фичу Icinga icingadb и перезапускаем службу icinga2:
# icinga2 feature enable icingadb
# systemctl restart icinga2
Создание БД для Icinga DB
Создадим базу данных в MariaDB, которая будет в дальнейшем использоваться для конфигурации Icinga DB. Подключаемся к MariaDB:
# mariadb -u root -p
В командном интерфейсе MariaDB выполняем SQL запросы на создание пустой БД с именем "icingadb", а также на создание пользователя "icingadb-usr" и предоставление этом упользователю полных прав на новую БД:
CREATE DATABASE icingadb;
CREATE USER 'icingadb-usr'@'localhost' IDENTIFIED BY 'My_passw0rd2';
GRANT ALL ON icingadb.* TO 'icingadb-usr'@'localhost';
exit
В созданную БД импортируем схему Icinga DB:
# mariadb -u root -p icingadb </usr/share/icingadb/schema/mysql/schema.sql
Отредактируем конфигурацию Icinga DB:
# nano /etc/icingadb/config.yml
Найдём в файле фрагмент указания имени БД, имени пользователя БД и его пароля. Укажем данные ранее созданного пользователя "icingadb-usr":
...
# Database name.
database: icingadb
# Database user.
user: icingadb-usr
# Database password.
password: My_passw0rd2
...
Запускаем службу icingadb и проверяем её статус:
# systemctl enable icingadb
# systemctl restart icingadb
# systemctl status icingadb
Установка Icinga Web 2 с модулем Icinga DB Web
Отталкиваясь от документов "Install Icinga Web 2 on Debian" и "Installing Icinga DB Web on Debian", устанавливаем Icinga DB Web и Icinga Web 2:
# apt-get install icingadb-web
При установке подтянутся все необходимые зависимости - веб сервер apache2, php 8.2 и его расширения, icingaweb2 icingacli и т.п..
После установки пакетов убедимся в том, что пользователь, от имени которого работают процессы веб-сервера apache2 (в Debian 12 по умолчанию это пользователь "www-data"), добавлен в группу "icingaweb2", которая была создана в системе в ходе установки пакета icingaweb2:
# id www-data
uid=33(www-data) gid=33(www-data) groups=33(www-data),993(icingaweb2)
Кроме того, пользователя, от имени которого работают основные процессы icinga2 (в Debian 12 по умолчанию это пользователь "nagios"), нам необходимо включить в группу "icingaweb2", чтобы в дальнейшем не было проблем при работе с некоторыми плагинами мониторинга:
# usermod -a -G icingaweb2 nagios
Перезапустим службу веб-сервера apache2:
# systemctl restart apache2
Сгенерируем токен, который потребуется для инициализации Icinga Web 2:
# icingacli setup token create
The newly generated setup token is: 97781878a0c46be2
Посмотреть действующий токен инициализации можно так:
# icingacli setup token show
The current setup token is: 97781878a0c46be2
Переходим в веб-браузере по ссылке, где нас ждёт мастер первичной настройки Icinga Web 2:
http://{servername}/icingaweb2/setup
Ознакомимся с инструкциями, изложенными на веб-странице и, в соответствии с этими инструкциями, выполним команду создания каталога конфигурации для Icinga Web 2:
# icingacli setup config directory --group icingaweb2
Successfully created configuration directory /etc/icingaweb2
Введём ранее сгенерированный токен инициализации и нажмём "Next":
На следующем шаге выбора модулей оставляем включённым только модуль "Icingadb":
На следующем шаге мастера настройки будет выполнена проверка системных требований для полноценной работы Icinga Web 2. В моём случае была обнаружена нехватка расширения PHP Imagick.
Не закрывая веб-страницы мастера настройки, перейдём в консоль сервера и доустановим в систему пакет расширения PHP Imagick, после чего перезапустим службу веб-сервера apache2:
# apt-get install php-imagick
# systemctl restart apache2
Вернёмся на веб-страницу мастера настройки и по F5 обновим страницу. Убедимся в том, что требование выполнено:
На следующем шаге настройки аутентификации оставим предложенную по умолчанию аутентификацию с хранением учётных данных в БД - Database (аутентификацию с помощью LDAP можно настроить позже).
Далее нам потребуется указать параметры базы данных для хранения учётных данных Icinga Web 2, но для начала её нужно создать. Перейдём в консоль сервера и создадим новую пустую БД в MariaDB, например, с именем "icingaweb2", к которой предоставим доступ специально создаваемому в MariaDB пользователю, например "icingaweb2-usr". Подключаемся к интерфейсу MariaDB:
# mariadb -u root -p
Выполняем SQL-запросы:
CREATE DATABASE icingaweb2;
GRANT ALL ON icingaweb2.* TO 'icingaweb2-usr'@'localhost' IDENTIFIED BY 'my!Pasw0rd3';
exit
Теперь вернёмся на веб-страницу мастера конфигурации Icinga Web 2 и введём информацию о только что созданной базе данных и учётных данных пользователя для доступа к ней, после чего нажмём кнопку "Validate Configuration":
На следующем шаге имя провайдера аутентификации оставляем предложенное по умолчанию..
далее зададим имя и пароль для учётной записи администратора, с помощью которой мы в дальнейшем будем подключаться к веб-интерфейсу Icinga Web 2:
На следующем шаге мастера значения для работы веб-приложения Icinga Web 2 можно оставить предложенными по умолчанию. Здесь я предпочёл лишь изменить тип логирования с записи в Syslog на запись в выделенный лог-файл и уровень логирования с Error на Warning:
При этом следует убедиться, что на сервере создан соответствующий каталог для лог-файлов и на группу icingaweb2 выданы разрешения на запись в этот каталог:
# ls -la /var/log/icingaweb2/
total 8
drwxrwsr-x 2 root icingaweb2 4096 Nov 15 15:07 .
drwxr-xr-x 13 root root 4096 May 3 19:37 ..
Далее будет выведено сообщение об успешной конфигурации сервера со сводной информацией по определённым нами ранее параметрам.
Следующим этапом мастер настройки нам предложит перейти к настройке конфигурации модуля Icinga DB Web.
Укажем параметры ранее созданной нами базы данных "icingadb" с пользователем "icingadb-usr" и нажмём кнопку проверки конфигурации.
На следующем шаге нужно будет указать параметры подключения к экземпляру Redis.
На следующем шаге нам потребуется настроить доступ Icinga DB Web к Icinga API. Для этого перейдём на консоль сервера и, согласно документа "Icinga DB Web Configuration", в конфигурационном файле api-users.conf опишем нового пользователя API с минимально необходимым набором прав:
# nano /etc/icinga2/conf.d/api-users.conf
Добавим в файл фрагмент:
object ApiUser "icingadb-web-apiusr" {
password = "mYpWd!0wE8fds"
permissions = [ "actions/*", "objects/modify/*", "objects/query/*", "status/query" ]
}
Для того, чтобы новая учётная запись пользователя API заработала, перезапустим службу icinga2:
# systemctl status icinga2.service
Вернёмся к мастеру настройки Icinga DB Web и укажем только что созданную учётную запись пользователя Icinga API "icingadb-web-apiusr", затем выполним валидацию конфигурации.
Просмотрим статусное сообщение о выполненных настройках и нажмём кнопку завершения.
На финальной веб-форме примем поздравления об успешной настройке Icinga Web 2 в связке с Icinga DB Web и просмотрим в нижнем окне лог выполнения, где будут описаны выполненные действия.
Общий лог выполнения будет выглядеть примерно так:
Успешно подключен к существующей базе данных "icingaweb2"...
Создание схемы базы данных...
Логин "icingaweb2-usr" уже существует...
Required privileges were already granted to login "icingaweb2-usr".
The database has been fully set up!
Общая конфигурация была успешно записана в: /etc/icingaweb2/config.ini
Конфигурация аутентификации успешно записана в: /etc/icingaweb2/authentication.ini
Аккаунт "icingawebadmin" была успешно создан.
Аккаунт "icingawebadmin " был успешно определен в качестве первичного администратора.
User Group Backend configuration has been successfully written to: /etc/icingaweb2/groups.ini
User Group "Администраторы" has been successfully created.
Аккаунт "icingawebadmin" была успешно добавлен как участник группы пользователей "Администраторы".
Resource configuration has been successfully written to: /etc/icingaweb2/resources.ini
Успешное обновление конфигурации ресурсов: /etc/icingaweb2/resources.ini
Успешное обновление модуля конфигурации: /etc/icingaweb2/modules/icingab/config.ini
Успешное обновление конфигурации транспорта команд: /etc/icingaweb2/modules/icingadb/commandtransports.ini
Module "icingadb" has been successfully enabled.
Как мы видим из этого вывода, место хранения конфигурационных файлов модуля Icinga DB Web – каталог /etc/icingaweb2/modules/icingadb/.
В дальнейшем, при необходимости, можно вносить некоторые корректировки в поведение веб-интерфейса Icinga DB Web через файл config.ini, допустимые параметры которого описаны в документе "Icinga DB Web Configuration : Available Settings and defaults".
По кнопке, ссылающейся на адрес страницы входа, переходим на ссылку:
http://{servername}/icingaweb2/authentication/login
Для входа в веб-интерфейс Icinga Web 2 введём логин и пароль ранее созданной нами учётной записи "icingawebadmin".
Попадаем на дашборд и убеждаемся, что присутствует информация о по умолчанию запущенных в Icinga службах мониторинга для нашего сервера.
В настройках пользователя (если перейти по гиперссылке, которая скрывается в правом нижнем углу на имени пользователя) при желании можно изменить тему оформления с тёмной на светлую.
Инициализация Master-сервера Icinga
Более подробно теоретические моменты о клиент-серверной архитектуре Icinga рассматривались нами ранее в статье "Инициализация Master-сервера и подключение Linux-клиентов Icinga (классический вариант) на Debian 8.6". Здесь мы пройдёмся по базовой процедуре инициализации Master-сервера.
Запустим мастер настройки узла Icinga:
# icinga2 node wizard
Последует ряд вопросов, на которые нам нужно будет ответить…
На первый вопрос мастера отвечаем отрицательно (вводим "n"), чтобы перевести мастер конфигурирования в режим настройки Master-узла.
Welcome to the Icinga 2 Setup Wizard!
We will guide you through all required configuration details.
Please specify if this is an agent/satellite setup ('n' installs a master setup) [Y/n]: n
Затем нам будет предложено ввести имя Common Name (CN). Это имя будет использоваться для генерации SSL-сертификата, который будет применяться для защиты соединений между сервером и его клиентами. По умолчанию в качестве CN предлагается FQDN-имя нашего сервера. Соглашаемся с этим именем, просто нажав Enter.
Starting the Master setup routine...
Please specify the common name (CN) [KOM-MON01.holding.com]:
Так как в прошлой части мы уже запускали процедуру активации Icinga API (выполняли команду "icinga2 api setup"), то уже тогда на нашем сервере был создан локальный Центр сертификации (certificate authority) и сгенерирован этим ЦС SSL-сертификат (в каталоге /etc/icinga2/pki/) на имя нашего сервера. Поэтому в данном случае мастер конфигурирования узла обнаружит этот сертификат и подхватит его. Также мастер обнаружит, что поддержка API в Icinga уже включена.
Reconfiguring Icinga...
Checking for existing certificates for common name 'KOM-MON01.holding.com'...
Certificate '/var/lib/icinga2/certs//KOM-MON01.holding.com.crt' for CN 'KOM-MON01.holding.com' already existing. Skipping certificate generation.
Generating master configuration for Icinga 2.
'api' feature already enabled.
Предложенное по умолчанию имя мастер-зоны "master" меняем на FQDN имя сервера:
Master zone name [master]: KOM-MON01.holding.com
На вопрос добавления дополнительных глобальных зон отвечаем отрицательно - "n".
Default global zones: global-templates director-global
Do you want to specify additional global zones? [y/N]: n
Далее мастер предложит добавить информацию о Bind Host и Bind Port, где мы ничего не вводим, а просто нажимаем Enter.
Please specify the API bind host/port (optional):
Bind Host []:
Bind Port []:
На вопрос о том, хотим ли мы отключить подключение конфигурации через файлы в каталоге /etc/icinga2/conf.d/ отвечаем утвердительно - "y"
Do you want to disable the inclusion of the conf.d directory [Y/n]: y
Disabling the inclusion of the conf.d directory...
Checking if the api-users.conf file exists...
Done.
Now restart your Icinga 2 daemon to finish the installation!
Мастер конфигурирования завершит свою работу.
Проверим, что мастер правильно откорректировал файл зон Icinga. В этом файле должна присутствовать зона с FQDN именем нашего сервера.
# cat /etc/icinga2/zones.conf/*
* Generated by Icinga 2 node setup commands
* on 2024-05-05 12:46:20 +0300
*/
object Endpoint "KOM-MON01.holding.com" {
}
object Zone "KOM-MON01.holding.com" {
endpoints = [ "KOM-MON01.holding.com" ]
}
object Zone "global-templates" {
global = true
}
object Zone "director-global" {
global = true
}
Для вступления изменений конфигурации в силу, перезапустим службу icinga2:
# systemctl restart icinga2
После этого мы увидим, что в веб-консоли Icinga Web пропала ранее доступная информация о нашем сервере, как о клиенте Icinga и о его службах. То есть теперь в веб-консоли нет информации ни об одном хосте.
Это нормальная ситуация, так как запущенный нами выше мастер конфигурирования с нашего согласия отключил конфигурационные файлы в /etc/icinga2/conf.d/, в которых и была изначально занесена информация о нашем сервере в hosts.conf и services.conf. Исключением является лишь файл api-users.conf, который отдельно включен в конфигурацию сервера Icinga. Подтверждение этому можно увидеть в конце основного конфигурационного файла /etc/icinga2/icinga2.conf:
...
/**
* Although in theory you could define all your objects in this file
* the preferred way is to create separate directories and files in the conf.d
* directory. Each of these files must have the file extension ".conf".
*/
// Disabled by the node setup CLI command on 2024-05-05 17:12:53 +0300
// include_recursive "conf.d"
// Added by the node setup CLI command on 2024-05-05 17:12:53 +0300
include "conf.d/api-users.conf"
В дальнейшем мы сможем добавить сам сервер мониторинга в качестве агента мониторинга через стандартную функцию добавления хоста в веб-интерфейсе Icinga Director. А к установке Icinga Director мы перейдём в следующе части нашего плана развёртывания.
Добавить комментарий