...
Поле | Тип | Описание |
---|
timestamp | UInt64 | Метка времени |
ip | IPv4 | Адрес сервера |
nodeId | String | Идентификатор узла (строка IP адреса) |
eventType | UInt64 | Идентификатор типа события |
eventPayload | String | Содержимое события |
Данные о метриках потоков (таблица
...
MediaSessionEvent)
В сборке 5.2.1896 добавлен сбор данных о метриках определенных потоков
Поле | Тип | Описание |
---|
timestamp | UInt64 | Метка времени |
ip | IPv4 | Адрес сервера |
mediaSessionId | String | Идентификатор медиасессий |
streamName | String | Имя потока |
videoProfileId | UInt32 | Идентификатор профиля видео |
videoWidth | UInt32 | Высота картинки |
videoHeight | UInt32 | Ширина картинки |
videoFrameRate | UInt32 | Частота кадров в секунду |
videoKframes | UInt64 | Количество ключевых кадров (I-frame) |
videoPframes | UInt64 | Количество промежуточных кадров (P-frame) |
videoBframes | UInt64 | Количество двунаправленных кадров (B-frames) |
videoRate | UInt64 | Битрейт видео, бит/с |
audioRate | UInt64 | Битрейт аудио, бит/с |
videoSyncTime | UInt64 | Значение синхронизации видео |
audioSyncTime | UInt64 | Значение синхронизации аудио |
videoTimestamp | UInt64 | Метка времени из видеопакета |
audioTimestamp | UInt64 | Метка времени из аудиопакета |
lastKeyFrameSyncTime | UInt64 | Значение синхронизации видео из последнего ключевого кадра |
sendNACK | UInt64 | Количество отправленных NACK |
recvNACK | UInt64 | Количество полученных NACK |
videoFramesLost | UInt64 | Количество потерянных кадров видео |
audioPacketsLost | UInt64 | Количество потерянных пакетов аудио |
audioPlaybackSpeed | Float32 | Скорость публикации/проигрывания аудио |
videoPlaybackSpeed | Float32 | Скорость публикации/проигрывания видео |
Данные о нарезке HLS потока (таблица
...
HlsStreamEvent)
В сборке 5.2.1917 добавлен сбор данных о событиях определенных HLS потоков
Поле | Тип | Описание |
---|
timestamp | UInt64 | Метка времени |
ip | IPv4 | Адрес сервера |
severity | UInt8 | Уровень события: INFO, WARNING, ERROR |
messageType | UInt16 | Тип события |
streamId | String | Идентификатор HLS потока (имя) |
variantName | String | Имя варианта качества |
segmentId | String | Идентификатор сегмента |
message | String | Описание события в том виде, как залогировано |
Данные о сегментах HLS потока (таблица
...
HlsSegmenterEvent)
В сборке 5.2.1917 добавлен сбор данных о сегментах определенных HLS потоков
Поле | Тип | Описание |
---|
timestamp | UInt64 | Метка времени |
ip | IPv4 | Адрес сервера |
streamId | String | Идентификатор HLS потока (имя) |
variantName | String | Имя варианта качества |
segmentId | String | Идентификатор сегмента |
segmentStartPts | UInt64 | Начальный PTS сегмента |
videoStartPts | UInt64 | Начальный PTS видео дорожки |
audioStartPts | UInt64 | Начальный PTS аудио дорожки |
videoWidth | UInt32 | Ширина картинки |
videoHeight | UInt32 | Высота картинки |
videoFrameCount | UInt32 | Количество кадров видео |
audioPacketCount | UInt32 | Количество пакетов аудио |
segmentDuration | UInt64 | Длительность сегмента, мс |
independent | Bool | Независимый сегмент |
gap | Bool | GAP сегмент |
discontinuity | Bool | DISCONTINUTY сегмент |
segmentInterval | UInt64 | Интервал между сегментами, мс |
partial | Bool | Частичный сегмент |
playbackSpeed | Float32 | Скорость проигрывания |
Данные о подписчиках HLS потока (таблица
...
HlsClientEvent)
В сборке 5.2.1929 добавлен сбор данных о подписчиках определенных HLS потоков
...
- CPU не менее 4 физических ядер, частотой не менее 3 ГГц, например Intel(R) Xeon(R) CPU E3-1246 v3 @ 3.50GHz
- RAM не менее 32 Гб
- HDD не менее 2 Тб
Установка ClickHouse
...
из rpm пакетов (CentOS, Red Hat etc)
1. Подключите официальный репозиторий
Code Block |
---|
|
sudo cat <<EOF > /etc/yum.repos.d/altinity_clickhouse.repo
[altinity_clickhouse]
name=altinity_clickhouse
baseurl=https://packagecloud.io/altinity/clickhouse/el/7/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/altinity/clickhouse/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
[altinity_clickhouse-source]
name=altinity_clickhouse-source
baseurl=https://packagecloud.io/altinity/clickhouse/el/7/SRPMS
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/altinity/clickhouse/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
EOF |
...
yum install -y yum-utils
sudo yum-config-manager --add-repo https://packages.clickhouse.com/rpm/clickhouse.repo |
2. Установите ClickHouse
Code Block |
---|
|
sudo yum install -y clickhouse-server clickhouse-client |
3. Запустите ClickHouse
Code Block |
---|
|
sudo systemctl enable clickhouse-server
sudo systemctl start clickhouse-server |
Установка ClickHouse из deb пакетов (Debian, Ubuntu etc)
1. Подключите официальный репозиторий
Code Block |
---|
|
sudo apt-get install -y apt-transport-https ca-certificates dirmngr
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 8919F6BD2B48D754
echo "deb https://packages.clickhouse.com/deb stable main" | sudo tee /etc/apt/sources.list.d/clickhouse.list
sudo apt-get update |
2. Установите ClickHouse
Code Block |
---|
|
sudo apt-get install -y clickhouse-server clickhouse-client |
3. Запустите ClickHouse
Code Block |
---|
|
sudo yumsystemctl enable -q makecache -y --enablerepo='altinity_clickhouse' |
3. Установите ClickHouse
Code Block |
---|
|
sudo yum install -y clickhouse-server clickhouse-client |
4. Запустите ClickHouse
Code Block |
---|
|
clickhouse-server
sudo systemctl start clickhouse-server |
Настройка ClickHouse для сборок WCS до 5.2.1999
1. Для того, чтобы прослушивать входящие запросы на всех интерфесах сервера, раскомментируйте строку в файле /etc/clickhouse-server/config.xml
...
Code Block |
---|
|
systemctl restart clickhouse-server |
Настройка ClickHouse для сборок WCS
...
Сбор данных в БД ClickHouse включается настройкой, в которой перечисляются типы отправляемых данных
Code Block |
---|
|
rels_enabled=CONNECTION,STREAM,CDN,MEDIA_SESSION |
Доступны следующие типы данных:
...
В сборке 5.2.1999 добавлено автоматическое создание БД при подключении определенной версии WCS с определенного IP адреса. Данные о всех БД хранятся в таблице WcsMetadata.metadata
Code Block |
---|
|
SELECT *
FROM WcsMetadata.metadata
┌─dbName───────────────────────────────┬─ip────────────┬─hostname──────────────┬─versionNumber─┬─versionHash──────────────────────────────┐
│ test1flashphonercom_192168065_521999 │ 192.168.0.65 │ test1.flashphoner.com │ 5.2.1999 │ 93e39647113e0121dabc4283ef700814c355568f │
│ test2flashphonercom_192168039_521999 │ 192.168.0.39 │ test2.flashphoner.com │ 5.2.1999 │ 93e39647113e0121dabc4283ef700814c355568f │
└──────────────────────────────────────┴───────────────┴───────────────────────┴───────────────┴──────────────────────────────────────────┘ |
Поэтому для настройки ClickHouse необходимо только создать пользователя и дать ему права на создание Баз данных, таблиц и вставку данных в них
1. Для того, чтобы прослушивать входящие запросы на всех интерфесах сервера, раскомментируйте строку в файле /etc/clickhouse-server/config.xml
Code Block |
---|
|
<listen_host>::</listen_host> |
2. Для того, чтобы создать пользователя, укажите для пользователя default в файле /etc/clickhouse-server/users.xml параметры
Code Block |
---|
|
<access_management>1</access_management>
<named_collection_control>1</named_collection_control>
<show_named_collections>1</show_named_collections>
<show_named_collections_secrets>1</show_named_collections_secrets> |
3. Перезапустите ClickHouse
Code Block |
---|
|
systemctl restart clickhouse-server |
4. Создайте пользователя wcs и дайте ему необходимые права
Code Block |
---|
|
cat wcs_clickhouse_users.sql | clickhouse-client -mn |
Code Block |
---|
language | sql |
---|
theme | RDark |
---|
title | wcs_clickhouse_users.sql |
---|
collapse | true |
---|
|
CREATE USER IF NOT EXISTS wcs IDENTIFIED BY 'wcs';
SET allow_introspection_functions = 1;
GRANT ALL ON *.* TO wcs WITH GRANT OPTION; |
6. Отключите управление пользователями для пользователя default, указав в файле /etc/clickhouse-server/users.xml параметр
Code Block |
---|
|
<access_management>0</access_management> |
7. Перезапустите ClickHouse
Code Block |
---|
|
systemctl restart clickhouse-server |
Настройка WCS
Сбор данных в БД ClickHouse включается настройкой, в которой перечисляются типы отправляемых данных
Code Block |
---|
|
rels_enabled=CONNECTION,STREAM,CDN,MEDIA_SESSION |
Доступны следующие типы данных:
CONNECTION, STREAM, CDN, MEDIA_SESSION, HLS_SEGMENTER, HLS_STREAM, HLS_CLIENT, MIXER, AUDIO_RECOVERY, RTMP_IN_BUFFER
Тип | Описание |
---|
CONNECTION | События клиенсткой сессии |
STREAM | События потока |
CDN | События CDN |
MEDIA_SESSION | События медиа сессии |
HLS_SEGMENTER | Данные о нарезке HLS потоков |
HLS_STREAM | События HLS потоков |
HLS_CLIENT | Статистика HLS клиентов |
MIXER | События микшера |
AUDIO_RECOVERY | Статистика потерь и восстановления аудиопакетов |
RTMP_IN_BUFFER | Статистика буфера входящих RTMP потоков |
...
_SESSION | События медиа сессии |
HLS_SEGMENTER | Данные о нарезке HLS потоков |
HLS_STREAM | События HLS потоков |
HLS_CLIENT | Статистика HLS клиентов |
MIXER | События микшера |
AUDIO_RECOVERY | Статистика потерь и восстановления аудиопакетов |
RTMP_IN_BUFFER | Статистика буфера входящих RTMP потоков |
Настройка подключения к ClickHose до сборки WCS 5.2.1999
Адрес сервера ClickHouse, база данных и протокол задаются настройками
Code Block |
---|
|
rels_client_type=HTTP
rels_database_address=http://clickhouseserver:8123/wcs?user=wcs&password=wcs |
По умолчанию используется рекомендованный HTTP протокол. Однако, при необходимости можно переключиться на использование JDBC драйвера
Code Block |
---|
|
rels_client_type=JDBC
rels_database_address=jdbc:clickhouse://clickhouseserver:8123/wcs?user=wcs&password=wcs |
Настройка подключения к ClickHose в сборках WCS 5.2.1999 и новее
Адрес сервера ClickHouse, пользователь и протокол задаются настройками
Code Block |
---|
|
rels_client_type=HTTP
rels_database_address=http://clickhouseserver:8123/wcs?
rels_database_properties=user=wcs&password=wcs |
По умолчанию используется рекомендованный HTTP протокол. Однако, при необходимости можно переключиться на использование JDBC драйвера
Code Block |
---|
|
rels_client_type=JDBC
rels_database_address=jdbc:clickhouse://clickhouseserver:8123/wcs?user=wcs&password=wcs_type=JDBC |
Остановка сбора данных без перезапуска WCS
...
Code Block |
---|
|
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json
[
{
"type": "CONNECTION",
"sentBytes": 1989,
"bitrateKbps": 0,
"sentEvents": 6,
"queueEvents": 0
},
{
"type": "STREAM",
"sentBytes": 70766,
"bitrateKbps": 0,
"sentEvents": 73,
"queueEvents": 1
},
{
"type": "CDN",
"sentBytes": 0,
"bitrateKbps": 0,
"sentEvents": 0,
"queueEvents": 0
},
{
"type": "MEDIA_SESSION",
"ids": [
"d7d6b6e4-b137-461a-8a32-d6abf2b8666e",
"39cbf770-128a-11ef-b839-d1a1f53f8bd2"
],
"sentBytes": 205794,
"bitrateKbps": 143,
"sentEvents": 999,
"queueEvents": 119
}
] |
Return codes
Code | Reason |
---|
200 | OK |
404 | Not found |
500 | Internal server error |
/rels/terminate
Остановить сбор определенных типов данных для определенного потока
...
Code Block |
---|
|
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json |
Return codes
Code | Reason |
---|
200 | OK |
400 | Bad request |
404 | Not found |
500 | Internal server error |
/rels/terminate_all
Остановить сбор определенных типов данных для всех потоков
...
Code Block |
---|
|
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json
{
"MEDIA_SESSION": [
"39cbf770-128a-11ef-b839-d1a1f53f8bd2"
]
} |
Return codes
Code | Reason |
---|
200 | OK |
400 | Bad request |
404 | Not found |
500 | Internal server error |
Параметры
Параметр | Описание | Пример |
---|
mediaSession | Объект описания сбора данных MEDIA_SESSION | "mediaSession": {"frequency":100, "ids":["12345678-0000-1111"]} |
frequency | Частота сбора данных в миллисекундах | 100 |
ids | Список идентификаторов медиасессий потоков, для которых |
собираются данныесобираются данные | ["12345678-0000-1111","12345678-3333-4444"] |
hlsSegmenter | Объект описания сбора данных HLS_SEGMENTER | "hlsSegmenter": {"ids":["stream1"]} |
hlsClient | Объект описания сбора данных HLS_CLIENT | "hlsClient": {"ids":["stream1"]} |
mixer | Объект описания сбора данных MIXER | "mixer": {"ids":["12345678- |
0000-1111",5555-6666"] } |
audioRecovery | Объект описания сбора данных AUDIO_RECOVERY | "audioRecovery": {"ids":["12345678- |
33334444hlsSegmenterrtmpInBuffer | Объект описания сбора данных |
HLSSEGMENTERhlsSegmenterstream1hlsClient | Объект описания сбора данных HLS_CLIENT | "hlsClient": {"ids":["stream1"]} |
mixer | Объект описания сбора данных MIXER | "mixer": {"ids":["12345678-5555-6666"] } |
audioRecovery | Объект описания сбора данных AUDIO_RECOVERY | "audioRecovery": {"ids":["12345678-7777-8888"] } |
rtmpInBuffer | Объект описания сбора данных RTMP_IN_BUFFER | "rtmpInBuffer": {"ids":["12345678-9999-AAAA"] } |
Выборки информации из БД
...
Выборки информации из БД
Выборки информации из БД производятся при помощи 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 wcstest1flashphonercom_192168065_521999.StreamEvent where streamName = 'test' |
Code Block |
---|
|
select timestamp,ip,sessionId,dictGetString('wcs.DictionaryConnectionEvents','type', eventType) as eventType from wcstest1flashphonercom_192168065_521999.ConnectionEvent |
Code Block |
---|
|
select timestamp,ip,nodeId,dictGetString('wcs.DictionaryCDNEvents','type', eventType) as eventType,eventPayload from wcstest1flashphonercom_192168065_521999.CDNEvent |