Icinga – это гибкая и производительная система мониторинга с открытым исходным кодом, которая позволяет отслеживать состояние сетевых сервисов и хостов. Это руководство научит создавать два разных типа настройки Icinga. Первый основан на простых сетевых проверках внешних сервисов хоста (это периодическая отправка запросов HTTP и т. п.). Во втором типе конфигурации используется запущенный на хосте программный агент для сбора более подробной системной информации (такой как нагрузка и количество запущенных процессов).
Требования
- Система Icinga и веб-интерфейс Icinga Web, установленные на одном хосте (хост называется icinga-master). Инструкции по установке можно найти здесь.
- Дополнительные серверы, которые можно мониторить. В этом руководстве используются два дополнительных сервера Ubuntu 16.04 с веб-сервером Apache (об установке Apache можно почитать в специальном разделе этого руководства).
1: Настройка простого мониторинга хостов
Одним из простых способов использования Icinga является регулярная проверка внешних сервисов. Например, так вы можете регулярно выполнять ping IP-адреса сервера и попытаться получить доступ к веб-странице, чтобы убедиться, что хост включен и веб-сервер функционирует правильно.
Настройте мониторинг веб-сервера. Выберите один из дополнительных серверов и убедитесь, что стандартная страница Apache обслуживается правильно. Допустим, сервер будет называться web-1.example.com. Подключаться к этому серверу не нужно, так как проверка его состояния будет полностью происходить на главной ноде, master.
Примечание: Система Icinga всегда по умолчанию использует FQDN сервера, с которым работает. FQDN включает в себя имя хоста и доменное имя (как, например, web-1.example.com). Если у хоста нет домена, используйте FQDN типа web-1.localdomain. Такой FQDN вполне подходит, главное использовать его последовательно. Если у вас есть «полноценный» FQDN, укажите IP-адрес сервера в поле address в настройках Icinga.
Подключитесь к ноде master. Отредактируйте файл Icinga под названием hosts.conf.
sudo nano /etc/icinga2/conf.d/hosts.conf
Этот файл содержит блок настроек host и комментарии к нему. Данный блок object Host NodeName определяет хост icinga-master (хост, на котором установлены Icinga и Icinga Web). Перейдите в конец файла и добавьте такие строки:
. . .
object Host "web-1.example.com" {
import "generic-host"
address = "web-1_server_ip"
vars.http_vhosts["http"] = {
http_uri = "/"
}
vars.notification["mail"] = {
groups = [ "icingaadmins" ]
}
}
Этот блок определяет новый хост web-1.example.com, импортирует стандартные конфигурации из шаблона generic-host, направляет Icinga на правильный IP-адрес и устанавливает переменные (они проверяют ответы HTTP и отправляют уведомления группе icingaadmins в случае неполадок).
Сохраните и закройте файл. Перезапустите Icinga:
sudo systemctl restart icinga2
Откройте Icinga Web в браузере. интерфейс быстро обновится и добавит информацию о новом хосте. Значение в строке проверки состояния хостов изменится с Pending на Ok после того, как Icinga соберет достаточно данных.
Такая настройка позволяет мониторить внешние сервисы хоста. Также здесь вы можете настроить проверку SSH-серверов, SMTP и т. п. Но это только базовая информация об инфраструктуре, иногда её недостаточно. Более подробные данные можно собрать с помощью агента.
2: Мониторинг агента
Icinga предоставляет механизм для безопасного соединения между главной и клиентской нодой, который позволяет выполнять более обширные проверки удаленных серверов. Кроме проверки работы веб-сервера можно также отслеживать нагрузку CPU, количество процессов, дисковое пространство и так далее.
Для этой настройки используйте оставшийся дополнительный сервер (в руководстве он условно называется web-2.example.com). Установите программное обеспечение Icinga на удалённую машину, запустите мастер настройки, чтобы установить соединение, затем обновите некоторые файлы конфигурации на главной ноде Icinga.
Примечание: Icinga предоставляет несколько уровней нод (master/satellite/client), отказоустойчивость при высокой доступности и несколько способов совместного использования конфигурации нод. Здесь вы узнаете, как создать простую двухуровневую структуру с одной главной нодой и несколькими клиентскими нодами. Настройка выполняется на главной ноде. Команды проверки состояния будут запланированы на главной ноде и перенесены на клиенты. Проект Icinga называет этот режим Top Down Command Endpoint.
Настройка главной ноды
Сначала нужно настроить главную ноду для поддержки соединений с клиентами. Подключитесь к ней и запустите мастер установки:
sudo icinga2 node wizard
Команда запустит сценарий, который задаст несколько вопросов и выполнит базовую настройку ноды. Чтобы принять значение по умолчанию, просто нажмите Enter. Нестандартные значения выделены красным.
Please specify if this is a satellite setup ('n' installs a master setup) [Y/n]: n
Starting the Master setup routine...
Please specify the common name (CN) [icinga-master.example.com]: введите FQDN или оставьте значение по умолчанию (ENTER)
Checking for existing certificates for common name 'icinga-master.example.com'...
Certificates not yet generated. Running 'api setup' now.
Enabling feature api. Make sure to restart Icinga 2 for these changes to take effect.
Please specify the API bind host/port (optional): ENTER
Bind Host []: ENTER
Bind Port []: ENTER
Done.
Now restart your Icinga 2 daemon to finish the installation!
Перезапустите Icinga:
sudo systemctl restart icinga2
Откройте порт в брандмауэре, чтобы разрешить внешние подключения к Icinga:
sudo ufw allow 5665
Настройка клиентской ноды
Подключитесь к клиенту (в данном случае клиентская нода называется web-2.example.com). Установите Icinga, предварительно добавив репозиторий Icinga (таким же образом установка происходила на главной ноде; подробнее об установке – здесь).
curl -sSL https://packages.icinga.com/icinga.key | sudo apt-key add -
Откройте файл icinga.list:
sudo nano /etc/apt/sources.list.d/icinga.list
Добавьте в него данные о репозитории:
deb https://packages.icinga.com/ubuntu icinga-xenial main
Сохраните и закройте файл.
Обновите индекс пакетов:
sudo apt-get update
Установите icinga2 (обратите внимание: пакет icinga2-ido-mysql здесь не нужен, так как он уже установлен на главной ноде).
sudo apt-get install icinga2
Запустите мастер установки, вместо master выберите satellite.
sudo icinga2 node wizard
Please specify if this is a satellite setup ('n' installs a master setup) [Y/n]: y
Starting the Node setup routine...
Please specify the common name (CN) [web-2.example.com]: ENTER
Please specify the master endpoint(s) this node should connect to:
Master Common Name (CN from your master setup): icinga-master.example.com
Do you want to establish a connection to the master from this node? [Y/n]: y
Please fill out the master connection information:
Master endpoint host (Your master's IP address or FQDN): icinga-master_server_ip
Master endpoint port [5665]: ENTER
Add more master endpoints? [y/N]: ENTER
Please specify the master connection for CSR auto-signing (defaults to master endpoint host):
Host [icinga-master_server_ip]: ENTER
Port [5665]: ENTER
Мастер установки извлечет сертификат с главной ноды и выведет подробности на экран. Ознакомьтесь с этой информацией и подтвердите ее:
. . .
Is this information correct? [y/N]: y
information/cli: Received trusted master certificate.
Please specify the request ticket generated on your Icinga 2 master.
(Hint: # icinga2 pki ticket --cn 'web-2.example.com'):
Теперь нужно переключиться на главную ноду и запустить команду, предоставленную мастером (нужны права sudo).
sudo icinga2 pki ticket --cn 'web-2.example.com'
Эта команда сгенерирует ключ. Скопируйте его в буфер, вернитесь на клиентскую ноду, вставьте ключ и нажмите Enter:
. . .
information/cli: Requesting certificate with ticket '5f53864a504a1c42ad69faa930bffa3a12600546'.
Please specify the API bind host/port (optional):
Bind Host []: ENTER
Bind Port []: ENTER
Accept config from master? [y/N]: n
Accept commands from master? [y/N]: y
Done.
Now restart your Icinga 2 daemon to finish the installation!
Откройте порт Icinga в брандмауэре:
sudo ufw allow 5665
Перезапустите Icinga:
sudo systemctl restart icinga2
Проверьте соединение между нодами с помощью netstat:
netstat | grep :5665
Установка соединения может занять некоторое время. Команда netstat должна вернуть строку ESTABLISHED и указать порт.
tcp 0 0 web-2_server_ip:58188 icinga-master_server_ip:5665 ESTABLISHED
Мониторинг агента
Мастер и клиент теперь подключены, теперь нужно включить мониторинг. Для этого создайте новый файл хоста. Вернитесь на главную ноду.
В настройке Icinga очень важно понятие зоны. Все клиентские ноды должны создать свою собственную зону и отправлять отчеты в родительскую зону (в данном случае это главная нода). По умолчанию называние зоны главной ноды совпадает с ее FQDN. Создайте каталог в каталоге zone.d (имя нового каталога должно совпадать с именем зоны главной ноды). Здесь будет храниться информация для всех клиентов родительской зоны.
sudo mkdir /etc/icinga2/zones.d/icinga-master.example.com
Теперь создайте конфигурационный файл services. В нем будут храниться настройки проверок, которые будут выполняться на клиентских нодах.
sudo nano /etc/icinga2/zones.d/icinga-master.example.com/services.conf
Вставьте в файл:
apply Service "load" {
import "generic-service"
check_command = "load"
command_endpoint = host.vars.client_endpoint
assign where host.vars.client_endpoint
}
apply Service "procs" {
import "generic-service"
check_command = "procs"
command_endpoint = host.vars.client_endpoint
assign where host.vars.client_endpoint
}
Сохраните и закройте его.
Теперь в нем хранятся настройки двух проверок. Первая проверка отслеживает состояние CPU, а вторая – количество процессов на сервере. Очень важны последние две строки каждого блока. Строка command_endpoint указывает, что конечная точка команды находится на удалённой машине. Строка assign where автоматически присваивает проверку сервиса любому хосту, на котором определена переменная client_endpoint.
Теперь нужно создать такой хост. Откройте новый файл в каталоге zones.d/icinga-master.example.com. В данном случае имя файла совпадает с именем удалённого хоста.
sudo nano /etc/icinga2/zones.d/icinga-master.example.com/web-2.example.com<^>.conf
Вставьте в файл следующий блок настроек:
object Zone "web-2.example.com" {
endpoints = [ "web-2.example.com" ]
parent = "icinga-master.example.com"
}
object Endpoint "web-2.example.com" {
host = "web-2_server_ip"
}
object Host "web-2.example.com" {
import "generic-host"
address = "web-2_server_ip"
vars.http_vhosts["http"] = {
http_uri = "/"
}
vars.notification["mail"] = {
groups = [ "icingaadmins" ]
}
vars.client_endpoint = name
}
Сохраните и закройте его.
Этот файл определяет зону удаленного хоста и связывает ее с родительской зоной. Он также определяет хост как конечную точку, а затем определяет сам хост, импортируя стандартные правила из шаблона generic-host. Затем файл устанавливает переменные для создания проверки HTTP и включает отправку уведомлений по электронной почте. Обратите внимание: поскольку на этом хосте определена переменная vars.client_endpoint = name, на нем также будут выполняться проверки сервисов, которые были определены в services.conf.
Перезапустите Icinga:
sudo systemctl restart icinga2
Вернитесь в Icinga Web. Интерфейс сообщит о новом хосте, в строке проверок которого будет значение Pending. В течение нескольких секунд оно изменится на Ok. Это значит, что клиентская нода успешно проходит проверки главной ноды.
Заключение
Теперь вы умеете создавать два разных типа настроек Icinga.
Много нового о настройке и работе с Icinga можно найти в документации.
Если в инфраструктуре много серверов, которые нуждаются в мониторинге, вы можете автоматизировать обновление настроек Icinga с помощью программного обеспечения для управления конфигурацией. Для этого можно обратиться к руководству Основы управления конфигурациями.