[Из песочницы] Icinga2 и безагентный мониторинг серверов Windows средствами WMI

image

На сегодняшний день, далеко не каждый доволен используемой системой мониторинга ИТ инфраструктуры, а у некоторых она попросту отсутствует. Многие из них имеют явные проблемы с удобством использования, сложностью конфигурации и невысокой производительностью. Именно поэтому, предлагаю взглянуть на новый форк Nagios — Icinga 2, который готов порадовать нас модульной архитектурой, удобным web-интерфейсом, генерацией отчетов и превосходной скоростью работы!

О самой системе


На первый взгляд Icinga 2 сразу располагает к себе приятным на вид веб интерфейсом, с большим количеством различных представлений хостов и сервисов (различные списки, календарь, сетка), но это далеко не все плюсы данной системы мониторинга.

Стиль конфигурации отличается от её предыдущей версии, он имеет обьектно-ориентированный формат (схож с Puppet) и позволяет определять host/service зависимости и отношения parent/child для хостов. Зависимости в Icinga 2 являются прямыми, они могут быть определены как host-host, service-service или смешанными host-service и service-host. Обьем конфигурации может быть сведен к минимуму путем применения шаблонов к обьектам. В процессе эксплуатации системы вы поймете, насколько это удобно. Лично я, всегда был недоволен отсутствием возможности настройки мониторинга через веб интерфейс, в виду запутанности конфигурационных файлов, но в данном случае этому рад.

Icinga2 построена с ориентацией на производительность, имеет многопоточный дизайн и может выполнять тысячи проверок в секунду. Сама система может быть установлена в виде высокодоступного кластера или одиночного экземпляра.

image

Так же высокодоступные кластеры могут быть объединены в распределенную установку, в которой операции рассредоточены по нескольким сайтам. Репликация может быть изолирована для её осуществления только между основной и вторичной зоной. Вторичные зоны могут быть как полноценными экземплярами Icinga 2, с локальной базой данных IDO и пользовательским интерфейсом, так и простыми экземплярами выполняющими проверки.

3433b07fcd7443c7b1787f5b93dd1485.png

Icinga 2 поставляется с несколькими движками и практически любой аддон может быть легко интегрирован, в частности модуль Perfdata включен изначально. Например, Icinga 2 предлагает интеграцию популярных инструментов графического отображения производительности, таких как PNP4Nagios, inGraph и Graphite.

Настройка


Установку самой Icinga 2 рассматривать нет смысла, так как она проста и предельно понятно описана в документации, в моем случае она установлена на CentOS 7 и PostgreSQL. Вначале, не забудьте установить EPEL:

yum install epel-release


Так же при её настройке через веб интерфейс необходимо использовать две базы, а не одну (иначе возникнет ошибка создания пользователя).

Для полноценного мониторинга средствами WMI нам понадобится несколько плагинов и подготовленный Windows Server.

Вначале установим wmic и Сheck WMI Plus используя пошаговое руководство, располагающееся здесь.

Далее потребуется подготовить Windows Server к обработке входящих WMI запросов, для этого вводим в командной строке:

winrm quickconfig


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

/opt/nagios/bin/plugins/check_wmi_plus.pl -m checkcpu -H HOST -u USER -p PASS


Теперь перейдем к конфигурации самой Icinga 2.
Основные конфигурационные файлы располагаются в /etc/icinga2/conf.d/
Подготовим группу для наших Windows серверов, добавив в файл groups.conf следующее:

object HostGroup "windows-servers" {
  display_name = "Windows Servers"
  assign where host.vars.os == "Windows"
}


В данную группу будут попадать все хосты в конфигурации которых присутствует элемент:

host.vars.os = "Windows"


Опишем использование плагина Check WMI Plus, для этого откроем commands.conf и добавим следующее содержимое:

object CheckCommand "check_wmi" {
  import "plugin-check-command"
  command = [ WmiPluginDir + "/check_wmi_plus.pl" ]
 
  arguments = {
    "--inidir" = "$wmi_inidir$"
    "-H" = "$host.name$"
    "-A" = "$wmi_authfile_path$"
    "-m" = "$check_mode$"
    "-s" = "$wmi_submode$"
    "-a" = "$wmi_arg1$"
    "-o" = "$wmi_arg2$"
    "-3" = "$wmi_arg3$"
    "-4" = "$wmi_arg4$"
    "-y" = "$wmi_delay$"
    "-w" = "$wmi_warn$"
    "-c" = "$wmi_crit$"
    "--nodatamode" = {
      set_if = "$wmi_nodatamode$"
    }
  }
 
  vars.wmi_authfile_path = "/etc/icinga2/wmi.auth"
  vars.wmi_inidir = "/opt/nagios/bin/plugins/check_wmi_plus.d"
  vars.wmi_nodatamode = false
 
}


Создадим файл авторизации для плагина (/etc/icinga2/wmi.auth) со следующим содержимым:

username=user@domain.domain
password=pass
domain=


Зададим значение константе в файле constants.conf:

const WmiPluginDir = "/opt/nagios/bin/plugins"


Создадим шаблон для наших сервисов в templates.conf:

template Service "wmi-service" {
  import "generic-service"
  check_command = "check_wmi"
  check_interval = 1m
  retry_interval = 1m
}


Здесь можно задать желаемый интервал проверок.

На странице плагина есть примеры конфигурации сервисов для Nagios, нам же, остается немного их отредактировать.
Например, добавим в файл services.conf следующий сервис:

apply Service "MSSQL: General Statistics" {
  import "wmi-service"
 
  vars.check_mode = "checksql"
  vars.wmi_submode = "general"
  vars.wmi_arg1 = host.vars.sql
 
  assign where host.vars.sql
  ignore where host.vars.disable_wmi
}


Добавим хост в файл hosts.conf:

object Host "sql" {
  address = "X.X.X.X"
  check_command = "hostalive"
  vars.os = "Windows"
  vars.sql = "MSSQL***_MSSQL***"
}
#    *** - название экземпляра SQL сервера


В данном примере сервис «MSSQL: General Statistics» будет применяться к хосту, у которого в конфигурации задана переменная vars.sql, а её значение будет использовано в WMI запросе, в качестве аргумента.
Остается только сделать графическое представление собираемых данных, для этого нам потребуется Graphite и его веб-модуль для нашей Icinga 2.
Установим Graphite:

yum install graphite-web
/usr/bin/graphite-manage syncdb --noinput
/usr/bin/graphite-build-index
/usr/bin/chown -R apache:apache /var/lib/graphite-web
yum install python-carbon python-whisper
systemctl enable carbon-cache
systemctl start carbon-cache
systemctl restart httpd

Редактируем настройки apache для vhost по своему усмотрению.
Включаем использование Graphite в Icinga 2:

icinga2 feature enable graphite
systemctl restart icinga2


Скачиваем веб-модуль отсюда. Распаковываем в папку /usr/share/icingaweb2/modules и переименовываем корневую папку модуля в graphite(иначе возникнет ошибка). Создаем конфигурационный файл /etc/icingaweb2/modules/graphite/config.ini со следующим содержимым:

[graphite]
metric_prefix = icinga
base_url = http://172.18.200.15/render?  


Теперь, остается включить веб-модуль (Configuration → Modules → graphite → enable) и насладиться результатом:

b8b110e664f44871a319b8f3261b8be7.png938b7acb49964c40acbce5f922e251a7.png

PS: В следующей части рассмотрим мониторинг сетевого оборудования.

© Habrahabr.ru