Мониторинг UPS в Icinga2

Main

Оценка: 85.99% - 16 Голосов

Общая

В данной статье будет рассказано о вариантах мониторинга разных устройств бесперебойного питания (UPS) в системе мониторинга Icinga2

Сейчас на рынке есть два варианта умных UPS - с одних можно снимать информацию через прямое подключение к ПК или серверу, другие имеют возможность сетевого подключения. Здесь будет рассказано как можно наблюдать за UPS как подключённых непосредственно к серверу Icinga2, так и UPS способных работать по сети.

Наблюдение за UPS, подключением к серверу Icinga2

Сразу хочу заметить тот факт, что в данном случае UPS может быть подключён к любой Linux машине и за ним можно наблюдать через SSH. Общий смысл наблюдения за Linux машинами через SSH описан в статье Безагентный мониторинг Linux средствами check_by_ssh

В моем же случае бесперебойник подключён непосредственно к серверу Icinga2.

Данный пример рассматривается с ОС Debian 8 и устройством бесперебойным питания APC Back-UPS 1500G

Подготовка сервера к работе.

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

Для этого нам поможет команда lsusb из пакета usbutils

Выполнив эту команду получим вывод:

1

В моем случае USP отображается как "American Power Conversion Uninterruptible Power Supply.

 

Установка ПО для работы с UPS

Для работы с UPS нам понадобится пакет apcupsd - установим его:


apt-get install apcupsd apcupsd-doc

После успешной установки нам необходимо отредактировать конфигурационные файлы данного пакет.

Отредактируем файл /etc/apcupsd/apcupsd.conf

В этом файле необходимо отредактировать указанные пункты:


UPSCABLE usb
UPSTYPE usb
DEVICE

Поле Device необходимо оставить пустым.

Далее необходимо отредактировать /etc/default/apcupsd


ISCONFIGURED=yes

Запускаем службу

service apcupsd start

Теперь проверяем параметры UPS

apcaccess status

Получаем вывод:

2

Загружаем необходимый модуль

https://github.com/gtozzi/nagios_plugins/blob/master/check_apcupsd

Данный модуль необходимо положить в папку /usr/lib/nagios/plugins

 

Настраиваем  Icinga2

Так как UPS подключен непосредственно к серверу то я столкнулся с проблемой определения hardware status устройства. Дело в том, что данный статус определяется параметром check_command в файле хостов. По умолчанию данный параметр проверяет статус командой hostalive, проверяющий доступность через ping. Я не нашел ничего проще, чем повесить на этот параметр кманду пустышку check_dummy идущий в составе плагинов nagios и показывающий заданные ему параметры. Конечно можно было повесить свой bash скрип выполняющий команду check_apcupsd с нужным параметром, но я не стал этого делать. Вы можете поступить, как я или все же написать свою команду.

Настраиваем command.conf

Прописываем команду check_dummy


object CheckCommand "check_dummy" {
        import "plugin-check-command"
        command = [ PluginDir + "/check_dummy" , "0" , "Passive" ]
}

Прописываем команду check_apcupsd


object CheckCommand "check_apcupsd" {
        import "plugin-check-command"
        command = [ PluginDir + "/check_apcupsd" ]
        arguments = {
         "check_command" = {
            skip_key = true
            order = 0
            value = "$check_mode$"
        }
         "-c" = "$check_crit$"
         "-w" = "$check_warn$"
        }
}

Настраиваем templates.conf


template service "UPS_check" {
  max_check_attempts = 3
  check_interval = 1m
  retry_interval = 30s
  check_command = "check_apcupsd"
}

Настраиваем groups.conf


object HostGroup "UPS" {
 display_name = "Устройство бесперебойного питания"
 assign where host.vars.ups == "true"
}

Настраиваем services.conf


# Команда проверки электричества
apply Service "UPS_Status" {
  display_name = "Наличие электричества"
  import "UPS_check"
  vars.check_mode = "status"
  assign where host.vars.ups == "true"
  vars.service_type = "UPS"
}
#Время работы от батареи
apply Service "UPS_timeleft" {
  display_name = "Время, на которое хватит заряда батареи"
  import "UPS_check"
  vars.check_mode = "timeleft"
  assign where host.vars.ups == "true"
  vars.service_type = "UPS"
}
# Заряд батареи в %
apply Service "UPS_bcharge" {
  display_name = "Заряд батареи"
  import "UPS_check"
  vars.check_mode = "bcharge"
  assign where host.vars.ups == "true"
  vars.service_type = "UPS"
  vars.check_warn = "90"
  vars.check_crit = "80"
}
# Вольтаж батареи
apply Service "UPS_battv" {
  display_name = "Вольтаж батареи"
  import "UPS_check"
  vars.check_mode = "battv"
  assign where host.vars.ups == "true"
  vars.service_type = "UPS"
}
# Нагрузка на UPS в %
apply Service "UPS_loadpct" {
  display_name = "Загруженность UPS"
  import "UPS_check"
  vars.check_mode = "loadpct"
  assign where host.vars.ups == "true"
  vars.service_type = "UPS"
}

