Столкнулся с проблемой, что камеры видеонаблюдения HIKVISION, которые питаются по PоE от коммутатора D-Link DGS-1210-10P, временами становятся недоступны. Восстановить работу камер помогает их перезагрузка по питанию.
В связи с этим появилась необходимость настроить мониторинг доступности камер и, при необходимости, их автоматическую перезагрузку. В качестве средства мониторинга я буду использовать Zabbix.
Стучимся по SNMP
DGS-1210-10P поддерживает протокол SNMP. Таким образом, существует возможность удаленного управления PoE на каждом порту коммутатора. С этого и начнем. Убедимся, что SNMP включен на коммутаторе и существует «SNMP Community» с правами чтения и записи.
Веб-интерфейс DGS-1210-10P
Теперь проверим, что на хосте с Zabbix установлены и корректно работают инструменты Net-SNMP, например, вызвав команду snmpwalk. Если PoE включен на каждом порту, то вывод snmpwalk должен выглядеть так:
pletnev@zabbixhost:~$ snmpwalk -c public -v 2c 10.90.90.90 1.3.6.1.4.1.171.10.76.12.22.1.1.3
iso.3.6.1.4.1.171.10.76.12.22.1.1.3.1.1 = INTEGER: 1
iso.3.6.1.4.1.171.10.76.12.22.1.1.3.1.2 = INTEGER: 1
iso.3.6.1.4.1.171.10.76.12.22.1.1.3.1.3 = INTEGER: 1
iso.3.6.1.4.1.171.10.76.12.22.1.1.3.1.4 = INTEGER: 1
iso.3.6.1.4.1.171.10.76.12.22.1.1.3.1.5 = INTEGER: 1
iso.3.6.1.4.1.171.10.76.12.22.1.1.3.1.6 = INTEGER: 1
iso.3.6.1.4.1.171.10.76.12.22.1.1.3.1.7 = INTEGER: 1
iso.3.6.1.4.1.171.10.76.12.22.1.1.3.1.8 = INTEGER: 1
В случае, если PoE на каком-то порту отключен, то вместо «INTEGER: 1» мы увидим «INTEGER: 2».
SNMP и PoE
Для дистанционной перезагрузки камер по питанию я написал bash-скрипт, принцип работы которого предельно прост. По SNMP он узнает, включено ли PoE на указанном порту, и отключает его, если это так. Затем, спустя пять секунд, скрипт снова включает PoE на этом порту.
Например, перезагрузка камеры, подключенной к восьмому порту коммутатора, выглядит так:
pletnev@zabbixhost:~$ ./dgs_portreset.sh 10.90.90.90 public 1.3.6.1.4.1.171.10.76.12.22.1.1.3.1.8
iso.3.6.1.4.1.171.10.76.12.22.1.1.3.1.8 = INTEGER: 2
iso.3.6.1.4.1.171.10.76.12.22.1.1.3.1.8 = INTEGER: 1
Настраиваем мониторинг
Переместим dgs_portreset.sh в /usr/lib/zabbix/externalscripts, а через веб-интерфейс Zabbix создадим скрипт PoE switch. Теперь добавим действие IPCam POE reset, которое выполнит PoE switch при поднятии триггера с тегом ipcam.
Создаем скрипт PoE switch и настраиваем действие IPCam POE reset
Доступность камер будем определять банальным пингом. Для удобства добавления камер я подготовил шаблон IPCAM_PING, который содержит все необходимые макросы. Элементы данных и триггеры IPCAM_PING наследует от стандартного шаблона ICMP Ping.
Шаблон IPCAM_PING для Zabbix 5.2.2
После импорта шаблона IPCAM_PING триггеру ICMP Ping: Unavailable by ICMP ping потребуется добавить тег ipcam.
Добавляем камеру в мониторинг
Чтобы начать мониторинг доступности камеры, необходимо создать узел сети с интерфейсом типа агент и IP-адресом видеокамеры. К узлу сети необходимо присоединить шаблон IPCAM_PING и заполнить значения макросов {$SWITCH_IP}, {$SNMP_COMMUNITY} и {$OID}. Значением последнего является SNMP OID запись состояния PoE конкретного порта коммутатора.
Камера с адресом 192.168.3.64, подключенная к 11 порту коммутатора DGS-1210-28P с адресом 10.90.90.60
Производительность
В процессе добавления видеокамер появились проблемы с производительностью: «Zabbix icmp pinger processes more than 75% busy». Решить проблему помогло увеличение значения параметра StartPingers.
Изменение StartPingers позволило снизить Utilization of icmp pinger data collector processes с 78 до 24%
Снизить нагрузку на сервер возможно и изменением частоты обновления элементов данных. По умолчанию этот интервал составляет одну минуту.
Заключение
Такой мониторинг сетевых камер я применял с несколькими моделями коммутаторов D-Link. Ниже используемые мной OID: