Как добавить ибп в zabbix

Обновлено: 07.07.2024

MeUPS Data Extractor [ Мониторим ИБП через Zabbix и SNMP ]

11 posts •Page 1 of 1 b0rman Posts:9 Joined:01:53, 30 Jun 2012

MeUPS Data Extractor [ Мониторим ИБП через Zabbix и SNMP ]

  • 3.1 Передача данных в Zabbix-агент
    3.2 Шаблон для Zabbix
    3.3 Счетчики (Items)
    3.4 Триггеры (Triggers)
    3.5 Графики (Graphs)
    3.6 Экраны (Screen)
  • 7.1 Что нового?

О программе MeUPS Data Extractor
Консольная утилита, которая дает возможность извлекать данные из программы MeUPS и передавать этих данных в Zabbix-агент, SNMPTool и прочие программы мониторинга.

Обратите внимание!
MeUPS Data Extractor работает только вместе с программой MeUPS и только под Windows!

Передача данных в Zabbix-агент
Не буду описывать установку и настройку Zabbix-агента под Windows, т.к. в официальной документации все подробно написано и требует всего минуту работы с учетом скачивания самого агента:

  • 1. Скачиваем утилиту (см. ссылки в конце статьи)
    2. Сохраняем в c:\zabbix\scripts\ (можно сохранять куда угодно, но тогда обратите внимание на то, что и путь к утилите в конфиг-файле Zabbix-агента будет другой )
    3. Открываем конфиг-файл Zabbix-агента (zabbix_agentd.conf) и в самом низу добавляем строку

Шаблон для Zabbix
Zabbix поддерживает шаблоны, что очень упрощает работу. Предлагаю Вашему вниманию шаблон, который содержит счетчики (20 штук), триггеры (21 штука), графики (4 штуки) и screen (1 экран). XML-файл шаблона Вы найдете в конце этой статьи.
Как импортировать шаблон и что с ним делать дальше расписывать не стану - если нужно - спрашивайте, но идея проста - импортировали и привязали к машине с подключенным ИБП. Все!

К счастью, остальные два графика (частоты напряжений и заряд батарей) у меня выглядят совсем скучно - прямая линия на 50Hz и 100% заряда, поэтому их не публикую.

