Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • MEDIA_SESSION
  • MIXER
  • HLS_SEGMENTER
  • HLS_CLIENT (начиная со сборки 5.2.2091)

  • RTMP_IN_BUFFER (начиная со сборки 5.2.2091)
  • RTP_SYNCHRONIZATION (начиная со сборки 5.2.2091)

Условия задаются в виде фильтров в файле /usr/local/FlashphonerWebCallServer/conf/rels_trap.json 

Code Block
languagejs
themeRDark
{
    "mediaSession":
    [
        {
            "ips": ["127.0.0.1"],
            "frequency": "1000ms"
        },
        {
            "ips": ["192.168.0.0/24", "192.168.2.0/24"],
            "streamName": ".*\\-screen"
        },
        {
            "ips": ["192.168.0.101/32"],
            "streamName": "test.*",
            "frequency": "100th"
        }
    ],

    "mixer":
    [{
             { "streamName": "test.*",
                "name   "mediaType": "conference\\-.*["publish", "play"]
        }
    "],

    "mixer":
    [
        {
            "name": "conference\\-.*",
            "streamName": "user.*",
            "frequency": "1000ms"
        }
    ],

    "hlsSegmenter":
    [
        {
            "streamId": "test.*"
        }
    ]
}

Здесь:

  • mediaSession - блок фильтров для отправки данных MEDIA_SESSION
    • ips - список IP адресов публикующих клиентов
    • streamName - маска имени публикуемого потока в виде регулярного выражения
    • frequency - частота сбора данных для потока, подпадающего под фильтр
  • mixer - блок фильтров для отправки данных MIXER
    • name - маска имени микшера в виде регулярного выражения
    • streamName - маска имени входящего потока микшера в виде регулярного выражения
    • frequency - частота сбора данных для микшера, подпадающего под фильтр
  • hlsSegmenter - блок фильтров для отправки данных HLS_SEGMENTER
    • streamId - маска имени HLS потока в виде регулярного выражения

...

,

    "hlsClient":[
        {
            "streamId": "test.*"
        }
    ],
    
    "rtpSynchronization":[
        {
            "ips":["192.168.0.0/24"],
            "streamName": "test.*"
        }
    ],

    "rtmpInBuffer":[
        {
            "ips":["192.168.0.0/24"],
            "streamName": "test.*"
        }
    ]
}

Здесь:

  • mediaSession - блок фильтров для отправки данных MEDIA_SESSION
    • ips - список IP адресов клиентов
    • streamName - маска имени в виде регулярного выражения
    • type - тип сессии: "publish", "play"
    • frequency - частота сбора данных для потока, подпадающего под фильтр
  • mixer - блок фильтров для отправки данных MIXER
    • name - маска имени микшера в виде регулярного выражения
    • streamName - маска имени входящего потока микшера в виде регулярного выражения
    • frequency - частота сбора данных для микшера, подпадающего под фильтр
  • hlsSegmenter - блок фильтров для отправки данных HLS_SEGMENTER
    • streamId - маска имени HLS потока в виде регулярного выражения
  • hlsClient - блок фильтров для отправки данных HLS_CLIENT
    • streamId - маска имени HLS потока в виде регулярного выражения
  • rtpSynchronization - блок фильтров для отправки данных RTP_SYNCHRONIZATION
    • ips - список IP адресов публикующих клиентов
    • streamName - маска имени публикуемого потока в виде регулярного выражения
  • rtmpInBuffer - блок фильтров для отправки данных RTMP_IN_BUFFER
    • ips - список IP адресов публикующих клиентов
    • streamName - маска имени публикуемого потока в виде регулярного выражения

В списке IP адресов для фильтрации публикующих клиентов могут быть указаны как точные IP адреса, так и маски адресов в CIDR формате

Code Block
languagejs
themeRDark
{
    "mediaSession":
    [
        {
            "ips": ["127.0.0.1", "192.168.0.0/24"],
            ...
        },
        ...
    ],
    ...
}

Если в условиях фильтрации указаны и список адресов, и имя потока, то данные будут собираться только для потока, имя которого и адрес публикующего клиента подпадают под заданные условия

Code Block
languagejs
themeRDark
{
    "mediaSession":
    [
        ...,
        {
            "ips": ["127.0.0.1", "192.168.0.0/24"]192.168.2.0/24"],
            "streamName": ".*\\-screen",
            ...
        },
        ...
    ],
    ...
}

Если в условиях фильтрации типа данных MEDIA_SESSION MIXER указаны и список адресовимя микшера, и имя публикуемого входящего потока микшера, то данные будут собираться только для сбор данных для этого микшера начнется только после добавления в него потока, имя которого и адрес публикующего клиента подпадают под заданные условиясоответствует заданному условию

Code Block
languagejs
themeRDark
{
    "mediaSession":
    [
        ...,

    "mixer":
    {[
            "ips": ["192.168.2.0/24"],  {
            "streamNamename": ".*conference\\-screen.*",
            ...
"streamName": "user.*",
             },"frequency": "1000ms"
        ...}
    ],

    ...
}

Если в условиях фильтрации типа данных MIXER указаны и имя микшера, и имя входящего потока микшера, то сбор данных для этого микшера начнется только после добавления в него потока, имя которого соответствует заданному условиюПараметр frequency определяет частоту сбора данных для этого типа:

  • "frequency": "100ms" - данные собираются каждые 100 мс
  • "frequency": "100th" - данные собираются каждые 100 полученных пакетов

Изменения в файле rels_trap.json не требуют перезапуска сервера, но применяются к новым публикациям, микшерам и HLS потокам.

Выборки информации из БД

Выборки информации из БД производятся при помощи SQL запросов в клиенте ClickHouse

Примеры запросов для сборок WCS до 5.2.1999

Code Block
languagejssql
themeRDark
{
    ...,

    "mixer":
    [
        {
            "name": "conference\\-.*",
            "streamName": "user.*",
            "frequency": "1000ms"
        }
    ],

    ...
}

Параметр frequency определяет частоту сбора данных для этого типа:

  • "frequency": "100ms" - данные собираются каждые 100 мс
  • "frequency": "100th" - данные собираются каждые 100 полученных пакетов

Изменения в файле rels_trap.json не требуют перезапуска сервера, но применяются к новым публикациям, микшерам и HLS потокам.

Выборки информации из БД

Выборки информации из БД производятся при помощи SQL запросов в клиенте ClickHouse

Примеры запросов для сборок WCS до 5.2.1999

Code Block
languagesql
themeRDark
select timestamp,ip,sessionId,mediaSessionId,streamName,dictGetString('wcs.DictionaryStreamEvents','type', eventType) as eventType from wcs.StreamEvent where streamName = 'test'
Code Block
languagesql
themeRDark
select timestamp,ip,sessionId,dictGetString('wcs.DictionaryConnectionEvents','type', eventType) as eventType from wcs.ConnectionEvent
Code Block
languagesql
themeRDark
select timestamp,ip,nodeId,dictGetString('wcs.DictionaryCDNEvents','type', eventType) as eventType,eventPayload from wcs.CDNEvent

Примеры запросов для сборок WCS 5.2.1999 и новее

Code Block
languagesql
themeRDark
select timestamp,ip,sessionId,mediaSessionId,streamName,dictGetString('wcs.DictionaryStreamEvents','type', eventType) as eventType from test1flashphonercom_192168065_521999.StreamEvent where streamName = 'test'
Code Block
languagesql
themeRDark
select timestamp,ip,sessionId,dictGetString('wcs.DictionaryConnectionEvents','type', eventType) as eventType from test1flashphonercom_192168065_521999.ConnectionEvent
Code Block
languagesql
themeRDark
select timestamp,ip,nodeId,dictGetString('wcs.DictionaryCDNEvents','type', eventType) as eventType,eventPayload from test1flashphonercom_192168065_521999.CDNEvent

Запись данных в файлы

Не всегда имеется возможность развернуть сервер ClickHouse для мониторинга в уже работающей инфраструктуре. В связи с этим, в сборке 5.2.2058 добавлена возможность записи данных в текстовые файлы, которые затем могут быть импортированы в БД ClickHouse для дальнейшего анализа.

Запись файлов включена по умолчанию настройкой

Code Block
themeRDark
rels_client_type=FILE

Данные записываются в каталог /usr/local/FlashphonerWebCallServer/logs/rels. В этом каталоге создается подкаталог с именем БД, сформированным из имени хоста, IP адреса сервера и версии WCS. В свою очередь, в этот каталог помещаются текстовые файлы для каждой таблицы данных

Code Block
themeRDark
/usr/local/FlashphonerWebCallServer/logs/rels/
└── testflashphonercom_192168039_522060
    ├── ConnectionEvent.csv
    ├── ConnectionEvent.json
    ├── StreamEvent.csv
    └── StreamEvent.json

Каждая таблица состоит из двух файлов:

...

select timestamp,ip,sessionId,mediaSessionId,streamName,dictGetString('wcs.DictionaryStreamEvents','type', eventType) as eventType from wcs.StreamEvent where streamName = 'test'
Code Block
languagesql
themeRDark
select timestamp,ip,sessionId,dictGetString('wcs.DictionaryConnectionEvents','type', eventType) as eventType from wcs.ConnectionEvent
Code Block
languagesql
themeRDark
select timestamp,ip,nodeId,dictGetString('wcs.DictionaryCDNEvents','type', eventType) as eventType,eventPayload from wcs.CDNEvent

Примеры запросов для сборок WCS 5.2.1999 и новее

Code Block
languagesql
themeRDark
select timestamp,ip,sessionId,mediaSessionId,streamName,dictGetString('wcs.DictionaryStreamEvents','type', eventType) as eventType from test1flashphonercom_192168065_521999.StreamEvent where streamName = 'test'
Code Block
languagesql
themeRDark
select timestamp,ip,sessionId,dictGetString('wcs.DictionaryConnectionEvents','type', eventType) as eventType from test1flashphonercom_192168065_521999.ConnectionEvent
Code Block
languagesql
themeRDark
select timestamp,ip,nodeId,dictGetString('wcs.DictionaryCDNEvents','type', eventType) as eventType,eventPayload from test1flashphonercom_192168065_521999.CDNEvent

Запись данных в файлы

Не всегда имеется возможность развернуть сервер ClickHouse для мониторинга в уже работающей инфраструктуре. В связи с этим, в сборке 5.2.2058 добавлена возможность записи данных в текстовые файлы, которые затем могут быть импортированы в БД ClickHouse для дальнейшего анализа.

Запись файлов включена по умолчанию настройкой

Code Block
themeRDark
rels_client_type=FILE

Данные записываются в каталог /usr/local/FlashphonerWebCallServer/logs/rels. В этом каталоге создается подкаталог с именем БД, сформированным из имени хоста, IP адреса сервера и версии WCS. В свою очередь, в этот каталог помещаются текстовые файлы для каждой таблицы данных

Code Block
themeRDark
/usr/local/FlashphonerWebCallServer/logs/rels/
└── testflashphonercom_192168039_522060
    ├── ConnectionEvent.csv
    ├── ConnectionEvent.json
    ├── StreamEvent.csv
    └── StreamEvent.json

Каждая таблица состоит из двух файлов:

  • json файл содержит описание типов данных таблицы, которое требуется для импорта в ClickHouse
  • csv файл содержит сами данные, колонки данных разделяются запятыми

Импорт данных из файлов в БД ClickHouse

Для импорта данных в БД ClickHouse требуется установленный WCS сервер (например, в тестовой среде). В состав сервера входит инструмент для импорта, запускаемый следующим образом

Code Block
languagebash
themeRDark
/usr/local/FlashphonerWebCallServer/tools/rels_import.sh --dbpath=/usr/local/FlashphonerWebCallServer/logs/rels/testflashphonercom_192168039_522060

Здесь

  • dbpath - путь до каталога с файлами таблиц, которые нужно импортировать

Инструмент создаст БД с именем, соответствующим имени каталога с файлами таблиц, в данном примере testflashphonercom_192168039_522060.

Инструмент использует настройки подключения к БД ClickHouse из файла /usr/local/FlashphonerWebCallServer/conf/flashphoner.properties, например

Code Block
themeRDark
rels_client_type=HTTP
rels_database_address=database.flashphoner.com:8123
rels_database_properties=user=wcs&password=wcs

При использовании БД Clickhouse 24 и новее, для импорта будет использован механизм дедупликации данных, чтобы повторно не добавлять в таблицы полностью совпадающие строки, если инструмент импорта был дважды запущен на одних и тех же данных.