Теперь нам необходимо создать отдельный файл в /etc/icinga2/conf.d - назовём его ups.conf


object Host "APC BackUPS 1500G" {
  display_name = "APC Back-UPS 1500G"
  check_command = "check_dummy"
  vars.ups = "true"
  vars.group = "UPS"
  vars.notification["mail"] = {
  groups = [ "icingaadmins" ]
 }
}

Теперь проверяем конфигурацию и перезапускаем сервер Icinga2


service icinga2 checkconfig
service icinga2 restart

Если все удачно то в веб-интерфейсе увидим:

3

 

Мониторинг UPS c поддержкой сети

Настройка на примере Smart-UPS RT 5000 XL

С бесперебойниками, умеющими работать в сети, все на мой взгляд проще. Для владельцев APC есть готовые модули тут. Но любой UPS можно мониторить через SNMP протокол зная OID нужных данных. К тому же нужный плагин - check_snmp имеется в системе.

 

Если у Вас модуль уже описан то можете перейти к таблице OID APC под управлением APC AP9617 и подобных APC AP9617 и подобных

Если нет то описываем команду в commands.conf


object CheckCommand "check_snmp" {
        import "plugin-check-command"
        command = [ "/usr/lib/nagios/plugins/check_snmp" ]
        arguments = {
                "-H" = "$snmp_address$"
                "-o" = "$snmp_oid$"
                "-C" = "$snmp_community$"
                "-c" = "$snmp_crit$"
                "-w" = "$snmp_warn$"
                "-s" = "$snmp_string$"
                "-r" = "$snmp_ereg$"
                "-R" = "$snmp_eregi$"
                "-l" = "$snmp_label$"
                "-u" = "$snmp_units$"
                "-t" = "$snmp_timeout$"
                "-p" = "$snmp_port$"
                "-P" = "$snmp_version$"
                "-m" = "$snmp_miblist$"
                "-O" = "$snmp_oidlabel$"
                "--rate-multiplier" = "$snmp_rate_multiplier$"
   }
        vars.snmp_address = "$address$"
}

 

Описываем службу в services.conf

Служба описана на примере заряда батареи. для мониторинга других параметров просто подставляем нужный OID и меня имя службы.


apply Service "UPS Battery Capacity" {
  display_name = "Заряд батареи"
  import "ups_apc"
  vars.snmp_community = "public"
  vars.snmp_oid = ".1.3.6.1.4.1.318.1.1.1.2.2.1.0"
  vars.snmp_label = "Battery Capacity"
  vars.snmp_units = "%"
  vars.snmp_warn = "95:"
  vars.snmp_crit = "85:"
  vars.service_type = "ups_battery"
  assign where host.vars.ups == "apc"
}

 

Описываем шаблон проверки в templates.conf


template Service "ups_apc" {
  import "generic-service"
  check_command = "check_snmp"
  check_interval = 1m
  retry_interval = 30s
 }

 

Создаем файл хостов

В /etc/icinga2/conf.d/ создаём файл ups.conf


object Host "ups1" {
   address = "АДРЕС"
   display_name = "ИМЯ UPS"
   check_command = "hostalive"
   vars.os = "ups"
   vars.responsezone = "IT"
   vars.ups = "apc"
   vars.notification["mail"] = {
   groups = [ "icingaadmins", "IT_Managment" ]
 }
}

После перезапуска Icinga2 нужные устройства появятся в веб-интерфейсе.

4

 

Таблица OID APC под управлением APC AP9617 и подобных
OID Функция
.1.3.6.1.4.1.318.1.1.1.2.2.1.0 Заряд батареи
.1.3.6.1.4.1.318.1.1.1.2.2.3.0 Расчётное время работы от батареи
.1.3.6.1.4.1.318.1.1.1.4.2.1.0 Исходящее напряжение
.1.3.6.1.4.1.318.1.1.1.4.2.2.0 Исходящая частота напряжения
.1.3.6.1.4.1.318.1.1.1.3.2.1.0 Входящее напряжение
.1.3.6.1.4.1.318.1.1.1.3.2.4.0 Входящая частота напряжения
.1.3.6.1.4.1.318.1.1.1.1.1.1.0 Модель UPS
.1.3.6.1.4.1.318.1.1.1.4.2.3.0 Нагрузка
.1.3.6.1.4.1.318.1.1.1.7.2.3.0 Результат последней само-диагностики
.1.3.6.1.4.1.318.1.1.1.2.2.4.0 Необходимость замены батареи ( Результат 2 - требуется замена; 1 - OK)
.1.3.6.1.4.1.318.1.1.1.2.2.2.0 Температура батареи
.1.3.6.1.4.1.318.1.1.1.3.2.5.0 Причина последнего переключения на батарею ( 1 - нет событий; 2 - высокое напряжение; 3 - перебой питания; 4 - отключение электропитания; 5 - небольшая потеря мощности; 6 - большая потеря мощности; 7 - маленький всплеск по питанию; 8 - большой всплеск по питанию; 9 - само-диагностика; 10 - чрезмерное колебание входного напряжения)
Добавить комментарий


Logo