Графики (Graphs)
Экран (Screen) содержит в себе 4 графика, о которых было сказано выше.
Экран не публикую, т.к. после уменьшения под размер форума на нем ничего толком не видно

  • 1. Установить SNMP-сервис в Windows (W2K8R2: Start > Administrative Tools > Server Management > Features > Add Features > SNMP Services)
    2. Настроить SNMP-сервис (W2K8R2: Start > Administrative Tools > Services > SNMP Service > Properties (вкладки Agent, Traps, Security )
    3. Чтобы не изобретать велосипед, установить утилиту SNMPTool (ссылки в конце статьи)
    • 3.1. Для установки копируем библиотеку нужной архитектуры в системную папку Windows.
      3.2. Скачиваем ini файл с конфигурацией (ссылки все еще внизу статьи) и сохраняем в системную папку Windows.
      3.3. Изменяем путь к библиотеке и конфигурации в .reg файле и импортируем ключи в реестр.
    Если какие-то из них конфликтуют с теми, что уже есть у Вас в системе их легко изменить в конфиг-файле SNMPTool.
    Сейчас я получил спецификации MIB для Powercom от AlexM - это даст возможность использовать OID из стандартных аппаратных Powercom SNMP-адаптеров. Благодарности
    Выражаю благодарность Михаилу Черкесу за отличную программу MeUPS, а также за спецификации лог-файла программы, что дало возможность создания этой утилиты!
    А также пользователю AlexM за поддержку и спецификации по работе с ИБП Powercom! Вместо послесловия.
    MeUPS Data Extractor v 1.0 проходит тестирование с 01.07.2012. Буду рад всем, кто подключится к тестированию и использованию утилиты.
    Если у Вас есть предложение по улучшению или исправлению функционала программы - буду рад выслушать Вас в комментариях и добавить этот функционал по мере необходимости, сил и свободного времени.
    Программа и шаблоны распространяется свободно, AS IS
    Всем спасибо!


    Версии программы и шаблонов
    Актуальная версия MeUPS Data Extractor: 1.1
    Актуальная версия шаблонов для Zabbix: 1.1
    Актуальная версия файла конфигурации SNMPTool: 1.0

    Возникла необходимость в мониторинге зоопарка ИБП, в наличии были Ippon, Powercom и Krauler. В качестве средства мониторинга использован Zabbix.

    Естественно, задачу необходимо было решить 1) дешево 2) еще дешевле, поэтому вариант с SNMP модулями был отвергнут сразу. Было решено использовать соединение по serial портам, благо имелся опыт разработки к Ippon и APC. К слову сказать к APC на вторичном рынке есть SNMP модули по вменяемой цене, а вот к недорогим ИБП я смог найти только новые модули по цене 11-20 тыс. рублей.

    В ходе работы были поставлены следующие дополнительные задачи:

    1. найти и проверить кабели для подключения каждого ИБП, ибо таковые в комплекте отсутствовали
    2. Реализовать некий модуль, который бы с одной стороны имел интерфейс RS-232 и понимал протокол обмена данными с каждым ИБП, а с другой — имел сетевой интерфейс и мог отправлять данные в виде zabbix_trapper.
    3. Протестировать модель сбора и передачи данных, части кода, а также формат данных.

    В ходе реализации второго и третьего пункта хотелось собрать в одном месте все данные, которые бы в будущем позволили реализовать отдельное устройство на м/к.

    Итак:

    Небольшой оффтоп. Основу серверной составляют два хоста Vmware ESXi, которые размещены в стойке с двумя же ИБП. Часть серверов имеет 2 блока питания. А часть, к сожалению, только один, отчего периодически страдают. Zabbix в настоящее время размещен на одном из хостов в виде виртуальной машины. В принципе развернуть небольшой виртуальный сервер на Ubuntu (я использую эту платформу для сервисов) для реализации какой-либо задачи проблемы не представляет.

    Таким образом сложилась схема: COM-порт на ESXi -> Com-порт на виртуальной машине -> Программа на С, которая возвращает данные с ИБП -> Скрипт или программа которая посылает zabbix trap. Последние два пункта, в дальнейшем следует объединить. Хотя работает и так.

    Задачу решал последовательно, распайка кабеля для одного ИБП, распайка дополнительного разъема для сервера (их надо два, плюс переходник rj-45 в DB9), проверка соединения, проверка программы, настройка элементов в Заббикс.

    Работу с портом нашел в гугле, можно сделать чтение из Баш, но из Баша не получилось добиться стабильной работы. В принципе код на С в linux — Ъ. Первым был протестирован Ippon, затем в ходе изучения ИБП Powercom был запущен монитор порта, который показал, что PowerCom также работает по протоколу Megatec, а родная программа опрашивает ИБП при запуске командами «I» и «F», а затем циклически «Q1». Я повесил имя порта в виде "/dev/ttyS0" или "/dev/ttyS1" на первый аргумент, второй аргумент позволяет запросить дополнительные параметры, по коду видно.

    В каталоге /home/appliance/ разместил программу, назвал ее uniups.cpp. Скомпилировал .

    В принципе результат примерно такой (да, работаю под рутом, даже не комментируйте)

    Кроме того, Krauler возвращает напряжение на элементе, а остальные ИБП — на батареи, в документации это описано как

    SS.S or S.SS For on-line units battery voltage/cell is provided in the form S.SS. For standby units actual battery voltage is provided in the form SS.S

    Ввиду этого пришлось поставить патч на скрипт. Об этом ниже.

    В принципе для опроса двух ИБП этого достаточно, к этому моменту меня однако на тестировании у меня стоит третий, а в перспективе будет еще и четвертый, поэтому я выбрал первый попавшийся и, по странному стечению обстоятельств единственный линуксовый сервер на втором хосте Vmware и прокинул на него СОМ порты.

    Использовать агента заббикса или копировать zabbix_sender не стал, нашел описание последнего на

    Вся соль заключается в кодировании данных в Base64. Для проверки я использовал команду

    где 192.168.53.23 — адрес сервера Zabbix. Она работает.
    Вышеописанный скрипт я назвал zabbix_sender.pl и поместил на сервере, скрипт у меня выглядит так:

    Perl на сервере уже был.

    Далее понадобился скрипт, который бы увязывал все компоненты воедино и который бы можно было поместить в Cron.

    Здесь пример для одного порта, для другого порта можно просто скопировать этот же код и подставить другое имя. Цикл делать не стал, слабо себе представляю машину с более чем 2 СОМ портами.

    • array — массив, который возвращает программа опроса ИБП, Names — массив с именами Item, на Zabbix сервере должны быть заведены элементы с такими же именами. KraulerMemoRT2000 — имя бесперебойника, должно совпадать с именем хоста на сервере.
    • возник баг, последнее возвращаемое скриптом значение, воспринимается сервером Zabbix как некорректное, независимо, причину не нашел, просто добавил элемент NA, который в принципе отсылается в никуда, на сервере его заводить не надо, после чего все стало нормально.
    • производится проверка на количество элементов массива $, возвращаемых при опросе ИБП. Эта проверка отсекает ошибки при чтении с СОМ порта, в том числе когда ИБП выключен. В последнем случае до патча возникала интересная ошибка: Первый в массиве элемент данных отсылался с пустым значением, соответственно на стороне сервера возникала ошибка данных, а триггер по этому элементу не срабатывал. И что самое печальное, что данные числились полученными, т.е мониторинг выводил полученные данные под видом актуальных, в то время, как ИБП был отключен.
    • correct[5]=«24.0» это коррекция напряжения для батарей (5ый элемент в массиве), в том случае если ИБП возвращает напряжение на элементе (battery voltage/cell). У меня 6 элементов в батарее, 4 шт последовательно, итого 24. В принципе это описано в протоколе. Я посчитал лишним создавать отдельный элемент, так как все ИБП у меня мониторятся по шаблону и у всех 48 вольт. При мониторинге разновольтовых ИБП, конечно, надо будет несколько поменять структуру, возможно оптимальным будет забить параметры батарей на сервере.

    Вышеописанный скрипт добавлен в cron на ежеминутное выполнение. Настройка заббикса в данной статье не рассматривается.

    В принципе, это все. Буду рад, если собранная информация кому-то пригодится.

    Итак, зарисовка о мониторинге ИБП APC SMART-UPS 1000, подключённого к ПК на Linux, через USB. Собирать информацию будем через Zabbix-Agent.

    Для начала нужно выполнить установку ПО для работы с ИБП. Повторяться нет смысла, всё написано в этой зарисовке. Если после выполнения установки и проверки работоспособности не получили никаких ошибок, то приступаем к настройке Zabbix-Agent.

    Установка и минимальная настройка Zabbix-Agent описана в этой мини-зарисовке. После основной настройки агента, в конец конфигурационного файла добавляем одну строчку:

    UserParameter=apc.mon[*],apcaccess | grep ^$1 | awk ''

    Это позволит Zabbix-Agent запустить команду apcaccess и "отгрепать" нужный нам параметр с его значением.

    На Zabbix-Server можно установить zabbix-get и проверить всё ли корректно работает:

    В ответ должны получить значение. Если всё у нас в этой жизни хорошо сложилось, переходим к настройке через Web-морду.

    Поскольку наш ИБП гвоздями прибит к серверу на Linux, то и создавать элементы данных и графики будем для этого сервера. Заходим в меню Настрока -> Узлы сети -> Группы элементов данных .

    Zabbix - группа элементов данных

    И создаём группу элементов данных с произвольным, понятным для нас именем. После создания Заходим в элементы данных нашей группы:

    Zabbix - элемент данных

    Как раз в этом разделе мы создаём параметры которые будут отслеживаться. Крайне рекомендую называть параметры с какого-нибудь условного "префикса". Что-то вроде APC Battery Charge, APC On Battery. Это облегчит нам и без того беззаботную жизнь при создании графиков. Эти элементы данных будут все в одной куче. В качестве примера рассмотрим один параметр:

    Zabbix - элемент данных

    Признаком Вашей успешности в этом предприятии будет Активированный статус всех элементов в списке.

    Завершающим штрихом в этой зарисовке будет создание графика. В свойствах этого же устройства (в этом примере 192.168.50.1) находим ссылку Графики. Заходим, создаём график с любым именем и добавляем наши элементы данных. Пока мы создавали график, данные уже были собраны и что-то можно сразу лицезреть что-то вроде этого:

    Zabbix - UPS APC Graph

    Для полного счастья нужно установить триггеры при переходе ИБП на батареи и оповещение на почту и сотовый телефон.

    Перейдем к действию.

    Установка проста до невозможности:

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

    Далее необходимо организовать сбор и передачу данных на zabbix. Захламлять конфиг демона десятками UserParameter нет совершенно никакого желания. Душа просит эстетики и мы начинаем конструировать велосипед.
    Нам понадобится скрипт который будет посредником между zabbix агентом и apcupsd. Для подобных фокусов у меня имеется каталог "/usr/local/etc/scripts/".
    Создаем там файл "/usr/local/etc/scripts/apcupsd.status.sh" права 750 владелец root группа zabbix

    Сам скрипт. Сильно впечатлительным и отцам программирования придется пролить слезу:

    Обращаю внимание, что в файле "/var/log/apcupsd.status" используется разделитесь ":", в то время как этот же символ может фигурировать и в самих данных, что приведет к потери части строки.
    В довесок к этому, некоторые данные отдаются с описанием их единиц измерения, а нам необходимо передать в zabbix эти значения как INT или FLOAT т.к если получать их как STRING, то мы не сможем ими манипулировать в дальнейшем. Например использовать в собственных расчетах и формулах.
    В общем, для всех этих фильтраций мы используем cut, head и awk. Как обрабатывать тот или иной параметр задано в условии формирующем переменную QUERY.
    Параметр STATUS отдаёт нам значение имеющее тип STRING и не подходящее нам для использования в графиках или других расчетах. Из тех вариантов, что мы получаем, нас интересует только определение типа его работы (от сети или от аккумулятора), для этого мы преобразуем для zabbix STRING в INT и отдаём "1" (работа от сети) или "0" (работа от батареи).

    Велосипед готов.
    Идем в конфиг агента "/usr/local/etc/zabbix_agentd.conf" и добавляем в конце файла строку которая будет отвечать за сбор параметров у скрипта:

    Тут все просто:
    1. ups[*][/b] - массив в котором будут храниться данные от ИБП и по совместительству являться ключами в zabbix
    2. /usr/local/etc/scripts/apcupsd.status.sh - путь до скрипта
    3. "/var/log/apcupsd.status" - путь до "статус-файла" apcupsd
    4. "$1" - запрашиваемый параметр

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

    Читайте также: