Централизованный сбор статистики потоков и событий CDN в БД MySQL¶
Описание¶
При управлении большим количеством WCS серверов, необходим сборстатистики медиа потоков для оценки качества вещания. Если серверы объединены в CDN, сбор информации о событиях в CDN также может быть полезен для последующей отладки.
В связи с этим, в сборке 5.2.749 добавлена возможность централизованного сбора статистики медиа потоков и событий в CDN.
Архитектура¶
Функцию сервера сбора статистики можно назначить одному из WCS серверов, при этом он продолжает выполнять основные задачи (публикация и воспроизведение медиа потоков). Остальные серверы при этом передают ему данные статистики при помощи специального протокола FREP, основанного на TCP. Полученные данные сервер статистики помещает в БД MySQL.
Роль сервера статистики может быть назначена любому WCS серверу. Теоретически, каждый из WCS серверов в сети может быть сервером сбора статистики, и собирать данные непосредственно на общий MySQL сервер, но в этом случае нагрузка на сеть может сильно возрасти.
Рекомендуется назначать роль сервера статистики на Controller сервер в CDN.
Описание таблиц данных¶
Данные собираются в следующие таблицы
Статистика клиентский сессий¶
Поле | Тип | Описание |
---|---|---|
serverIp | varchar(15) | IP адрес WCS |
start | datetime | Время установки соединения |
sessionId | varchar(300) | Идентификатор сессии |
status | varchar(30) | Статус сессии |
info | varchar(300) | Причина, для статуса FAILED |
duration | int(11) | Длительность сессии |
Данные статистики клиентских сессий высылаются в начале и в конце сессии.
Статистика потоков¶
Поле | Тип | Описание |
---|---|---|
serverIp | varchar(15) | IP адрес WCS |
start | datetime | Время начала медиасессии |
sessionId | varchar(300) | Идентификатор сессии |
mediaProvider | varchar(30) | Медиапровайдер |
name | varchar(300) | Имя потока |
mediaSessionId | varchar(300) | Идентификатор медиасессии |
duration | int(32) | Длительность медиасессии |
status | varchar(30) | Статус медиасессии |
info | varchar(300) | Причина, для статуса FAILED |
type | varchar(100) | Тип медиасессии (PUBLISH или SUBSCRIBE) |
subscribers | int(16) | Количество подписчиков |
audioLost | int(2) | Количество потерянных аудиопакетов |
audioRate | int(4) | Битрейт аудио |
audioCodec | varchar(13) | Аудио кодек |
videoWidth | int(2) | Ширина картинки |
videoHeight | int(2) | Высота картинки |
videoPLI | int(2) | Количество PLI запросов |
videoNack | int(2) | Количество NACK |
videoRate | int(4) | Битрейт видео |
videoFPS | int(2) | Частота кадров видео |
videoBframes | int(2) | Количество B-фреймов |
videoCodec | varchar(4) | Видео кодек |
localSdp | varbinary(1500) | SDP на стороне сервера |
remoteSdp | varbinary(1500) | SDP на стороне браузера |
Данные статистики потоков высылаются в начале публикации или воспроизведения потока и по его окончании.
Статистика событий CDN¶
Поле | Тип | Описание |
---|---|---|
serverIp | varchar(15) | IP адрес WCS |
date | datetime | Дата и время фиксации события |
ts | varchar(30) | Метка времени CDN сигналинга |
srcNode | varchar(30) | Источник CDN сигналинга |
dstNode | varchar(30) | Приемник CDN сигналинга |
event | varchar(60) | Тип события CDN |
payload | varbinary(1500) | Содержимое сообщения CDN сигналинга |
Данные событий CDN высылаются непосредственно при возникновении события. В связи с этим, по умолчанию сбор статистки CDN отключен, и не рекомендуется его длительное использование в промышленной эксплуатации, только для целей отладки.
Настройка¶
Настройка MySQL сервера¶
Установка¶
Приведем пример установки MySQL на Centos 7
1. Скачайте необходимый репозиторий
2. Установите репозиторий
3. Установите MySQL
4. Запустите MySQL
Конфигурация¶
1. Создайте базу данных и пользователя для записи статистики
CREATE DATABASE wcs;
CREATE USER 'wcs'@'localhost' IDENTIFIED BY 'wcs';
GRANT ALL PRIVILEGES ON wcs.* TO 'wcs'@'localhost';
FLUSH PRIVILEGES;
2. Импортируйте схему базы данных
Фйал схемы БД wcs.sql
-- MySQL dump 10.13 Distrib 8.0.20, for Linux (x86_64)
--
-- Host: 172.17.0.2 Database: wcs
-- ------------------------------------------------------
-- Server version 5.7.31
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `cdn`
--
DROP TABLE IF EXISTS `cdn`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `cdn` (
`serverIp` varchar(15) NOT NULL,
`date` datetime NOT NULL,
`ts` varchar(30) NOT NULL,
`srcNode` varchar(30) NOT NULL,
`dstNode` varchar(30) NOT NULL,
`event` varchar(60) NOT NULL,
`payload` varbinary(1500) NOT NULL,
PRIMARY KEY (`ts`,`srcNode`,`event`,`dstNode`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `conndr`
--
DROP TABLE IF EXISTS `conndr`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `conndr` (
`serverIp` varchar(15) NOT NULL,
`start` datetime NOT NULL,
`sessionId` varchar(300) NOT NULL,
`status` varchar(30) NOT NULL,
`info` varchar(300) DEFAULT NULL,
`duration` int(11) DEFAULT NULL,
PRIMARY KEY (`sessionId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `sdr`
--
DROP TABLE IF EXISTS `sdr`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `sdr` (
`serverIp` varchar(15) NOT NULL,
`start` datetime NOT NULL,
`sessionId` varchar(300) NOT NULL,
`mediaProvider` varchar(30) NOT NULL,
`name` varchar(300) NOT NULL,
`mediaSessionId` varchar(300) NOT NULL,
`duration` int(32) DEFAULT NULL,
`status` varchar(30) NOT NULL,
`info` varchar(300) DEFAULT NULL,
`type` varchar(100) DEFAULT NULL,
`subscribers` int(16) DEFAULT NULL,
`audioLost` int(2) DEFAULT NULL,
`audioRate` int(4) DEFAULT NULL,
`audioCodec` varchar(13) DEFAULT NULL,
`videoWidth` int(2) DEFAULT NULL,
`videoHeight` int(2) DEFAULT NULL,
`videoPLI` int(2) DEFAULT NULL,
`videoNack` int(2) DEFAULT NULL,
`videoRate` int(4) DEFAULT NULL,
`videoFPS` int(2) DEFAULT NULL,
`videoBframes` int(2) DEFAULT NULL,
`videoCodec` varchar(4) DEFAULT NULL,
`localSdp` varbinary(1500) DEFAULT NULL,
`remoteSdp` varbinary(1500) DEFAULT NULL,
PRIMARY KEY (`sessionId`,`mediaSessionId`,`name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2020-08-26 11:30:24
Настройка WCS¶
Поддержка сбора статистики включается настройкой
Роль (клиент или сервер) задается настройкой (по умолчанию CLIENT)
Адрес сервера статистики задается настройкой
Эта настройка должна быть указана на клиенте.
URI базы данных задается настройкой
Эта настройка должна быть указана на сервере статистики.
Порт для передачи статистики задается настройкой (по умолчанию 8085)
Ключ авторизации на сервере статистики задается настройкой
Эта настройка должна быть указана одинаково на клиентах и сервере.
Применение настроек¶
Все настройки могут быть применены без перезапуска сервера с использованием команды интерфейса командной строки
В этом случае, рекомендуется изменять эти настройки следующим образом:
1. Отключите сбор статистики на данном сервере
2. Перезагрузите настройки
3. Установите необходимые значения настроек и включите сбор статистики
4. Перезагрузите настройки
Фильтрация сбора данных¶
Высылаемые данные могут быть отфильтрованы при помощи настройки
Возможные значения фильтров
Значение | Описание |
---|---|
CONNECT | Данные об установке соединений |
CONNECTION_STATUS_EVENT | Данные статуса сессии |
STREAM | Данные о захвате/воспроизведении потока |
STREAM_STATUS_EVENT | Данные статуса потока |
В целях отладки, можно включить отправку всех событий CDN
либо отфильтровать события
Значение | Описание |
---|---|
ROLE_REFRESH | Роль узла CDN |
NODE_REFRESH | Информация об узле CDN |
ROUTE_REFRESH | Информация о маршрутах воспроизведения потоков |
ROUTE_UPDATE | Обновление маршрутов воспроизведения потоков |
EXTENDED_ROUTE_UPDATE | Расширенная информация об обновлении маршрутов |
EXTENDED_ROUTE_REFRESH | Расширенная информация о маршрутах |
VERSION_REFRESH | Информация о версии CDN |
STATE_REFRESH | Информация о статусе узла CDN |
GROUP_REFRESH | Информация о группе CDN |
PROFILE_UPDATE | Обновление профилей транскодирования |
STREAM_ACCESS_LIST_REFRESH | Обновление списка ключей доступа к потоку |
STREAM_ACCESS_LIST_NODE_ID_UPDATE | Обновление идентификатора узла для сопоставления ключей доступа к потоку |
Выборки информации из БД¶
Выборки данных из таблиц MySQL производятся при помощи SQL запросов
+---------------+---------------------+-------------+------------+------------+------------+
| serverIP | start | name | status | audioCodec | videoCodec |
+---------------+---------------------+-------------+------------+------------+------------+
| 95.191.131.64 | 2020-08-10 13:44:00 | test | PUBLISHING | opus | H264 |
| 95.191.131.64 | 2020-08-10 13:44:10 | test | PLAYING | opus | H264 |
+---------------+---------------------+-------------+------------+------------+------------+
2 rows in set (0.00 sec)
Выборка данных SDP¶
Из-за большого объема текста, SDP хранятся в БД в сжатом виде. Для того, чтобы распаковать данные при выборке, используются утилиты xxd и zlib-flate