Развёртывание Icinga 2 на базе Debian 12. Часть 2. Установка Icinga DB и Icinga Web 2

Deploying Icinga 2 on Debian 12. Part 2. Installing Icinga DB and Icinga Web 2В прошлой части мы провели развёртывание СУБД 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 architecture

Можно считать, что функционал 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":

Icinga Web 2 Configuration Wizard - Setup Token

На следующем шаге выбора модулей оставляем включённым только модуль "Icingadb":

Icinga Web 2 Configuration Wizard - Selecting Modules

На следующем шаге мастера настройки будет выполнена проверка системных требований для полноценной работы Icinga Web 2. В моём случае была обнаружена нехватка расширения PHP Imagick.

Icinga Web 2 Configuration Wizard - Warning about missing PHP Imagick module

Не закрывая веб-страницы мастера настройки, перейдём в консоль сервера и доустановим в систему пакет расширения PHP Imagick, после чего перезапустим службу веб-сервера apache2:

# apt-get install php-imagick
# systemctl restart apache2

Вернёмся на веб-страницу мастера настройки и по F5 обновим страницу. Убедимся в том, что требование выполнено:

Icinga Web 2 Configuration Wizard - PHP Imagick module verified successfully

На следующем шаге настройки аутентификации оставим предложенную по умолчанию аутентификацию с хранением учётных данных в БД - Database (аутентификацию с помощью LDAP можно настроить позже).

Icinga Web 2 Configuration Wizard - Selecting Authentication TypeДалее нам потребуется указать параметры базы данных для хранения учётных данных 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 Configuration Wizard - Configuring the Authentication Database

На следующем шаге имя провайдера аутентификации оставляем предложенное по умолчанию..

Icinga Web 2 Configuration Wizard - Backend name for authentication

далее зададим имя и пароль для учётной записи администратора, с помощью которой мы в дальнейшем будем подключаться к веб-интерфейсу Icinga Web 2:

Icinga Web 2 Configuration Wizard - Entering the Icinga Web 2 administrator account

На следующем шаге мастера значения для работы веб-приложения Icinga Web 2 можно оставить предложенными по умолчанию. Здесь я предпочёл лишь изменить тип логирования с записи в Syslog на запись в выделенный лог-файл и уровень логирования с Error на Warning:

Icinga Web 2 Configuration Wizard - Web Application Configuration

При этом следует убедиться, что на сервере создан соответствующий каталог для лог-файлов и на группу 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 Web 2 Configuration Wizard - General setup status

Следующим этапом мастер настройки нам предложит перейти к настройке конфигурации модуля Icinga DB Web.

Icinga DB Web Configuration Wizard - Welcome

Укажем параметры ранее созданной нами базы данных "icingadb" с пользователем "icingadb-usr" и нажмём кнопку проверки конфигурации.

Icinga DB Web Configuration Wizard - Database Connection Parameters

На следующем шаге нужно будет указать параметры подключения к экземпляру Redis.

Icinga DB Web Configuration Wizard - Redis connection parameters

На следующем шаге нам потребуется настроить доступ 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 DB Web Configuration Wizard - parameters for connecting to Icinga 2 API

Просмотрим статусное сообщение о выполненных настройках и нажмём кнопку завершения.

Icinga DB Web Configuration Wizard - General setup status

На финальной веб-форме примем поздравления об успешной настройке Icinga Web 2 в связке с Icinga DB Web и просмотрим в нижнем окне лог выполнения, где будут описаны выполненные действия.

Icinga DB Web Configuration Wizard - Configuration Log

Общий лог выполнения будет выглядеть примерно так:

Успешно подключен к существующей базе данных "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 Web - Login Screen

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

Icinga Web - Dashboard

В настройках пользователя (если перейти по гиперссылке, которая скрывается в правом нижнем углу на имени пользователя) при желании можно изменить тему оформления с тёмной на светлую.

 

Инициализация 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 и о его службах. То есть теперь в веб-консоли нет информации ни об одном хосте.

Icinga Web - Tactical Overview - No information about hosts and services

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

Добавить комментарий