Как контролировать хосты и сервисы с помощью Icinga в Ubuntu 16.04

Вступление

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

Предпосылки

Перед началом этого урока вы должны были пройти предыдущий урок из этой серии, https://www.digitalocean.com/community/tutorials/how-to-install-icinga-and-icinga-web-on-ubuntu-16- 04 [Как установить Icinga и Icinga Web в Ubuntu 16.04]. В результате ядро ​​Icinga и веб-интерфейс Icinga будут работать на одном хосте, который мы будем называть узлом * icinga-master *.

Вам также понадобятся несколько серверов для мониторинга. Для наших примеров мы будем использовать два сервера Ubuntu 16.04 с установленным Apache. Вы можете использовать только часть Apache The LAMP учебник, упомянутый выше, чтобы настроить их.

Шаг 1 - Настройка простого мониторинга хоста

Один из простых способов мониторинга сервера с помощью Icinga - настроить регулярную проверку его внешних служб. Поэтому для веб-хостинга мы регулярно проверяем IP-адрес сервера, а также пытаемся получить доступ к веб-странице. Это сообщит нам, если хост работает, и правильно ли работает веб-сервер.

Давайте настроим мониторинг для веб-сервера. Выберите один из серверов Apache, упомянутых в качестве предварительного условия, и убедитесь, что страница-заполнитель Apache по умолчанию обслуживается правильно. Мы будем называть этот сервер ++. Нам вообще не нужно входить в систему, все проверки работоспособности будут настроены и выполнены на главном узле.

Войдите в мастер-узел. Чтобы добавить новый хост, нам нужно отредактировать файл Icinga + hosts.conf. Откройте его в текстовом редакторе:

sudo nano /etc/icinga2/conf.d/hosts.conf

Это откроет файл с некоторыми пояснительными комментариями и определенным хостом block. Существующий блок конфигурации + object Host NodeName + определяет хост * icinga-master *, который является хостом, на котором мы установили Icinga и Icinga Web. Поместите курсор в конец файла и добавьте новый хост:

/etc/icinga2/conf.d/hosts.conf

. . .
object Host "" {
 import "generic-host"
 address = ""
 vars.http_vhosts["http"] = {
   http_uri = "/"
 }
 vars.notification["mail"] = {
   groups = [ "icingaadmins" ]
 }
}

Это определяет хост с именем ++, импортирует некоторые конфиги хоста по умолчанию из шаблона с именем + generic-host +, указывает Icinga на правильный IP-адрес, а затем определяет несколько переменных, которые сообщают Icinga, что нужно проверить HTTP-ответ на корневой (+ / +) URL и уведомлять группу + icingaadmins + по электронной почте о возникновении проблем.

Сохраните и закройте файл, затем перезапустите Icinga:

sudo systemctl restart icinga2

Вернитесь к веб-интерфейсу Icinga в вашем браузере. Интерфейс обновляется довольно быстро, поэтому вам не нужно обновлять страницу. Информация о новом хосте должна заполняться в короткие сроки, и проверки работоспособности изменятся с * Pending * на * Ok *, как только Icinga соберет достаточно информации.

Это отличный способ мониторинга внешних служб на хосте, и для SSH-серверов, SMTP и т. Д. Доступны другие проверки. Но было бы также неплохо узнать больше информации о внутреннем состоянии серверов, которые мы отслеживаем.

Далее мы настроим мониторинг с помощью агента Icinga, чтобы мы могли следить за более подробной информацией о системе.

Шаг 2 - Настройка агентного мониторинга

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

Мы собираемся настроить второй сервер для мониторинга. Мы назовем это ++. Нам нужно установить программное обеспечение Icinga на удаленном компьютере, запустить несколько мастеров установки, чтобы установить соединение, а затем обновить некоторые файлы конфигурации на главном узле Icinga.

Настройте мастер-узел

Во-первых, нам нужно настроить главный узел для подключения клиентов. Мы делаем это, запустив настройку узла wizard на нашем главном узле:

sudo icinga2 node wizard

Это запустит скрипт, который задает нам несколько вопросов и настраивает нас. Далее мы нажимаем + ENTER +, чтобы принять большинство значений по умолчанию. Ответы не по умолчанию подсвечиваются. Некоторый информационный вывод был удален для ясности:

OutputPlease specify if this is a satellite setup ('n' installs a master setup) [Y/n]:
Starting the Master setup routine...
Please specify the common name (CN) [icinga-master.example.com]:
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):
Bind Host []:
Bind Port []:
Done.

Now restart your Icinga 2 daemon to finish the installation!

Перезапустите Icinga, чтобы завершить обновление конфигурации:

sudo systemctl restart icinga2

Откройте порт брандмауэра, чтобы разрешить внешние подключения к Icinga:

sudo ufw allow 5665

Теперь перейдем к клиентскому узлу, установим Icinga и запустим тот же мастер.

