Как стать автором
Обновить

Поднимаем мониторинг на базе Icinga2/Web/Director/Grafana за 5 минут

Уровень сложностиПростой
Время на прочтение21 мин
Количество просмотров5.8K

Свое знакомство с мониторингом 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 минут и не сильно вспотеть при этом )))

Подготовка Debian 12 к установки из Ansible PlayBook-ов

Скачиваем архив с Playbook-ами и доп файлами: ссылка.

Далее всю работу я провожу в каталоге /root (привычка, увы). Листинг команд подготовки:

cd /root/
tar -xpf Icinga2-Ansible-Debian12-09-11-2023.tar
apt update
apt install ansible
ssh-keygen
cd /root/.ssh/
cat id_rsa.pub >> authorized_keys
cp id_rsa /root/IcingaAnsible/
cd /root/IcingaAnsible/
ssh -i id_rsa root@127.0.0.1

Распаковали архив, установили Ansible, подготовили ключи SSH для работы, зашли по SSH для проверки и чтобы обновился файл /root/.ssh/known_hosts.

Пароли

В начале многих Playbook-ов указаны пароли (большая часть от MariaDB - от root, от отдельных юзеров, которые работают с IcingaIDO, IcingaWeb, Director, IcingaDB). Плюс есть один Blowfish HASH от юзера icingaadmin. Для простоты везде я указал пароль: icingapassword.

Чтобы все это перед установкой поменять, выполните команду (grep -R -i "_password:" *) и во всех сценариях замените пароли:

0-icinga.yml:    mysql_root_password: icingapassword
0-icinga.yml:    icingaweb_password: icingapassword
0-icinga.yml:    icingaadmin_password: $2y$10$Vh8cot0heVpwq76N48WiAe3b60N/rNfzFZby.KQF0szzCqRjlOu9K
2-icingaweb-init-configuration.yml:    icingaweb_password: icingapassword
2-icingaweb-init-configuration.yml:    director_password: icingapassword
2-icingaweb-init-configuration.yml:    icingadb_password: icingapassword
3-influx.yml:    influx_password: icingapassword
4-director.yml:    mysql_root_password: icingapassword
7-icingadb.yml:    icingadb_password: icingapassword

Последовательный запуск Playbook-ов

Начинаем запускать последовательно через ansible-playbook 0-icinga.yml (далее 1-icingaweb-modules.yml и т.д.).

Пример успешно отработавших 8 сценариев:

Hidden text

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

Донастройка интеграции с Grafana

Увы, не удалось на текущий момент на 100% сделать все автоматически (хотя пытался). Осталось сделать несколько простых шагов:

  • Подключиться к Grafana на наш сервер (виртуалку) на порт 3000, логин-пароль admin/admin

  • Добавить источник данных для Grafana (InfluxDB) в разделе Configuration -> Data Sources -> Add -> InfluxDB - данные ниже:

URL:		http://localhost:8086
Database:	icinga2
User:		icinga2
Password:	icingapassword
  • Зайти в раздел Dashboard -> Import и импортировать готовый Dashboard по ссылке. При импорте указать наш InfluxDB как источник данных.

  • После того, как импорт успешно произойдет, он сразу в Grafana откроется. Нам нужно из URL строки вычленить и скопировать себе уникальный ID для данного Dashboard-а (см. пример на картинке)

В данном примере у нас получилось: 3azngr4Iz. Но у Вас 100% будет он другой в Вашей инсталляции. Этот ID нам понадобится для Icingaweb2 для настройки модуля интеграции с Grafana.

Донастройка WEB-интерфейса и его проверка

Входим на наш сервер по адресу: 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 - количество запущенных процессов). Видим примерно тоже самое, что и на скриншоте:

Финальный вид - работа Grafana в связке с IcingaWeb2
Финальный вид - работа Grafana в связке с IcingaWeb2

Ну вот и все - установка завершена. Теперь остается изучать, читать и наполнять Icinga2 через модуль Icinga Director объектами мониторинга (командами, службами, хостами и т.д.). Понятно, что это большая и основная часть работы - ее в статье так просто не опишешь.

Итоги

Всем спасибо за внимание и надеюсь, что моя работа сподвигнет Вас потратить 10-15 минут своего времени на прочтение и тестовую установку этого замечательного (по моему мнению конечно) продукта. Успехов!

Теги:
Хабы:
Всего голосов 2: ↑2 и ↓0+2
Комментарии21

Публикации

Истории

Работа

Ближайшие события

Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область