Хочу поделиться небольшим практическим опытом решения одной прикладной задачи. Я расскажу, как можно настроить мониторинг камер в системе видеонаблюдения Линия (Devline). Каких-то новых или интересных приемов показано не будет, сугубо информация по Линии, так что статья будет интересна только тем, кому нужно решать такую же задачу.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Содержание:
Цели статьи
- Рассказать про различные способы мониторинга камер в системе видеонаблюдения Линия.
- Показать настройку по одному из способов.
- Рассказать про ошибки, с которыми столкнулся в процессе настройки.
Введение
Я давно знаком с видеонаблюдением Линия. Она популярна, функциональна, стоит не очень дорого, ставится без проблем на любую версию Windows. Настроить и ввести в эксплуатацию такую систему нет никаких проблем. Мне нужно было настроить мониторинг этой системы, установленной на Windows 7.
С базовыми метриками нет никаких проблем - ставим сам zabbix сервер, устанавливаем zabbix-agent на windows, настраиваем мониторинг дисков. Дальше нужно было подумать, как мониторить сами камеры.
Первое, что приходит в голову - icmp проверки по ip. У такого подхода есть 2 минуса:
- Камера может пинговаться, но при этом реально не выдавать картинку на сервер.
- Камеры могут быть в разных сетях, к которым может не быть доступа с сервера мониторинга.
Гораздо удобнее было бы получать всю необходимую информацию по камерам с самого сервера Линии. Стал копать в этом направлении и вот что нашел.
Если у вас еще нет своего сервера для мониторинга, то рекомендую материалы на эту тему. Для тех, кто предпочитает систему CentOS:
То же самое на Debian 10, если предпочитаете его:
Разные подходы к мониторингу
Мониторить камеры в Линии можно разными способами. Я нашел и рассматривал 3 из них. Подробно опишу каждый.
Первый способ. В настройках программы есть возможность настроить реакции. Можно сделать реакцию, которая будет писать в лог файл информацию о том, что какая-то камера недоступна.
Сам лог файл располагается в C:\ProgramData\DevLine\Linia\logging\kernel.log. При пропадании сигнала в логе будут примерно такие записи.
2019-05-08 14:51:23.235 ERROR root primary video stream has been interrupted (watchdog_error, 0, no frames) from Ворота металл, restarting 2019-05-08 14:51:23.235 ERROR root secondary video stream has been interrupted (watchdog_error, 0, no frames) from Ворота металл, restarting 2019-05-08 14:51:23.238 WARN root starting video stream from Ворота металл (1) (warn: video has been interrupted) 2019-05-08 14:51:23.243 WARN root starting video stream from Ворота металл (2) (warn: video has been interrupted) 2019-05-08 14:51:44.249 ERROR root failed to start video stream from Ворота металл (2) 2019-05-08 14:51:44.249 ERROR root failed to start video stream from Ворота металл (1) 2019-05-08 14:51:54.247 INFO root starting video stream from Ворота металл (1) 2019-05-08 14:51:54.250 INFO root starting video stream from Ворота металл (2) 2019-05-08 14:52:15.249 ERROR root failed to start video stream from Ворота металл (1) 2019-05-08 14:52:15.334 ERROR root failed to start video stream from Ворота металл (2) 2019-05-08 14:52:26.253 INFO root starting video stream from Ворота металл (1) 2019-05-08 14:52:26.267 INFO root starting video stream from Ворота металл (2) 2019-05-08 14:52:47.277 ERROR root failed to start video stream from Ворота металл (2) 2019-05-08 14:52:47.365 ERROR root failed to start video stream from Ворота металл (1)
Дальше этот лог файл можно анализировать заббиксом и слать оповещения. Это удобно тем, что не надо проверять каждую камеру. Настройки простые и быстрые. Изначально хотел настроить именно так, но от данного способа отказался по следующим причинам.
- Лог файл очень большого объема. У меня он был 100 мб и я не понял, как его ротировать.
- В нем очень много разных событий и даже на простое отключение камеры генерируется куча разных строк. Потом то же самое на возврат.
- Некоторые камеры кратковременно теряют связь и это тоже отражается в логе.
Все эти события нужно было как-то обработать в заббиксе, прислать удобное оповещение с именем камеры в почту, обработать ложные срабатывания. Мне в итоге показалось все это слишком сложным и ненадежным.
Второй способ. В тех же реакциях можно настроить запуск внешних программ. Можно было бы использовать zabbix_sender для отправки информации на сервер при пропадании камеры. Это был бы самый простой, быстрый и удобный способ. Проблема в том, что сервер Линии не умеет передавать имя камеры в какой-то переменной при настроенной реакции на оповещение при пропадании любой из камер.
Для того, чтобы точно узнать имя отключившейся камеры, необходимо добавлять реакцию и параметры zabbix_sender индивидуально для каждой камеры вручную. Мне не нравится подход в мониторинге, когда настройки выполняются на стороне клиента. Это неудобно. Отказался от этого способа по этой причине.
Третий способ. К камере можно обратиться через web сервер, который по-умолчанию запускает Линия. Запрос выглядит примерно так - http://10.1.4.2:9786/cameras/1/image В ответ вы увидите статический кадр с камеры 1. Для доступа к изображению используется базовая авторизация. Пользователя можно создать через настройки сервера.
Если с камерой все в порядке, вы получаете кадр с камеры и http код ответа на запрос 200. Если с камерой какие-то проблемы и картинки нет, код запроса будет отличен от 200. Я решил настроить мониторинг камер через стандартные web проверки zabbix. Триггер с оповещением будет срабатывать на код ответа веб сервера, отличный от 200.
Решение простое и рабочее, хотя мне хотелось сделать его каким-то более красивым и удобным, с автообнаружением и масштабируемостью на большие системы видеонаблюдения. В моем случае мне хватило и его, так как сервер только один, камеры редко меняются. Нет проблем настроить все вручную один раз и забыть.
Для тех, кто все же решится каким-то образом доработать или сделать более функциональное и универсальное решение по мониторингу камер в Линии добавлю несколько подсказок. У сервера видеонаблюдения есть api - https://devline.ru/aboutweb/#RPC. На основе информации оттуда я подготовил вот такой запрос, который выдает подробную информацию о камерах в json:
# curl -X GET -H "Accept: application/json" --user zabbix:password http://10.1.4.2:9786/cameras
Вывод примерно такой:
Не понимаю, что разработчикам помешало добавить сюда информацию о статусе потока, активен или нет. Это решило бы все проблемы. Возможно, если камера по какой-то причине будет отключена, ее не будет в этом json. Тогда на основе этого можно было бы получать информацию о недоступности. Проверить это у меня не было возможности. Удаленно не мог отключать камеры.
Настройка мониторинга камер в zabbix
После того, как определился со способом, настройка мониторинга каждой камеры не представляла какой-то особой трудности. Для этого использовались стандартные web сценарии. Подробно их работу я описывал в отдельной статье по мониторингу сайтов в zabbix.
Я создал отдельный шаблон и добавил туда следующие сценарии. В первой вкладке указал имя и интервал.
Дальше задал параметры конкретного шага с адресом для проверки камеры.
Отдельно настроил авторизацию для доступа к камере.
Изначально не планировал полностью загружать страницу с картинкой. Чтобы сократить трафик, хотел проверять только код ответа сервера. Но когда указывал настройку Загружать только заголовки, web сервер возвращал код ответа 405.
После того, как убедился, что мониторинг работает нормально, сделал триггер для оповещения по почте о недоступности камеры.
В зависимостях триггера указал доступность zabbix-agent на самом сервере видеонаблюдения. Это чтобы не было спама о недоступности камер, если сам сервер по какой-то причине потеряет связь с мониторингом и все проверки будут с ошибками.
Заключение
Очередной пример универсальности системы мониторинга Zabbix. Рядовая задача, которую с помощью заббикса можно решить тремя принципиально разными способами. И каждый имеет свои плюсы и минусы, может быть выбран в зависимости от наблюдаемой системы.
Лично я получаю удовольствие, когда работаю с zabbix. Так сходу даже не придумаю, какой программный продукт мне нравится так же сильно. Возможно, Nginx. Буду рад полезным замечания, советам в комментариях.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Наверное обсуждение началось задолго до появления найденных мною функций, но вот возник вопрос и нашлась документация и API для серверов и регистраторов Line. Через API можно мониторить камеры через сам регистратор, в том числе идет ли поток с камеры, а еще важный момент кроме состояния самих камер можно мониторить состояние сервера, состояния хранилищ и еще некоторых данных с сервера/регистратора напрямую. Ссылка на документацию: https://devline.ru/aboutweb/#RPC
Да, во время написания статьи API ещё не существовало.
Столкнулся с проблемой такого характера.
есть видеорегистратор и камеры хиквижн.. 28 камер подключены по сети 10.7.10.0 с ними проблем нет.. все подвязывается и работает..
и есть 5 камер которые подключены непосредственно к регистратору и находятся в своей сети 192.168.254.0... как мне их можно привязать в забикс??
я даже не могу до них достучатся из своей сети (10.7.10.0)
Получается, что никак. Нужна сетевая связность, чтобы снимать данные с оборудования. Можно было бы поставить zabbix_proxy в недоступной сети, чтобы она собирала метрики и отправляла на сервер. Но на видеорегистратор прокси не поставить. Так что решайте вопрос сетевой связности. Если физически доступ с подсети 192.168.254.0 в 10.7.10.0 есть, то этот вопрос можно решить с помощью маршрутизации. Но нужно разбираться в вопросе и всё аккуратно настроить в зависимости от топологии сети.
Добрый день. Покопался в меню видеорегистраторов "линия" и выяснил,что можно http запросы о проблемах с записью архива и потери сигнала с камер на url ссылку.
Как корректно "прикрутить" сей функционал к заббиксу, что бы в заббиксе можно было вести онлайн мониторинг текуших проблем, не подскажите?
Добрый день.
Это просто сообщение с заголовком "Кстати".
Хотел переделать свой мониторинг видеокамер на Web-опрос, добавил, проверил и... удалил))) Потому что при проверке пингом у нас все-таки хранится информация о потерях, их частоте и времени отклика, что в свое время помогло мне логически определить некорректную работу poe-коммутатора, сэкономив кучу времени. На нормальный poe-коммутатор L3-уровня собственникам то денег жалко)))
Спасибо за статью. Являюсь вашим постоянным читателем. Много чего внедрил. Снимаю шляпу.
https://github.com/P1ton/zabbix-devline
Шаблон с правилом поиска камер и проверкой доступности камеры через внешнюю проверку.
Спасибо, посмотрю. Хотя описанный в статье вариант меня на текущий момент полностью устраивает.
Интересный материал, спасибо за исследование. Подскажите, а в настройках "Линии" разве нельзя поставить опцию оповещения о потере сигнала? Обычно такой функционал уже встроен во все видеорегистраторы, даже старые RVI. И просто приходит алерт на почту, что такая-то камера не в сети. При этом на некоторых регистраторах есть дублирование сообщения о неработающих камерах в 0:00 часов.
Может быть и можно, точно не знаю. Я не видел, но специально не искал. Я всегда все замыкаю на единую систему мониторинга, поэтому все настраиваю в ней, даже если есть возможность настроить уведомления напрямую.
Здравствуйте.
Мы построили городской благотворительный проект онлайн камеры на центральных площадях города. 12 камер (хиквижн) и целая куча микротиков )) на которых построена сама сеть. Возможно ли поставить на сервер заббикс, что бы мониторить все это хозяйство, тк вечно что нибудь отваливается, а учитывая, что следящей программы нет, очень трудоемко выдергивать отрывки инфы с разных девайсов. С ув. Евгений.
С помощью Zabbix можно замониторить все, что угодно. Но я до конца не понял ваш вопрос.
Ок, спасибо за оперативный ответ. Скажите пож-та к вам возможно обратиться за сессионной помощью в настройках удаленно? Сообщите директ для переписки. С ув. Евгений.
Мои контакты в разделе - https://serveradmin.ru/kontaktyi/ Писать лучше в скайп или телеграм.
Вот до http проверок, я не догадался, но заморочился на C# сделал дискавери с проверкой картинки по пикселям xD, спасибо что напомнили про http проверки)
Сам бы я тоже не догадался, подсказал напарник, а дальше я уже на форуме линии и в документации нашел подробности.
Каким образом на c# сделана дискавери и проверка? Не уловил. Картинку же как-то все равно получить надо, по http проще всего.
На C# для агента написал парсилку вывода "cameras".
Но полагаю, что можно это сделать на PowerShell, но мне был интересен c#.
Ну, и через C# так же на стороне агента получаю картинку (тут подзаморочился и был спортивный интерес, сканировал на наличие не черных пикселей), чтобы передать на сервер 1 или 0 )))
На досуге проверил, http код всегда 200, если с камеры нет изображения.
Например http://192.168.1.2/cameras/10/image
Т.е. если камера настроена и галочка "Нет камеры" не выставлена (не должна быть выставлена)
То при переходе по этому uri видим "квадрат Малевича" и код 200.
Значит мои потуги на C# были не напрасны.
P.S. Линия 7.6.0
Да, анализ изображения это единственный надежный способ узнать, что показывает камера. Других способов быть не может. Web сервер отдает 500-ю ошибку, когда камера становится недоступна физически. Это я проверял.
Но если камера вещает черный квадрат в поток, то web сервер никак не узнает о том, что с камерой проблемы.
Предложенный способ по сути является аналогом обычных пингов, с единственным удобством, что все проверки идут с самого сервера Линии. Нет необходимости прокидывать маршруты и доступ с zabbix сервера до каждой камеры. Достаточно сделать доступ только к самомой Линии.
Это для аналоговых линий. Сама Линия показывает, что камера не доступна, а вот по api чёрный квадрат. Такие вещи можно дёргать обычным curl и смотреть размер. На всех не работающих будет один очень маленький размер.