Привет всем.
Написал для своих нужд легковесный внешний чекер, который в итоге перерос в облачный SaaS-проект мониторинга - PingZen. Сейчас расширил функционал и добавил полноценный мониторинг IP-камер/видеорегистраторов по RTSP, а также Heartbeat-чекер для крон-задач и бэкапов.
Хочу показать техническую реализацию и получить конструктивный пинок от местного комьюнити по поводу архитектуры.
Как это устроено под капотом:
-
Мониторинг RTSP (без протухания сессий) Вместо того чтобы гонять FFmpeg/ffprobe по крону или вешать тяжелые шаблоны на Zabbix, чекер работает на стыке сетевого и медийного анализа. На первом уровне шлем OPTIONS и DESCRIBE по RTSP (раз в 1-15 минут), проверяя сокет, порт 554, авторизацию (Basic/Digest) и пути. На втором уровне (раз в 5-60 минут) шлем SETUP и PLAY, дергаем до 10 секунд потока и закрываем через TEARDOWN. Видео на сервере принципиально не декодируется ради экономии ресурсов (и приватности) - частоту кадров (FPS), битрейт и дропы пакетов считаем парсингом заголовков RTP-пакетов.
-
Обход NAT и серых IP Для локальных сетей, где пробрасывать RTSP-порты наружу - это дыра в безопасности, сделали приватные чекеры. Это легковесный Docker-контейнер (висит в локалке с камерами), который сам опрашивает устройства по RTSP и пушит статус-репорты на центральный сервер по 443/TCP. На роутере ничего открывать не нужно.
-
Heartbeat-мониторинг (Cron / Backups) Работает по принципу inverted check. Не мы стучимся на сервер, а локальный скрипт/бот после успешного выполнения шлет curl-запрос. Если пинг вовремя не пришел - триггерится алерт. Задержки (Grace Period) настраиваются, чтобы не ловить ложные алерты при кратковременном моргании сети.
Алерты отдаем в Telegram, Slack, Discord или сырыми Webhook-ами.
Проект некоммерческий, пилю в одиночку. На бесплатном тарифе отдаю до 55 мониторов с минутным интервалом проверки (каждый канал NVR считается за один монитор). Карты не прошу, enterprise-ограничений на протоколы нет.
Ссылка на генератор RTSP-ссылок (сделали как бесплатную тулзу, работает чисто на фронте в браузере, пароли в сеть не шлет): https://pingzen.dev/ru/rtsp-url-generator Лендинг по камерам: https://pingzen.dev/ru/ip-camera-monitoring
Собственно, вопросы к сообществу:
- Имеет ли смысл добавлять поддержку ONVIF для автопоиска камер приватным чекером в локалке, или сисадмины все равно все пути руками вбивают через CSV?
- Насколько критично отсутствие поддержки H.265 для генерации скриншота по запросу в браузере (сейчас key-frame декодируется js-ом на фронте только для H.264)?
- Что бы вы докрутили в логику алертов при деградации RTSP-потока (когда битрейт падает, но сессия не рвется)?
Буду рад здоровой критике и юзкейсов.
