voroshil's Blog

Здесь должно быть что-то умное

Пассивный мониторинг состояния виртуальных машин и физических узлов в vSphere через vMA

Решить задачу простого мониторинга состояния виртуальных машин и физических серверов (включены/выключены/имеются проблемы) в 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
  • Работающий сервер 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
}

Как это работает

  1. По заданию cron запускается скрипт check_datacenter3.pl, используя файл настроек, подключается к серверу vCenter или ESXi
  2. Для каждого датацентра срипт выбирает список физических узлов, виртуальным машин и шаблонов и запрашивает из статус
  3. Для каждого проверяемого объекта формирует строки 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