На странице описывается архитектура системы VoIP Monitor. В ней рассказывается о ключевых компонентах системы и объясняются основные модели развертывания: от простой установки «все в одном» до сложных распределенных решений для мониторинга нескольких объектов.
Система VoIP Monitor состоит из трёх основных логически разделённых компонентов (VoIP_Monitor Sensor(Slave)/Sensor(Master)/UI(Web_GUI)), которые могут работать на одном сервере или могут быть распределенными между несколькими машинами для обеспечения масштабируемости. Для первоначальной конфигурации/изменений/обновлений также требуется VoIP_Monitor Install Server.
![]()
Сенсор (Sniffer)
Сенсоры логически разделяются на Master и Slave. Основная задача slave-сенсора — прослушивание сетевого интерфейса, сбор данных о вызовах и передача их на master.
Slave является пассивным сетевым анализатором по принципу работы схожим с такими инструментами, как tcpdump или wireshark. Выполняет следующие операции в режиме реального времени:
Master играет роль центрального обработчика информации. Его основной функционал:
Получение данных о вызовах от одного или нескольких slave-сенсоров;
Хранение базы данных. VoIPmonitor использует базу данных, совместимую с MySQL, для хранения записей о звонках (CDR), показателей качества связи и системных данных. Все взаимодействия между графическим интерфейсом/сенсором и базой данных осуществляются через стандартный TCP-интерфейс MySQL.
При отсутствии отдельно вынесенных slave-сенсоров master выполняет функции slave.
Важной функцией сенсоров также является сохранение данных о вызовах (как SIP-, так и RTP-потоки) на локальном диске в стандартном формате PCAP. Это позволяет проводить детальное устранение неполадок на уровне пакетов и воспроизводить вызовы прямо из графического интерфейса. Может выполняться как на slave, так и на master-сенсоре.
Веб-графический интерфейс (UI)
Веб-интерфейс — это основной уровень представления и управления. Он предоставляет мощный интерфейс для анализа вызовов, просмотра статистики и настройки системы. Он может работать на том же сервере, что и база данных и сенсор или на полностью выделенном компьютере.
Install server — виртуальная машина или сервер, на котором выполняется подготовка к установке Voip Monitor и установка или добавление дополнительных сенсоров. Физически может находиться на виртуальной машине/сервере, где устанавливается master-сенсор или же на любом другом, имеющим доступность по протоколу SSH к другим серверам в составе Voip Monitor.
Для использования необходимы операционные системы:
|
Системные требования к slave- и master-сенсорам отличаются ввиду различий выполняемого ими функционала. Ниже приведены таблицы с указанием необходимых ресурсов в зависимости от количества одновременных вызовов.
| Одновременные вызовы | CPU | RAM (ГБ) | Сеть (Гбит/с) |
|---|---|---|---|
| 50 | 1 | 4 | 1 |
| 200 | 1 | 6 | 1 |
| 500 | 2 | 8 | 1 |
| 1000 | 2 | 10 | 1 |
| 2000 | 4 | 12 | 1-10 |
| 5000 | 6 | 16 | 10 |
| Одновременные вызовы | CPU | RAM (ГБ) | Сеть (Гбит/с) | Диск RTP (ТБ/неделя) | Диск БД (ГБ/неделя) |
|---|---|---|---|---|---|
| 50 | 1 | 4 | 1 | 0.1 | 1 |
| 200 | 2 | 8 | 1 | 0.5 | 1.5 |
| 500 | 4 | 16 | 1 | 1.25 | 3.5 |
| 1000 | 6 | 32 | 1 | 2.5 | 7 |
| 2000 | 8 | 64 | 1-10 | 5 | 14 |
| 5000 | 16 | 128 | 10 | 10 | 36 |
Данные таблицы применимы для случая, когда RTP сохраняется централизованно на master-сервере (packetbuffer_sender=yes). Ресурсы slave-сенсора требуются на сбор информации о вызовах и создание метаданных без сохранения RTP. В случае необходимости локального сохранения pcap на slave-сенсоре (packetbuffer_sender=no) следует ориентироваться на вторую таблицу в зависимости от того, сколько одновременных вызовов обрабатывает конкретный сенсор. При этом ресурсы диска для хранения базы данных в обоих случаях будут относиться к master-сенсору.
Для наиболее точного определения необходимого размера диска можно выполнить расчет следующим образом — 2 КБ требуется на одну запись CDR при включенном сжатии таблиц (mysqlcompress = yes). Емкость диска для хранения RTP можно вычислить из расчета:
2 МБ/минута на звонок × количество одновременных вызовов × часов в день × дней хранения.
Также стоит отметить, что сохранение RTP не является обязательным, оно регулируется параметром savertp в конфигурационном файле master-сенсора. Но при отключении данного параметра прослушивание вызовов не будет возможным.
Для отслеживания работы нескольких VoIP-серверов есть три основных варианта архитектуры в зависимости от топологии вашей сети и требований:
Если оба VoIP-сервера находятся в одной локальной сети (в одной стойке/здании), проще всего направить трафик на один выделенный сенсор.
Для более крупных или географически распределённых сред рекомендуется использовать распределённую модель. Как правило, она включает в себя центральный сервер (Master) с графическим интерфейсом (UI либо сервер UI на отдельной машине) и базой данных, который собирает данные с одного или нескольких удалённых сенсоров (Slave). Удалённые сенсоры можно настроить двумя основными способами в зависимости от ресурсов, доступных на устройстве, на котором осуществляется сбор трафика.
Установите полное приложение VoIP Monitor (сенсор + локальная база данных + дополнительный локальный графический интерфейс) на каждый из серверов VoIP.
Проект VoIP Monitor состоит из двух модулей VoIP monitor core и VoIP monitor UI.
Каждый из них разворачивается в пяти Docker-контейнерах, которые работают на хостовой сети, поэтому все последующее описание портов и файловой системы относится именно к тому хосту, на котором находится модуль.
Клиентский модуль представляет собой три Docker-контейнера, описание которых приведено ниже.
API\BFF (NestJS)
Осуществляется взаимодействие с VoIP Monitor core:
Таблицы, которые были созданы:
Client (Angular)
Отображает интерфейс.
Authorization (Keycloak):
Предоставляется базовый функционал авторизации, есть один пользователь по умолчанию, можно создать дополнительных в панели администратора Keycloak. Связан только с контейнером Client (Angular).
Модуль VoIP Monitor core представляет собой два Docker-контейнера:
![]()
UI ставится на удаленный от VoIP core хост, подключается к нему по SSH и "пересылает" нужные порты (активные звонки\история вызовов) на свои порты. Файловую систему читает c удаленного хоста VoIP core для снятия детализации по SIP.
![]()
UI ставится на локальный VoIP core хост, слушает свои порты, поскольку они заняты VoIP core. Файловую систему читает свою для снятия детализации по SIP.
![]()
UI ставится на локальный VoIP core хост (master), слушает свои порты, поскольку они заняты VoIP core. Файловую систему читает свою для снятия детализации по SIP. Удаленные slave-сенсоры отсутствуют.
![]()