Мониторинг UPS в Icinga2
Общая
В данной статье будет рассказано о вариантах мониторинга разных устройств бесперебойного питания (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
Выполнив эту команду получим вывод:
В моем случае 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
Получаем вывод:
Загружаем необходимый модуль
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
Если все удачно то в веб-интерфейсе увидим:
Мониторинг 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 нужные устройства появятся в веб-интерфейсе.
Таблица 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 - чрезмерное колебание входного напряжения) |
- Просмотров: 12563