...
Условия задаются в виде фильтров в файле /usr/local/FlashphonerWebCallServer/conf/rels_trap.json
| Code Block |
|---|
|
{
"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 |
|---|
|
{
"mediaSession":
[
{
"ips": ["127.0.0.1", "192.168.0.0/24"],
...
},
...
],
...
} |
Если в условиях фильтрации указаны и список адресов, и имя потока, то данные будут собираться только для потока, имя которого и адрес публикующего клиента подпадают под заданные условия
| Code Block |
|---|
|
{
"mediaSession":
[
...,
{
"ips": ["127.0.0.1", "192.168.0.0/24"]192.168.2.0/24"],
"streamName": ".*\\-screen",
...
},
...
],
...
} |
Если в условиях фильтрации типа данных MEDIA_SESSION MIXER указаны и список адресовимя микшера, и имя публикуемого входящего потока микшера, то данные будут собираться только для сбор данных для этого микшера начнется только после добавления в него потока, имя которого и адрес публикующего клиента подпадают под заданные условиясоответствует заданному условию
| Code Block |
|---|
|
{
"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 |
|---|
|
{
...,
"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 |
|---|
|
select timestamp,ip,sessionId,mediaSessionId,streamName,dictGetString('wcs.DictionaryStreamEvents','type', eventType) as eventType from wcs.StreamEvent where streamName = 'test' |
| Code Block |
|---|
|
select timestamp,ip,sessionId,dictGetString('wcs.DictionaryConnectionEvents','type', eventType) as eventType from wcs.ConnectionEvent |
| Code Block |
|---|
|
select timestamp,ip,nodeId,dictGetString('wcs.DictionaryCDNEvents','type', eventType) as eventType,eventPayload from wcs.CDNEvent |
Примеры запросов для сборок WCS 5.2.1999 и новее
| Code Block |
|---|
|
select timestamp,ip,sessionId,mediaSessionId,streamName,dictGetString('wcs.DictionaryStreamEvents','type', eventType) as eventType from test1flashphonercom_192168065_521999.StreamEvent where streamName = 'test' |
| Code Block |
|---|
|
select timestamp,ip,sessionId,dictGetString('wcs.DictionaryConnectionEvents','type', eventType) as eventType from test1flashphonercom_192168065_521999.ConnectionEvent |
| Code Block |
|---|
|
select timestamp,ip,nodeId,dictGetString('wcs.DictionaryCDNEvents','type', eventType) as eventType,eventPayload from test1flashphonercom_192168065_521999.CDNEvent |
Запись данных в файлы
Не всегда имеется возможность развернуть сервер ClickHouse для мониторинга в уже работающей инфраструктуре. В связи с этим, в сборке 5.2.2058 добавлена возможность записи данных в текстовые файлы, которые затем могут быть импортированы в БД ClickHouse для дальнейшего анализа.
Запись файлов включена по умолчанию настройкой
| Code Block |
|---|
|
rels_client_type=FILE |
Данные записываются в каталог /usr/local/FlashphonerWebCallServer/logs/rels. В этом каталоге создается подкаталог с именем БД, сформированным из имени хоста, IP адреса сервера и версии WCS. В свою очередь, в этот каталог помещаются текстовые файлы для каждой таблицы данных
| Code Block |
|---|
|
/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 |
|---|
|
select timestamp,ip,sessionId,dictGetString('wcs.DictionaryConnectionEvents','type', eventType) as eventType from wcs.ConnectionEvent |
| Code Block |
|---|
|
select timestamp,ip,nodeId,dictGetString('wcs.DictionaryCDNEvents','type', eventType) as eventType,eventPayload from wcs.CDNEvent |
Примеры запросов для сборок WCS 5.2.1999 и новее
| Code Block |
|---|
|
select timestamp,ip,sessionId,mediaSessionId,streamName,dictGetString('wcs.DictionaryStreamEvents','type', eventType) as eventType from test1flashphonercom_192168065_521999.StreamEvent where streamName = 'test' |
| Code Block |
|---|
|
select timestamp,ip,sessionId,dictGetString('wcs.DictionaryConnectionEvents','type', eventType) as eventType from test1flashphonercom_192168065_521999.ConnectionEvent |
| Code Block |
|---|
|
select timestamp,ip,nodeId,dictGetString('wcs.DictionaryCDNEvents','type', eventType) as eventType,eventPayload from test1flashphonercom_192168065_521999.CDNEvent |
Запись данных в файлы
Не всегда имеется возможность развернуть сервер ClickHouse для мониторинга в уже работающей инфраструктуре. В связи с этим, в сборке 5.2.2058 добавлена возможность записи данных в текстовые файлы, которые затем могут быть импортированы в БД ClickHouse для дальнейшего анализа.
Запись файлов включена по умолчанию настройкой
| Code Block |
|---|
|
rels_client_type=FILE |
Данные записываются в каталог /usr/local/FlashphonerWebCallServer/logs/rels. В этом каталоге создается подкаталог с именем БД, сформированным из имени хоста, IP адреса сервера и версии WCS. В свою очередь, в этот каталог помещаются текстовые файлы для каждой таблицы данных
| Code Block |
|---|
|
/usr/local/FlashphonerWebCallServer/logs/rels/
└── testflashphonercom_192168039_522060
├── ConnectionEvent.csv
├── ConnectionEvent.json
├── StreamEvent.csv
└── StreamEvent.json |
Каждая таблица состоит из двух файлов:
- json файл содержит описание типов данных таблицы, которое требуется для импорта в ClickHouse
- csv файл содержит сами данные, колонки данных разделяются запятыми
Импорт данных из файлов в БД ClickHouse
Для импорта данных в БД ClickHouse требуется установленный WCS сервер (например, в тестовой среде). В состав сервера входит инструмент для импорта, запускаемый следующим образом
| Code Block |
|---|
|
/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 |
|---|
|
rels_client_type=HTTP
rels_database_address=database.flashphoner.com:8123
rels_database_properties=user=wcs&password=wcs |
При использовании БД Clickhouse 24 и новее, для импорта будет использован механизм дедупликации данных, чтобы повторно не добавлять в таблицы полностью совпадающие строки, если инструмент импорта был дважды запущен на одних и тех же данных.