Настройте клиентский узел

Войдите на сервер, которому мы звоним **. Нам нужно снова установить репозиторий 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

Вставьте в репозиторий детали:

/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 делаем конфигурацию satell:

sudo icinga2 node wizard
OutputPlease specify if this is a satellite setup ('n' installs a master setup) [Y/n]:
Starting the Node setup routine...
Please specify the common name (CN) []:
Please specify the master endpoint(s) this node should connect to:
Master Common Name (CN from your master setup):
Do you want to establish a connection to the master from this node? [Y/n]:
Please fill out the master connection information:
Master endpoint host (Your master's IP address or FQDN):
Master endpoint port [5665]:
Add more master endpoints? [y/N]:
Please specify the master connection for CSR auto-signing (defaults to master endpoint host):
Host []:
Port [5665]:

Теперь мастер получит открытый сертификат с нашего главного узла и покажет нам его детали. Подтвердите информацию, затем продолжите:

Output. . .
Is this information correct? [y/N]:
information/cli: Received trusted master certificate.

Please specify the request ticket generated on your Icinga 2 master.
(Hint: # icinga2 pki ticket --cn ''):

На этом этапе переключитесь обратно на ваш сервер + master + и выполните команду, которую вам подсказал мастер. Не забудьте перед собой + sudo +:

sudo icinga2 pki ticket --cn ''

Команда выведет ключ. Скопируйте его в буфер обмена, затем переключитесь обратно на клиентский узел, вставьте его и нажмите + ENTER +, чтобы продолжить работу с мастером.

Output. . .
information/cli: Requesting certificate with ticket ''.

Please specify the API bind host/port (optional):
Bind Host []:
Bind Port []:
Accept config from master? [y/N]:
Accept commands from master? [y/N]:
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 + на правильном порту.

Outputtcp        0      0 :     :5665     ESTABLISHED

Это показывает, что наши серверы подключены, и мы готовы настроить клиентские проверки.

Настройте мониторинг агента

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

Одним из важных уровней организации в установке Icinga является концепция zone. Все клиентские узлы должны создать свою собственную зону и сообщить в родительскую зону, в нашем случае это наш главный узел. По умолчанию зона нашего главного узла названа в честь его полного доменного имени. Мы создадим каталог с именем нашей главной зоны в каталоге Icinga + zone.d +. Это будет содержать информацию для всех клиентов мастер-зоны.

Создайте каталог зоны:

sudo mkdir /etc/icinga2/zones.d/

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

sudo nano /etc/icinga2/zones.d//services.conf

Вставьте следующее, затем сохраните и закройте:

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
}

Это определяет две проверки сервиса. Первый сообщит о загрузке процессора, а второй проверит количество процессов на сервере. Последние две строки каждого определения сервиса важны. + command_endpoint + сообщает Icinga, что эту проверку сервиса нужно отправить удаленной конечной точке команды. Строка + assign where + автоматически назначает проверку сервиса любому хосту, для которого определена переменная + client_endpoint +.

Давайте создадим такой хост сейчас. Откройте новый файл в каталоге зоны, который мы ранее создали. Здесь мы назвали файл в честь удаленного хоста:

sudo nano /etc/icinga2/zones.d/web-2.example.com<^>.conf

Вставьте следующую конфигурацию, затем сохраните и закройте файл:

веб-2.example.com.conf

object Zone "" {
 endpoints = [ "" ]
 parent = ""
}

object Endpoint "" {
 host = ""
}

object Host "" {
 import "generic-host"
 address = ""
 vars.http_vhosts["http"] = {
   http_uri = "/"
 }
 vars.notification["mail"] = {
   groups = [ "icingaadmins" ]
 }
 vars.client_endpoint = name
}

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

Перезапустите Icinga, чтобы обновить конфигурацию:

sudo systemctl restart icinga2

Вернитесь к веб-интерфейсу Icinga, и новый хост появится с проверками * Pending *. Через несколько секунд эти проверки должны повернуть * Ok *. Это означает, что наш клиентский узел успешно выполняет проверки для главного узла.

Заключение

В этом руководстве мы установили два разных типа мониторинга с помощью Icinga: внешние проверки сервисов и проверки хостов на основе агентов. Можно многое узнать о настройке и работе с Icinga, поэтому вам, вероятно, захочется углубиться в обширную документацию Icinga.

Обратите внимание, что если вы попадаете в точку, где вам требуются пользовательские команды check, вам нужно будет синхронизировать их от главного узла до клиентских узлов, используя global configuration zone. Вы можете узнать больше об этой конкретной функции here.

Наконец, если у вас есть большое количество серверов для мониторинга, вы можете использовать программное обеспечение для управления конфигурацией для автоматизации ваших обновлений конфигурации Icinga. Серия наших руководств Getting Started with Configuration Management дает исчерпывающий обзор используемых концепций и программного обеспечения.

Related