Решить задачу простого мониторинга состояния виртуальных машин и физических серверов (включены/выключены/имеются проблемы) в Nagios можно при помощи vSphere vAPI.
Однако, в силу того, что доступ через vAPI не отличается высокой скоростью (узкими местом является процесс установки безопасного соединения и доступ к счетчикам производительности), для снижения нагрузки на тестирующий сервер (в случае одновременного запуска большого количества тестов) пришлось отказаться от активного тестирования в пользу пассивного с периодическим пакетным запуском тестов при помощи cron.
Что потребуется
- Сервера виртуальной инфраструктуры:
-
- с платным VMWare vSphere
-
- с бесплатным VMWare Hypervisor
- Сервер, осуществляющий мониторинг:
-
- с установленным vSphere SDK for Perl (можно воспользоваться готовой виртуальной машиной vSphere Management Assistant в которой SDK уже установлен)
-
- с исполняемым файлом /usr/sbin/send_nsca из комплекта nagios для отправки результатов пассивного мониторинга и его конфигурационным файлом /etc/nagios/send_nsca.cfg
-
- скрипт мониторинга check_datacenter3.pl
- Работающий сервер Nagios или Icinga, который будет принимать результаты мониторинга.
Как настроить
Для хранения настроек подключения создайте файл следующей структуры:
Настройки подключения mydc.vcms.conf:
VI_USERNAME=nagios_user
VI_PASSWORD=nagios_password
VI_SERVER=vcms.example.com
VI_DCNAME=vmdc-mydc
VI_DCFILTER=mydc
VI_NSCAHOST=nagios.example.com
VI_NSCASEND=/usr/bin/send_nsca
VI_NSCACONF=/etc/nagios/send_nsca.cfg
Список параметров файла конфигурации (в скобках указан эквивалентный параметр командной строки):
- VI_USERNAME (--username) - имя пользователя ESXi или vCenter имеющего право на чтение состояния вирртуальных машин и физических серверов.
- VI_PASSWORD (--password) - пароль пользователя nagios_user
- VI_SERVER (--server) - адрес сервера ESXi или vCenter, к которому осуществляется подключение
- VI_DCNAME (--dcname) - название фиктивного хоста из конфигурации nagios/icinga, к которому приписаны виртуальные машины и сервера. Если параметр не указан, то будет использовано имя vmdc-dcname, где dcname - название датацентра vSphere (у одиночного хоста ESXi датацентр всегда называется vmware-ha-datacenter).
- VI_DCFILTER (--dcfilter) - список объектов виртуальной инфраструктуры будет ограничем указанным датацентром (может быть полезно, если один сервер vCenter управляет несколькими серверами, сгруппированными по разным датацентрам). Если параметр не указан, то будут проанализированы все датацентры (при этом параметр --dcname может переопределить их имя в результатах монторинга)
- VI_NSCAHOST (--nscahost) адрес сервера nagios/icinga, на котором работает NSCA демон
- VI_NSCASEND (--nscasend) путь к исполняемому файлу send_nsca
- VI_NSCACONF (--nscaconf) путь к конфигурационному файлу программы send_nsca
Поскольку файл конфигурации содержит пароли в открытом виде, не забудьте убедиться,что он доступен на чтение только пользователю, от имени которого запускается скрипт check_datacenter3.pl!
Запуск скрипта из консоли:
/path/to/check_datacenter3.pl --config /path/to/mydc.vcms.conf
Предполагается, что исполняемый файл send_nsca находится в /usr/sbin, а его конфигурационный файл /etc/nagios/send_nsca.cfg. Информацию о настройке NSCA ищите в документации к Nagios/Icinga.
Конфигурация nagios/icinga:
Конфигурация nagios/icinga mydc.nagios.cfg
# template for fake datacenter host
define host {
use linux-server
name vmware-datacenter
address 127.0.0.1
check_command check_ok
register 0
}
# common template for services
define service {
name vmdc-generic-service
use generic-service
active_checks_enabled 1
passive_checks_enabled 1
check_freshness 1
freshness_threshold 780 ; 13 minutes
check_command check_stale
max_check_attempts 1
flap_detectionenabled 1
check_period none
register 0
}
define service {
use vmdc-generic-service
name vmdc-vm-service
register 0
}
define service {
use vmdc-generic-service
name vmdc-host-service
register 0
}
define service {
use vmdc-generic-service
name vmdc-template-service
register 0
}
# fake datacenter host using template
define host {
use vmware-datacenter
host_name vmdc-mydc
}
define service {
use vmdc-host-service
host_name vmdc-mydc
service_description HOST esx1
}
define service {
use vmdc-vm-service
host_name vmdc-mydc
service_description VM vm1
}
define service {
use vmdc-template-service
host_name vmdc-mydc
service_description TMPLT vm_template1
}
Как это работает
- По заданию cron запускается скрипт check_datacenter3.pl, используя файл настроек, подключается к серверу vCenter или ESXi
- Для каждого датацентра срипт выбирает список физических узлов, виртуальным машин и шаблонов и запрашивает из статус
- Для каждого проверяемого объекта формирует строки c результатами мониторинга. Сформированные строки через пайп попадают на вход программе send_nsca, которая и пересылает их на сервер nagios/icinga.
Пересылаемые данные выглядят примерно так (поля разделены символом табуляции):
vmdc-mydc VM vm1 0 VIMA:host=esx1,state=poweredOn,status=green
vmdc-mydc TMPLT vm-template1 0 VIMA:host=esx1,state=poweredOff,status=green
vmdc-mydc HOST esx1 0 VIMA:overall status=green