Добавляем хосты и настраиваем агент мониторинга Icinga2

Добавляем хосты и настраиваем агент мониторинга Icinga2

Roman Bogachev VMware Specialist | Drone Pilot | Traveler

Icinga2 – это гибкая и производительная система мониторинга с открытым исходным кодом, которая позволяет отслеживать состояние сетевых сервисов и хостов.

Мониторинг и проверка работы сервисов может осуществляться двумя способами: проверка внешних сервисов хоста (icmp, http и пр.), либо с использованием программного агента, запущенного на удаленном хосте, для сбора более подробной информации о системе.

Способ 1.

Регулярная проверка внешних сервисов, например icmp запросы к устройству, ответ http сервера. Подключаться к удаленному серверу не нужно, так как проверка будет выполняться на master сервере.

Icinga2 всегда по умолчанию использует FQDN сервера. Если у хоста нет домена, используйте FQDN типа myserver.local. Если у вас есть «полноценный» FQDN, укажите IP-адрес сервера в поле address в настройках Icinga2.

Редактируем конфигурационный файл /etc/icinga2/conf.d/hosts.conf на master-сервере.

Этот файл содержит блок настроек host и комментарии к нему. Данный блок object Host NodeName определяет хост icinga-master (хост, на котором установлены Icinga2 и Icinga2 Web).

В конец файла добавим строки:

1
2
3
4
5
6
7
8
9
10
object Host "bogachev.biz" {
import "generic-host"
address = "server_ip_address"
vars.http_vhosts["http"] = {
http_uri = "/"
}
vars.notification["mail"] = {
groups = [ "icingaadmins" ]
}
}

Данный блок определяет новый хост bogachev.biz, импортирует стандартные конфигурации из шаблона generic-host, указывает Icinga2 IP-адрес сервера и устанавливает переменные, которые проверяют ответ от http и, в случае сбоя, отправляет уведомления группе icingaadmins.

После внесения изменений перезагружаем сервис Icinga2:

1
systemctl restart icinga2

После этого в Icinga2 можем наблюдать появление нового сервиса

Способ 2.

Icinga2 предоставляет механизм для безопасного соединения между master сервером и клиентской нодой, который позволяет выполнять более расширенные проверки удаленных серверов. Кроме проверки работы веб-сервера можно также отслеживать нагрузку CPU, количество процессов, работу базы данных, дисковое пространство и прочие сервисы.

Установим Icinga2 на удалённую машину и запустим мастер настройки, чтобы установить соединение, затем выполним настройку на главной ноде Icinga2 для мониторинга сервисов.

Icinga2 предоставляет несколько уровней серверов (master/satellite/client), отказоустойчивость при высокой доступности и несколько способов совместного использования конфигурации нод.
В данной статье будет рассмотрен вариант, как создать простую двухуровневую структуру с одной главной нодой и несколькими клиентскими нодами. Настройка выполняется на главной ноде. Команды проверки состояния будут запланированы на главной ноде и перенесены на клиенты. Проект Icinga2 называет этот режим Top Down Command Endpoint.

Настройка главного сервера (master)

Сперва настроим главную ноду для поддержки соединений с клиентами.
Запустим мастер установки:

1
icinga2 node wizard

Мастер установки выполнит базовую настройку и в ходе установки попросит ввести некоторые параметры:

1
2
3
4
5
6
7
8
9
10
11
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) [Icinga2-master]: введите FQDN или оставьте значение по умолчанию (ENTER)
Checking for existing certificates for common name 'Icinga2-master'...
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!

И перезапустим сервис:

1
systemctl restart icinga2

Откроем файрвол:

1
2
firewall-cmd --permanent --add-port=5665/tcp
firewall-cmd --permanent --add-port=5665/udp

Настройка клиентского сервера (client)

Установим Icinga2 на клиентский сервер, добавим в автозагрузку и запустим.

1
2
3
rpm --import http://packages.icinga.org/icinga.key 
yum install https://packages.icinga.com/epel/icinga-rpm-release-7-latest.noarch.rpm
yum install icinga2 -y && systemctl enable icinga2 && systemctl start icinga2 && yum install nagios-plugins-all -y

Запустим мастер конфигурации клиентского сервера:

1
icinga2 node wizard
1
2
3
4
5
6
7
8
9
10
11
12
13
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) [bogachev.biz]: ENTER
Please specify the master endpoint(s) this node should connect to:
Master Common Name (CN from your master setup): ICINGA2_MASTER
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_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 [icinga2-master_server_ip]: ENTER
Port [5665]: ENTER

Мастер установки извлечет сертификат с главного сервера и выведет подробности. Ознакомьтесь с этой информацией и подтвердите ее:

1
2
3
4
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 'bogachev.biz'):

Теперь нужно переключиться на главную ноду и выполнить указанную команду:

1
icinga2 pki ticket --cn 'bogachev.biz'

После выполнения команды на мастер сервере будет сгенерирован ключ, который необходимо вставить на клиентскую ноду для продолжения установки.

1
2
3
4
5
6
7
8
information/cli: Requesting certificate with ticket 'ymgbevu2pvzykr0px704f7sk5vrbyrtp'.
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!

Откроем файрвол:

1
2
firewall-cmd --permanent --add-port=5665/tcp
firewall-cmd --permanent --add-port=5665/udp

Проверить соединение между серверами можно командой lsof или netstat:

1
2
# netstat | grep :5665
tcp 0 0 Icinga2-master:51744 bogachev.biz:5665 ESTABLISHED

Мониторинг агента

Мастер сервер и клиент подключены, теперь добавим сервисы удаленного клиента на мониторинг.

В настройке Icinga2 важно понятие зоны. Все клиентские устройства должны создать свою собственную зону и отправлять отчеты в родительскую зону (в данном случае это master-сервер). По умолчанию название зоны главной ноды совпадает с ее FQDN. Создадим каталог в директории zone.d (имя директории должно совпадать с именем зоны главной ноды). Здесь будет храниться информация для всех клиентов родительской зоны.

1
mkdir /etc/icinga2/zones.d/Icinga2-master

Создадим конфигурационный файл /etc/icinga2/zones.d/Icinga2-master/services.conf. В нем будут храниться настройки проверок, которые будут выполняться на клиентских нодах со следующим содержимым:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
apply Service "load" {
import "generic-service"
check_command = "load"
command_endpoint = host.vars.client_endpoint // indicates that the endpoint of the command is on the remote machine
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
}

apply Service "dns" {
import "generic-service"
check_command = "dns"
command_endpoint = host.vars.client_endpoint
assign where host.vars.client_endpoint
}

В файл можно добавлять проверки любых сервисов, в том числе кастомных. В данном примере настроен мониторинг состояние CPU, количество запущенных процессов и ответ DNS для веб-хоста.

Очень важны последние две строки каждого блока. Строка command_endpoint указывает, что конечная точка команды находится на удалённой машине. Строка assign where автоматически присваивает проверку сервиса любому хосту, на котором определена переменная client_endpoint.

Создаем новый файл в каталоге zones.d/Icinga2-master/bogachev.biz.conf со следующим содержимым (в данном примере имя файла совпадает с именем удалённого хоста):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
object Zone "bogachev.biz" {
endpoints = [ "bogachev.biz" ]
parent = "Icinga2-master"
}

object Endpoint "bogachev.biz" {
host = "REMOTE_SERVER_IP"
}

object Host "bogachev.biz" {
import "generic-host"
address = "REMOTE_SERVER_IPv4"
address6 = "REMOTE_SERVER_IPv6"
vars.os = "Linux"
vars.ssh_port = CUSTOM_SSH_PORT
vars.http_vhosts["bogachev.biz"] = {
http_uri = "/"
http_ssl = "true"
vars.dns_lookup = "bogachev.biz"
vars.dns_server = "8.8.8.8"
vars.dns_expected_answer = "SITE_REMOTE_IP"
}

vars.notification["mail"] = {
groups = [ "icingaadmins" ]
}

vars.client_endpoint = name
}

Данный файл определяет зону удаленного хоста и связывает ее с родительской зоной. Он также определяет хост как конечную точку, а затем определяет сам хост, импортируя стандартные правила из шаблона generic-host. Затем файл устанавливает переменные для создания проверки и включает отправку уведомлений по электронной почте. Обратите внимание: поскольку на этом хосте определена переменная vars.client_endpoint = name, на нем также будут выполняться проверки сервисов, которые были определены в services.conf.

Перезапускаем сервис Icinga2:

1
systemctl restart icinga2

После этого заходим в веб-интерфейс IcingaWeb2 и проверяем статус сервисов для клиентских нод.