Site icon 8HOST.COM

Мониторинг хостов и сервисов с помощью Icinga в Ubuntu 16.04

Icinga – это гибкая и производительная система мониторинга с открытым исходным кодом, которая позволяет отслеживать состояние сетевых сервисов и хостов. Это руководство научит создавать два разных типа настройки Icinga. Первый основан на простых сетевых проверках внешних сервисов хоста (это периодическая отправка запросов HTTP и т. п.). Во втором типе конфигурации используется запущенный на хосте программный агент для сбора более подробной системной информации (такой как нагрузка и количество запущенных процессов).

Требования

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 с помощью программного обеспечения для управления конфигурацией. Для этого можно обратиться к руководству Основы управления конфигурациями.