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

Deploying Icinga 2 on Debian GNU Linux 12 Bookworm. Part 1. Installing MariaDB and Icinga 2Ранее мы в подробностях рассматривали процесс развёртывания и настройки сервера мониторинга Icinga 2 на базе ОС Debian GNU/Linux 8 (Jessie). Это был длинный цикл заметок из 14 частей, ссылки на которые можно найти в соответствующем разделе Вики. На этой ОС мы продолжали эксплуатацию сервера до окончания срока её поддержки, после чего методом In-Place Upgrade успешно обновили сервер до уровня Debian 9 (Stretch), а через пару лет, также успешно подтянулись до уровня Debian 10 (Buster). Последующее предварительное тестовое обновление до уровня Debian 11 (Bullseye) показало то, что "сломалось всё, что только могло сломаться", а желания разбираться со всеми возникшими проблемами на тот момент времени не было. Поэтому было решено остаться на Debian 10 до окончания срока поддержки этой ОС. И вот этот срок почти настал, поэтому самое время провести процедуру миграции Icinga на новый сервер на базе современной ОС Debian 12 (Bookworm). Полноценной миграцией назвать это трудно, так как со старого сервера на новый мы будем переносить лишь часть используемой ранее логики и данных. Например, вместо старого классического базового модуля Monitoring c DB IDO, теперь мы будем использовать Icinga DB с обновлённым веб-интерфейсом Icinga DB Web. А вместо старого хранилища метрик Graphite, мы будем разворачивать более современный InfluxDB v2 с пересмотром и переработкой целого ряда собираемых метрик. Кроме того, уже в ходе самой миграции было решено отказаться от некоторых старых механизмов, например, от использования Service Apply Rules в пользу Service Sets.

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

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

1) Установка СУБД MariaDB, которая в дальнейшем будет использоваться для хранения небольших баз данных, хранящих конфигурацию таких компонент как Icinga DB, Icinga Web, Icinga Director;
2) Установка базовой компоненты Icinga 2;
3) Активация Icinga 2 API;
4) Установка специализированного экземпляра Redis, который потребуется для работы Icinga DB;
5) Установка компоненты Icinga DB и создание БД в MariaDB под нужды Icinga DB;
6) Установка Icinga Web 2 с модулем Icinga DB Web и создание БД в MariaDB под нужды Icinga Web 2;
7) Инициализация Master-сервера Icinga;
8) Установка модуля Icinga Director и создание БД в MariaDB под нужды Icinga Director;
9) Миграция данных между старым и новым экземпляром Icinga Director с помощью Configuration Basket;
10) Настройка оповещений в Icinga Director;
11) Настройка работы с SNMP и интеграция с Icinga 2 API;
12) Установка хранилища метрик InfluxDB 2 и его интеграция с Icinga;
13) Установка системы визуализации Grafana и интеграция с InfluxDB и Icinga Web;
14) Интеграция Icinga Web 2 c Active Directory и конфигурация веб-сервера Apache

Далее в этой заметке мы пройдёмся по первым трём пунктам этого плана.

 

Установка СУБД MariaDB

Первой же компонентой, которой в дальнейшем потребуется БД, является Icinga DB. Согласно документации, для работы Icinga DB потребуется MySQL 5.5 или новее, MariaDB 10.1 или новее, либо PostgreSQL 9.6 или новее. Для работы Icinga Director те же требования, за исключением того, что MySQL потребуется не нижу версии 5.7.

Установим сервер MariaDB из официальных репозиториев Debian 12:

# apt-get install mariadb-server

Запустим скрипт первичной базовой настройки безопасности MariaDB:

# mariadb-secure-installation

Последует ряд вопросов, на которые можно ответить следующим образом:

Enter current password for root (enter for none): жмём Enter
Switch to unix_socket authentication [Y/n] n
Change the root password? [Y/n] n
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y

Пример листинга, в котором видны задаваемые вопросы и даны пояснения по этим позициям:

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] n
 ... skipping.

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] n
 ... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

На вопрос установки отдельного root пароля для доступа к MariaDB мы ответили отрицательно, потому что предполагается, что мы будем работать с базами только локально и только в контексте системного пользователя root, для которого разрешено подключаться к СУБД без явного указания пароля.

Проверим наличие TCP прослушивателя на порту 3306:

# ss -lnptu | grep maria

tcp  LISTEN  0  80  127.0.0.1:3306  0.0.0.0:*  users:(("mariadbd",pid=6751,fd=21))

Попробуем подключиться к СУБД с именем пользователя root и без указания пароля:

# mariadb -u root -p

Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 37
Server version: 10.11.6-MariaDB-0+deb12u1 Debian 12
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>

Проверим статус СУБД:

MariaDB [(none)]> status
--------------
mariadb  Ver 15.1 Distrib 10.11.6-MariaDB, for debian-linux-gnu (x86_64) using  EditLine wrapper
Connection id:          38
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server:                 MariaDB
Server version:         10.11.6-MariaDB-0+deb12u1 Debian 12
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb3
Conn.  characterset:    utf8mb3
UNIX socket:            /run/mysqld/mysqld.sock
Uptime:                 8 min 18 sec
Threads:1  Questions:75  Slow queries:0  Opens:33  Open tables:26  Queries per second avg:0.150
--------------
MariaDB [(none)]> exit
Bye

 

Базовая установка Icinga 2

В качестве опорного документа с рекомендациями по установке Icinga 2 на Debian можно использовать этот:
"Install Icinga 2 on Debian".

Согласно рекомендации с главной страницы Icinga Package Repository, в нашу систему Debian следует подключить репозиторий backports.

Отредактируем основной системный файл с описанием базовых источников для скачивания deb-пакетов:

# nano /etc/apt/sources.list

Добавим в конец файла строки подключения к репозиторию bookworm-backports:

deb http://deb.debian.org/debian bookworm-backports main contrib non-free non-free-firmware
deb-src http://deb.debian.org/debian bookworm-backports main contrib non-free non-free-firmware

Обновим кеш менеджера пакетов и установим пакеты, которые потребуется в дальнейшем:

# apt-get update
# apt-get install apt-transport-https wget gnupg

Скачаем и добавим в конфигурацию менеджера пакетов ключ репозитория Icinga:

# wget -O - https://packages.icinga.com/icinga.key | gpg --dearmor -o /etc/apt/keyrings/icinga-archive-keyring.gpg

Создадим конфигурационный файл для подключения репозитория Icinga:

# nano /etc/apt/sources.list.d/icinga.list

Добавим в файл следующие строки:

deb [signed-by=/etc/apt/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/debian icinga-bookworm main
deb-src [signed-by=/etc/apt/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/debian icinga-bookworm main

Обновим кеш менеджера пакетов и установим основной базовый пакет Icinga и базовый пакет плагинов мониторинга:

# apt-get update
# apt-get install icinga2 monitoring-plugins

В ходе установки будут активированы 3 базовые фичи Icinga -  "checker", "notification", "mainlog".

Перезапустим службу icinga2 и проверим её статус:

# systemctl restart icinga2.service
# systemctl status icinga2.service

В ходе установки пакета monitoring-plugins в систему установиться rpcbind и будут запущены его TCP/UDP прослушиватели на порту 111. В нашем случае необходимости в нём нет, поэтому мы деактивируем rpcbind следующим образом:

# systemctl stop rpcbind
# systemctl stop rpcbind.socket
# systemctl disable rpcbind.socket
# systemctl disable rpcbind.service

 

Активация Icinga 2 API

Активируем в Icinga фичу "api", которая понадобиться в дальнейшем для работы таких механизмов как Icinga DB и Icinga Director. В ходе её активации будет сгенерирован сертификат сервера и в файл /etc/icinga2/conf.d/api-users.conf будет добавлен пользователь с именем "root" для административного доступа к API (не путать с системным пользователем root). Для этого пользователя будет сгенерирован пароль, который также будет записан в файл api-users.conf.

# icinga2 api setup

information/cli: Generating new CA.
information/base: Writing private key to '/var/lib/icinga2/ca//ca.key'.
information/base: Writing X509 certificate to '/var/lib/icinga2/ca//ca.crt'.
information/cli: Generating new CSR in '/var/lib/icinga2/certs//KOM-MON01.holding.com.csr'.
information/base: Writing private key to '/var/lib/icinga2/certs//KOM-MON01.holding.com.key'.
information/base: Writing certificate signing request to '/var/lib/icinga2/certs//KOM-MON01.holding.com.csr'.
information/cli: Signing CSR with CA and writing certificate to '/var/lib/icinga2/certs//KOM-MON01.holding.com.crt'.
information/pki: Writing certificate to file '/var/lib/icinga2/certs//KOM-MON01.holding.com.crt'.
information/cli: Copying CA certificate to '/var/lib/icinga2/certs//ca.crt'.
information/cli: Adding new ApiUser 'root' in '/etc/icinga2/conf.d/api-users.conf'.
information/cli: Reading '/etc/icinga2/icinga2.conf'.
information/cli: Enabling the 'api' feature.
Enabling feature api. Make sure to restart Icinga 2 for these changes to take effect.
information/cli: Updating 'NodeName' constant in '/etc/icinga2/constants.conf'.
information/cli: Created backup file '/etc/icinga2/constants.conf.orig'.
information/cli: Updating 'ZoneName' constant in '/etc/icinga2/constants.conf'.
information/cli: Backup file '/etc/icinga2/constants.conf.orig' already exists. Skipping backup.
Done.

Now restart your Icinga 2 daemon to finish the installation!

Перезапустим основную службу Icinga:

# systemctl restart icinga2.service

После перезапуска службы в системе должен появиться TCP прослушиватель на порту 5665.

# ss -lnptu | grep icinga

tcp  LISTEN  0  4096  *:5665  *:*  users:(("icinga2",pid=2988,fd=20))

Не забываем внести в правила брандмауэра nftables дополнительное правило, разрешающее доступ к порту Icinga API для агентов Icinga из локальной сети.

Заглянем в файл /etc/icinga2/conf.d/api-users.conf, чтобы узнать сгенерированный пароль для пользователя API с именем "root". Этот пароль нам пригодится в дальнейшем.

# cat /etc/icinga2/conf.d/api-users.conf

/**
 * The ApiUser objects are used for authentication against the API.
 */
object ApiUser "root" {
  password = "e7e87ca4f9cc4b2a"
  // client_cn = ""

  permissions = [ "*" ]
}

На этом всё. В следующей части нашего описания мы перейдём к развёртыванию Icinga DB и Icinga Web 2 , а также проведём инициализацию Master-сервера Icinga.

Только один комментарий Комментировать

  1. EGOR VERSHININ /

    https://habr.com/ru/articles/772756/

    Возможно будет полезно

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