Свое знакомство с мониторингом Icinga2 я начал в 2018-м году, со статей IT-KB, за что им огромная благодарность. Статьи были подробные, под Debian 8. В то время я активно использовал FreeBSD и за несколько дней изучения мне удалось запустить мониторинг в CBSD JAIL. В 2020-м все это было мною опробовано на Debian 10. Естественно с подробным документированием и составлением статей в личной WiKi. Мониторинг интересный, легкий, возможности широкие, мобильный клиент под Android приличный и удобный. Но есть проблема - даже по своим заметкам в WiKi установка в новой локации каждый раз занимает от часа до двух (на данный момент в телефоне уже с 10-к штук инстансов). Год назад мне все это надоело и я потратил пару дней, чтобы написать ряд Ansible Playbook-ов, которые большую часть шагов сделают автоматически. Подробности ниже. На текущий момент предлагается все устанавливать на Debian 12 (естественно x64). Нужно от 2 ядер и от 2 Гб ОЗУ (вообще на 4 ядрах и 4 Гб ОЗУ мониторинг способен легко отслеживать статус пары сотен серверов и пары тысяч метрик. При этом за 1 год прирост данных будет в районе 1-2 Гб (база influxdb в основном)). После установки на диске будет около 4,5 Гб занятого пространства. Если мы мониторим скромные объемы (например, 100 серверов и 1000 метрик) - то в первые 5 лет мы вряд ли вылезем за 10-12 Гб по моему личному опыту (суммарный объем корневой FS). Icinga2 продукт модульный. Что по итогу будет установлено: Icinga2 - ядро продукта (сам мониторинг) Icingaweb2 + Apache2 (как WEB-интерфейс) IcingaDB - новый визуальный WEB-компонент для управления и мониторинга Icingadb-redis - свой экземпляр Redis для IcingaDB Icinga-director - WEB-компонент для настройки Icinga (хостов, сервисов, команд и т.д.) MariaDB SQL - для хранения 4-х мелких баз данных (которые не растут со временем - по сути это настройки Icinga/Web/Director/IcingaDB) InfluxDB - для хранения метрик (база растет, но медленно - у меня за годы накопления метрик базы не более 2-3 Гб по итогу в данный момент) Grafana - для отрисовки графиков по данным из InfluxDB и отображения их в IcingaWeb2 Как видите, Icinga2 сложный модульный продукт и первоначальное изучение его с нуля занимает приличное время (включая установку, на которую первый раз приходится тратить многие часы/дни). Данная статья - пример, как поставить все это за 5 минут и не сильно вспотеть при этом ))) Скачиваем архив с Playbook-ами и доп файлами: ссылка. Далее всю работу я провожу в каталоге /root (привычка, увы). Листинг команд подготовки: Распаковали архив, установили Ansible, подготовили ключи SSH для работы, зашли по SSH для проверки и чтобы обновился файл /root/.ssh/known_hosts. В начале многих Playbook-ов указаны пароли (большая часть от MariaDB - от root, от отдельных юзеров, которые работают с IcingaIDO, IcingaWeb, Director, IcingaDB). Плюс есть один Blowfish HASH от юзера icingaadmin. Для простоты везде я указал пароль: icingapassword. Чтобы все это перед установкой поменять, выполните команду (grep -R -i "_password:" *) и во всех сценариях замените пароли: Начинаем запускать последовательно через ansible-playbook 0-icinga.yml (далее 1-icingaweb-modules.yml и т.д.). Пример успешно отработавших 8 сценариев: root@icinga9:~/IcingaAnsible# ansible-playbook 0-icinga.yml PLAY [debian] ********************************************************************************************************************************************************************** TASK [Gathering Facts] ************************************************************************************************************************************************************* ok: [debian] TASK [Install Icinga2 Software] **************************************************************************************************************************************************** changed: [debian] TASK [Change root password] ******************************************************************************************************************************************************** changed: [debian] TASK [Create ~/.my.cnf] ************************************************************************************************************************************************************ changed: [debian] TASK [Insert into ~/.my.cnf] ******************************************************************************************************************************************************* changed: [debian] TASK [SQL Flush Privileges] ******************************************************************************************************************************************************** changed: [debian] TASK [Remove test database] ******************************************************************************************************************************************************** ok: [debian] TASK [Enable ReWrite Apache Module] ************************************************************************************************************************************************ changed: [debian] TASK [Set date.timezone in PHP configuration] ************************************************************************************************************************************** changed: [debian] TASK [Enable Icinga2 feature - COMMAND] ******************************************************************************************************************************************** changed: [debian] TASK [Get random password for IDO module from ido-mysql.conf] ********************************************************************************************************************** changed: [debian -> 127.0.0.1] TASK [set_fact] ******************************************************************************************************************************************************************** ok: [debian] TASK [debug] *********************************************************************************************************************************************************************** ok: [debian] => { "ido_password": "d6qyFduTCvpi" } TASK [Drop IDO Database] *********************************************************************************************************************************************************** ok: [debian] TASK [Create Database for IDO Icinga Module] *************************************************************************************************************************************** changed: [debian] TASK [Fill icinga2 database from Template] ***************************************************************************************************************************************** changed: [debian] TASK [Create SQL User icinga2 for Access to IDO Database] ************************************************************************************************************************** changed: [debian] TASK [Flush privileges in SQL] ***************************************************************************************************************************************************** changed: [debian] TASK [Enable Icinga2 feature - IDO-MYSQL] ****************************************************************************************************************************************** changed: [debian] TASK [Restart Icinga2 Service] ***************************************************************************************************************************************************** changed: [debian] TASK [Drop Icingaweb2 Database] **************************************************************************************************************************************************** ok: [debian] TASK [Create Database for Icingaweb2 Module] *************************************************************************************************************************************** changed: [debian] TASK [Create SQL Database for Icingaweb2] ****************************************************************************************************************************************** changed: [debian] TASK [Grant Access for Database for Icingaweb2] ************************************************************************************************************************************ changed: [debian] TASK [Create Icingaweb2 User in Database] ****************************************************************************************************************************************** changed: [debian] TASK [Flush privileges in SQL] ***************************************************************************************************************************************************** changed: [debian] TASK [Restart Apache2 Service] ***************************************************************************************************************************************************** changed: [debian] PLAY RECAP ************************************************************************************************************************************************************************* debian                     : ok=27   changed=21   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 root@icinga9:~/IcingaAnsible# ansible-playbook 1-icingaweb-modules.yml PLAY [debian] ********************************************************************************************************************************************************************** TASK [Gathering Facts] ************************************************************************************************************************************************************* ok: [debian] TASK [Install Grafana module for Icingaweb2] *************************************************************************************************************************************** changed: [debian] TASK [Install IPL module for Icingaweb2] ******************************************************************************************************************************************* changed: [debian] TASK [Install Incubator module for Icingaweb2] ************************************************************************************************************************************* changed: [debian] TASK [Install Reactbundle module for Icingaweb2] *********************************************************************************************************************************** changed: [debian] TASK [Install Director module for Icingaweb2] ************************************************************************************************************************************** changed: [debian] TASK [Enable Monitoring Module in Icingaweb2] ************************************************************************************************************************************** changed: [debian] PLAY RECAP ************************************************************************************************************************************************************************* debian                     : ok=7    changed=6    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 root@icinga9:~/IcingaAnsible# ansible-playbook 2-icingaweb-init-configuration.yml PLAY [debian] ********************************************************************************************************************************************************************** TASK [Gathering Facts] ************************************************************************************************************************************************************* ok: [debian] TASK [Install authentication.ini] ************************************************************************************************************************************************** changed: [debian] TASK [Install config.ini] ********************************************************************************************************************************************************** changed: [debian] TASK [Install groups.ini] ********************************************************************************************************************************************************** changed: [debian] TASK [Get random password for IDO module from ido-mysql.conf] ********************************************************************************************************************** changed: [debian -> 127.0.0.1] TASK [set_fact] ******************************************************************************************************************************************************************** ok: [debian] TASK [debug] *********************************************************************************************************************************************************************** ok: [debian] => { "ido_password": "d6qyFduTCvpi" } TASK [Install resources.ini] ******************************************************************************************************************************************************* changed: [debian] TASK [Install roles.ini] *********************************************************************************************************************************************************** changed: [debian] TASK [Create monitoring cfg folder] ************************************************************************************************************************************************ changed: [debian] TASK [Enable API Function in Icinga2] ********************************************************************************************************************************************** changed: [debian] TASK [Get random password for API Icinga2 after api setup] ************************************************************************************************************************* changed: [debian -> 127.0.0.1] TASK [set_fact] ******************************************************************************************************************************************************************** ok: [debian] TASK [debug] *********************************************************************************************************************************************************************** ok: [debian] => { "api_password": "cd53fe09a2bca6d7" } TASK [Create backends.ini for module monitoring] *********************************************************************************************************************************** changed: [debian] TASK [Create commandtransports.ini for module monitoring] ************************************************************************************************************************** changed: [debian] TASK [Create config.ini for module monitoring] ************************************************************************************************************************************* changed: [debian] PLAY RECAP ************************************************************************************************************************************************************************* debian                     : ok=17   changed=12   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 root@icinga9:~/IcingaAnsible# ansible-playbook 3-influx.yml PLAY [debian] ********************************************************************************************************************************************************************** TASK [Gathering Facts] ************************************************************************************************************************************************************* ok: [debian] TASK [Install InfluxDB Software] *************************************************************************************************************************************************** changed: [debian] TASK [Create InfluxDB Database for Icinga Metrics] ********************************************************************************************************************************* changed: [debian] TASK [Create InfluxDB User] ******************************************************************************************************************************************************** changed: [debian] TASK [Grant Access for User to Database] ******************************************************************************************************************************************* changed: [debian] TASK [Enable InfluxDB Module in Icinga Service] ************************************************************************************************************************************ changed: [debian] TASK [Enable InfluxDB in Icinga] *************************************************************************************************************************************************** changed: [debian] TASK [Restart Icinga Service] ****************************************************************************************************************************************************** changed: [debian] PLAY RECAP ************************************************************************************************************************************************************************* debian                     : ok=8    changed=7    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 root@icinga9:~/IcingaAnsible# ansible-playbook 4-director.yml PLAY [debian] ********************************************************************************************************************************************************************** TASK [Gathering Facts] ************************************************************************************************************************************************************* ok: [debian] TASK [Remove director database if exists] ****************************************************************************************************************************************** ok: [debian] TASK [Create database for Director Icingaweb Module] ******************************************************************************************************************************* changed: [debian] TASK [Create user for Director Access] ********************************************************************************************************************************************* changed: [debian] TASK [Grant access user for director database] ************************************************************************************************************************************* changed: [debian] PLAY RECAP ************************************************************************************************************************************************************************* debian                     : ok=5    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 root@icinga9:~/IcingaAnsible# ansible-playbook 5-director-kickstart.yml PLAY [debian] ********************************************************************************************************************************************************************** TASK [Gathering Facts] ************************************************************************************************************************************************************* ok: [debian] TASK [Get random password for API Icinga2 after api setup] ************************************************************************************************************************* changed: [debian -> 127.0.0.1] TASK [set_fact] ******************************************************************************************************************************************************************** ok: [debian] TASK [debug] *********************************************************************************************************************************************************************** ok: [debian] => { "api_password": "cd53fe09a2bca6d7" } TASK [Get Icinga hostname] ********************************************************************************************************************************************************* changed: [debian -> 127.0.0.1] TASK [set_fact] ******************************************************************************************************************************************************************** ok: [debian] TASK [debug] *********************************************************************************************************************************************************************** ok: [debian] => { "icinga_hostname": "icinga9.test.local" } TASK [Create director kickstart cfg folder] **************************************************************************************************************************************** changed: [debian] TASK [Create config.ini to set director database name] ***************************************************************************************************************************** changed: [debian] TASK [Create kickstart.ini for configure director] ********************************************************************************************************************************* changed: [debian] TASK [Populate Director Database] ************************************************************************************************************************************************** changed: [debian] TASK [Kickstat Director] *********************************************************************************************************************************************************** changed: [debian] PLAY RECAP ************************************************************************************************************************************************************************* debian                     : ok=12   changed=7    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 root@icinga9:~/IcingaAnsible# ansible-playbook 6-grafana-dpkg-install.yml PLAY [debian] ********************************************************************************************************************************************************************** TASK [Gathering Facts] ************************************************************************************************************************************************************* ok: [debian] TASK [Install grafana dependencies] ************************************************************************************************************************************************ changed: [debian] TASK [Download Grafana Debian Package from Custom URL Source] ********************************************************************************************************************** changed: [debian] TASK [Install Grafana Server] ****************************************************************************************************************************************************** changed: [debian] TASK [Reload systemctl Daemons Lists] ********************************************************************************************************************************************** changed: [debian] TASK [Enable Grafana Service] ****************************************************************************************************************************************************** changed: [debian] TASK [Set allow_embedding in grafana.ini] ****************************************************************************************************************************************** changed: [debian] TASK [Enable anonymous access] ***************************************************************************************************************************************************** changed: [debian] TASK [Enable anonymous name] ******************************************************************************************************************************************************* changed: [debian] TASK [Enable anonymous role] ******************************************************************************************************************************************************* changed: [debian] TASK [Start Grafana Server] ******************************************************************************************************************************************************** changed: [debian] TASK [Install Grafana plugin - grafana-image-renderer] ***************************************************************************************************************************** changed: [debian] TASK [Final change all permission on Icingaweb2 folder] **************************************************************************************************************************** changed: [debian] TASK [Restart Grafana Service] ***************************************************************************************************************************************************** changed: [debian] PLAY RECAP ************************************************************************************************************************************************************************* debian                     : ok=14   changed=13   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 root@icinga9:~/IcingaAnsible# ansible-playbook 7-icingadb.yml PLAY [debian] ********************************************************************************************************************************************************************** TASK [Gathering Facts] ************************************************************************************************************************************************************* ok: [debian] TASK [Add IcingaDB Repository] ***************************************************************************************************************************************************** changed: [debian] TASK [Add APT Key from Icinga Repository] ****************************************************************************************************************************************** changed: [debian] TASK [Install IcingaDB and other services] ***************************************************************************************************************************************** changed: [debian] TASK [Drop IDO Database] *********************************************************************************************************************************************************** ok: [debian] TASK [Drop user] ******************************************************************************************************************************************************************* ok: [debian] TASK [FLUSH PRIVIGELES] ************************************************************************************************************************************************************ changed: [debian] TASK [Create icingadb database] **************************************************************************************************************************************************** changed: [debian] TASK [Create user icingadb] ******************************************************************************************************************************************************** changed: [debian] TASK [Create icingadb database] **************************************************************************************************************************************************** changed: [debian] TASK [Fill SQL Database for IcingaDB] ********************************************************************************************************************************************** changed: [debian] TASK [Set password for icingadb cfg] *********************************************************************************************************************************************** changed: [debian] TASK [Enable icingadb feature] ***************************************************************************************************************************************************** changed: [debian] TASK [Restart Icinga2 Service] ***************************************************************************************************************************************************** changed: [debian] TASK [Create icingadb modules folder] ********************************************************************************************************************************************** changed: [debian] TASK [Create config.ini for module icingadb] *************************************************************************************************************************************** changed: [debian] TASK [Create redis.ini for module icingadb] **************************************************************************************************************************************** changed: [debian] TASK [Enable Icingaweb2 module IcingaDB] ******************************************************************************************************************************************* changed: [debian] TASK [Restart IcingaDB Service] **************************************************************************************************************************************************** changed: [debian] PLAY RECAP ************************************************************************************************************************************************************************* debian                     : ok=19   changed=16   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 Увы, не удалось на текущий момент на 100% сделать все автоматически (хотя пытался). Осталось сделать несколько простых шагов: Подключиться к Grafana на наш сервер (виртуалку) на порт 3000, логин-пароль admin/admin Добавить источник данных для Grafana (InfluxDB) в разделе Configuration -> Data Sources -> Add -> InfluxDB - данные ниже: Зайти в раздел Dashboard -> Import и импортировать готовый Dashboard по ссылке. При  импорте указать наш InfluxDB как источник данных. После того, как импорт успешно произойдет, он сразу в Grafana откроется. Нам нужно из URL строки вычленить и скопировать себе уникальный ID для данного Dashboard-а (см. пример на картинке) В данном примере у нас получилось: 3azngr4Iz. Но у Вас 100% будет он другой в Вашей инсталляции. Этот ID нам понадобится для Icingaweb2 для настройки модуля интеграции с Grafana. Входим на наш сервер по адресу: http://X.X.X.X/icingaweb2/. Login: icingaadmin, пароль либо icingapassword (можно после входа его сразу сменить. Либо сгенерировать Blowfish хэш и его подставить в переменную icingaadmin_password).  Первым делом стоит применить изменения от модуля Director к текущей конфигурации (идет в раздел Icinga Director -> Activity Log -> Deploy 253 pending changes). Теперь ищем слева в самом низу шестеренку, выбираем пункт Modules. Видим, что модуль для работы с Grafana не активен. Жмем его, в правом верхнем разделе(фрейме) рядом с словом Disable жмем на переключатель. И после того, как модуль будет включен (а это по сути просто создание символической ссылки в каталоге /etc/icingaweb2/enabledModules/), переходим в раздел Configuration (он начнет отображаться после включения модуля). Настраиваем поля, отмеченные на скриншоте: Сохраняем, проверяем. Переходим в раздел: Icinga DB (левый фрейм), выбираем раздел Services, выбираем какой нибудь сервис (например, procs - количество запущенных процессов). Видим примерно тоже самое, что и на скриншоте: Ну вот и все - установка завершена. Теперь остается изучать, читать и наполнять Icinga2 через модуль Icinga Director объектами мониторинга (командами, службами, хостами и т.д.). Понятно, что это большая и основная часть работы - ее в статье так просто не опишешь. Всем спасибо за внимание и надеюсь, что моя работа сподвигнет Вас потратить 10-15 минут своего времени на прочтение и тестовую установку этого замечательного (по моему мнению конечно) продукта. Успехов!  IT специалист