В данной статье я хочу поделиться опытом разработки системы мониторинга состояния аккумуляторных батарей (АКБ) в коммутационных шкафах(ШК). Так же перспективой реализации системы проактивной защиты локальной сети методом мультиагентного сегментирования.  Задача, следующая: знать фактическое состояние АКБ в реальном времени, а также вести учёт замеров в ШК. Так как применяются разные источники бесперебойного питания (ИБП) начиная от разновидностей APC Smart-UPS и оканчивая РИП задача усложняется. Поэтому решение было принято проводить тесты конкретно с АКБ. В перспективе использовать индивидуальный подход к каждому ИБП используя доступные интерфейсы источника. Но на данном этапе (демонстрационном) нужно кардинальное решение. Итак, у нас есть развёрнутая и отлаженная система Zabbix 6.2: на Ubuntu с MySQL, Apache на борту и локальная сеть по всем шкафам. В каждом ШК есть контроллер МИРАДА, в документации которого была заявлена работа по SNMP протоколу, а также унифицированные порты 4-200 мА и 0-10 В + 4 выхода реле.  Для фиксации напряжения было принято решение использовать резисторный делитель. Номинальное напряжение цепи АКБ 24V было понижено до 10V для входа контроллера. Исходя из представленных ресурсов будет описана следующая реализация: Используя функционал Zabbix отправляется команда включения реле на контроллере которое отключает подачу стационарного электропитания на ИБП вынуждая его переключиться на работу от АКБ. Таким образом мы фиксируем показания падения напряжения и время работы ШК от АКБ. После того как произойдёт полный разряд АКБ, электропитание пропадёт и реле перейдёт в состояние выключено, и стационарное питание восстановиться. В перспективе возврат электропитания при минимальной отметке порога напряжения на АКБ, это будет возможно при индивидуальном подходе. Имея параметры: - амплитуда падения напряжения -время работы ШК от АКБ -ток цепи (согласно документации на ШК) На основе этих данных вычисляем фактическую ёмкость АКБ, а также фиксируем время работы ШК от АКБ. Всё это в автоматическом или ручном режиме с отображением на карте сети и сигнализацией при критическом состоянии АКБ, а также формирование отчётов, то есть получаем весь возможный и необходимый функционал системы Zabbix. О том как это было, в этой статье. Начнём по порядку.  Есть контроллер:  Контроллер «УМС-М» С модулем расширения P21X3 У него на борту есть SNMPv1, хотелось бы использовать посовременней версию протокола и web интерфейс, но работаем с тем, что есть. Пропустим нюансы прошивки и настройки, так как производитель помогает решать эти вопросы и без него ни как. Смотрим SNMP  Здесь нас интересует два входа и состояние реле . Подключаем реле отключения 220V на сухой контакт контроллера в разрыв подачи напряжения на него командой:  snmpset -v 1 -c MIRADA $ip 1.3.6.1.4.1.41069.3.0.X.0.1.0 i D где: X = индекс выхода 0 ... 3 D = 0 - выключить выходное реле, 1 - включить Проверяем реакцию и состояние запросом: snmpget -v1 -c MIRADA $ip 1.3.6.1.4.1.41069.3.0.0.0.1.0 Получаем следующий ответ: - контакт в режиме включено, а значит питание на реле идёт, и оно размыкает контакт подачи электропитания на ШК. Как видно на фото, реле запитывается от потребительской сети и размыкается контактом контроллера, который при отправке команды замыкает цепь, питание подаётся на реле, которое размыкает подачу электропитания, при потери потребительской сети (т.е. АКБ разрядится) реле переходит в состояние разомкнуто, контроллер перезагружается и возвращает значение контакта по умолчанию разомкнуто. Это сделано для того, чтобы зафиксировать цикл разрядки и не потерять ШК. Подключаем на унифицированный вход АКБ через резисторный делитель рассчитанный по формуле  Полученные данные формируем в таблицу, где сопоставляем показания разности напряжение при помощи лабораторного блока питания для дальнейшей интерпретации в системе показаний и формировании графика. Напряжение   АКБ На   вход контроллера Показания  контроллера 24 9.6 1,530000 23,5 9.4 1,529000 23 9.2 1,528000 22,5 9 1,527000 Виден шаг сетки и понятен множитель. Идём в Zabbix и делаем коннект с контроллером по протоколу SNMP используя агента и создаём узел сети. Создаём элемент данных и проверяем полученные данные. Обращаемся к таблице сопоставления и устанавливаем пользовательский множитель в предобработке элемента данных на значение 20 для привычного отображения данных. Собираем стендовый экземпляр, отправляем команду на реле и создав график на основе элемента данных     видим нисходящую падения напряжения.  Создаём триггер с названием РАЗРЯД для контроля состояния ИБП. То есть если напряжение падает значит пропало внешнее электропитание и ИБП работает от АКБ. О чём триггер и будет сигнализировать на самом ИБП. В данном примере использовался SKAT -V.24DC-18 исп. 5000.     Добавляем элемент на карту сети в виде триггера для индикации. На данном этапе     А теперь начинаются танцы с бубном). Нужно запускать замер АКБ и при этом фиксировать окончание замера, но так как фиксация будет построена на основании состояния реле, которое мы узнаём по запросу SNMP триггер нам тут не поможет – постоянные пакеты в сети и триггер не сможет фиксировать и преобразовать время работы реле.  Решение – пишем скрипт на Bash который будет запускаться через функционал Zabbix поддерживая макросы данной системы. Что даёт нам универсальный инструмент для тестирования любого ШК используя один скрипт, возможность автоматизации и планирование замеров. #!/bin/bash start=$(date +%s) ip=$1 snmpset -v 1 -c MIRADA $ip 1.3.6.1.4.1.41069.3.0.0.0.1.0 i 1 snmpget -v1 -c MIRADA $ip 1.3.6.1.4.1.41069.3.0.0.0.1.0 > /home/zabbix/$ip w1=$(awk '{print $4}' /home/zabbix/$ip) while [ $w1 -gt 0 ] do sleep 200 snmpget -v1 -c MIRADA $ip 1.3.6.1.4.1.41069.3.0.0.0.1.0 > /home/zabbix/$ip w1=$(awk '{print $4}' /home/zabbix/$ip) done end=$(date +%s) echo $end - $start | bc > /home/zabbix/TIME$ip Благодаря макросу {HOST.CONN} передаём значение адреса переменной $ip в файл (при отсутствии создаётся) с названием в виде адреса тестируемого устройства. В этот файл записывается значение контакта контроллера и проверяется каждые 200 секунд пока $4 не поменяется на 0 т.е. реле вернётся в состояние отключено. Так же фиксируется время выполнения скрипта в файл TIME$ip в секундах. В цикле while можно заменить запрос на значение унифицированного входа задав пороговое значение напряжения на АКБ перед отключением ИБП если нельзя допускать кратковременную потерю связи в виде перезагрузки оборудования. Элемент индивидуального подхода, о чём говорилось ранее. Возвращаемся в Zabbix и в узле связи MIRADA создаём элемент данных, который читает файл, где фиксируется состояние реле: Делаем предобработку чтобы получить значение 0 или 1. Добавляем триггер на основе этого элемента данных Теперь запуская скрипт: Теперь необходимо сопоставить данные и построить систему сигнализации с информацией о состоянии АКБ. Для этого создадим локальный узел сети     Элемент данных, считывающий содержимое файла TIME в котором время отработки скрипта в секундах. И привяжем к нему триггеры каждый из которых срабатывает в своём диапазоне значения: И добавляем этот элемент на карту сети, замеры стендового ШК показывают среднее значение учитывая паузу в скрипте 200 секунд и округление времени работы от АКБ с погрешностью 20минут/0,2А.ч. Мы получили универсальный, с перспективой развития инструмент мониторинга состояния аккумуляторных батарей в коммутационных шкафах периметра. Для более критической информационной инфраструктуры как ранее упоминалось требуется более индивидуальный подход. На данном этапе и имея текущие данные используя систему из зависимых триггеров, а также возможности работы с картой сети будет разработана более полная карта сети с необходимой сигнализацией и формированием отчётов. Про проактивную систему защиты локальной сети методом мультиагентного сегментирования будет во второй части.