Versions Compared

Key

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

...

ПолеТипОписание
timestampUInt64Метка времени
ipIPv4Адрес сервера
nodeIdStringИдентификатор узла (строка IP адреса)
eventTypeUInt64Идентификатор типа события
eventPayloadStringСодержимое события

Данные о метриках потоков (таблица

...

MediaSessionEvent)

В сборке 5.2.1896 добавлен сбор данных о метриках определенных потоков

ПолеТипОписание
timestampUInt64Метка времени
ipIPv4Адрес сервера
mediaSessionIdStringИдентификатор медиасессий
streamNameStringИмя потока
videoProfileIdUInt32Идентификатор профиля видео
videoWidthUInt32Высота картинки
videoHeightUInt32Ширина картинки
videoFrameRateUInt32Частота кадров в секунду
videoKframesUInt64Количество ключевых кадров (I-frame)
videoPframesUInt64Количество промежуточных кадров (P-frame)
videoBframesUInt64Количество двунаправленных кадров (B-frames)
videoRateUInt64Битрейт видео, бит/с
audioRateUInt64Битрейт аудио, бит/с
videoSyncTimeUInt64Значение синхронизации видео
audioSyncTimeUInt64Значение синхронизации аудио
videoTimestampUInt64Метка времени из видеопакета
audioTimestampUInt64Метка времени из аудиопакета
lastKeyFrameSyncTimeUInt64Значение синхронизации видео из последнего ключевого кадра
sendNACKUInt64Количество отправленных NACK
recvNACKUInt64Количество полученных NACK
videoFramesLostUInt64Количество потерянных кадров видео
audioPacketsLostUInt64Количество потерянных пакетов аудио
audioPlaybackSpeedFloat32Скорость публикации/проигрывания аудио
videoPlaybackSpeedFloat32Скорость публикации/проигрывания видео

Данные о нарезке HLS потока (таблица

...

HlsStreamEvent)

В сборке 5.2.1917 добавлен сбор данных о событиях определенных HLS потоков

ПолеТипОписание
timestampUInt64Метка времени
ipIPv4Адрес сервера
severityUInt8Уровень события: INFO, WARNING, ERROR
messageTypeUInt16Тип события
streamIdStringИдентификатор HLS потока (имя)
variantNameStringИмя варианта качества
segmentIdStringИдентификатор сегмента
messageStringОписание события в том виде, как залогировано

Данные о сегментах HLS потока (таблица

...

HlsSegmenterEvent)

В сборке 5.2.1917 добавлен сбор данных о сегментах определенных HLS потоков

ПолеТипОписание
timestampUInt64Метка времени
ipIPv4Адрес сервера
streamIdStringИдентификатор HLS потока (имя)
variantNameStringИмя варианта качества
segmentIdStringИдентификатор сегмента
segmentStartPtsUInt64Начальный PTS сегмента
videoStartPtsUInt64Начальный PTS  видео дорожки
audioStartPtsUInt64Начальный PTS  аудио дорожки
videoWidthUInt32Ширина картинки
videoHeightUInt32Высота картинки
videoFrameCountUInt32Количество кадров видео
audioPacketCountUInt32Количество пакетов аудио
segmentDurationUInt64Длительность сегмента, мс
independentBoolНезависимый сегмент
gapBoolGAP  сегмент
discontinuityBoolDISCONTINUTY сегмент
segmentIntervalUInt64Интервал между сегментами, мс
partialBoolЧастичный сегмент
playbackSpeedFloat32Скорость проигрывания

Данные о подписчиках 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
languagebash
themeRDark
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
languagebash
themeRDark
sudo yum install -y clickhouse-server clickhouse-client

3. Запустите ClickHouse

Code Block
languagebash
themeRDark
sudo systemctl enable clickhouse-server
sudo systemctl start clickhouse-server

Установка ClickHouse из deb пакетов (Debian, Ubuntu etc)

1. Подключите официальный репозиторий

Code Block
languagebash
themeRDark
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
languagebash
themeRDark
sudo apt-get install -y clickhouse-server clickhouse-client

3. Запустите ClickHouse

Code Block
languagebash
themeRDark
sudo yumsystemctl enable -q makecache -y --enablerepo='altinity_clickhouse'

3. Установите ClickHouse

Code Block
languagebash
themeRDark
sudo yum install -y clickhouse-server clickhouse-client

4. Запустите ClickHouse

Code Block
languagebash
themeRDark
clickhouse-server
sudo systemctl start clickhouse-server

Настройка ClickHouse для сборок WCS до 5.2.1999

1. Для того, чтобы прослушивать входящие запросы на всех интерфесах сервера, раскомментируйте строку в файле /etc/clickhouse-server/config.xml 

...

Code Block
languagebash
themeRDark
systemctl restart clickhouse-server

Настройка ClickHouse для сборок WCS

...

Сбор данных в БД ClickHouse включается настройкой, в которой перечисляются типы отправляемых данных

Code Block
themeRDark
rels_enabled=CONNECTION,STREAM,CDN,MEDIA_SESSION

Доступны следующие типы данных:

...

5.2.1999 и новее

В сборке 5.2.1999 добавлено автоматическое создание БД при подключении определенной версии WCS с определенного IP адреса. Данные о всех БД хранятся в таблице WcsMetadata.metadata

Code Block
languagesql
themeRDark
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
languagexml
themeRDark
    <listen_host>::</listen_host>

2. Для того, чтобы создать пользователя, укажите для пользователя default в файле /etc/clickhouse-server/users.xml параметры

Code Block
languagexml
themeRDark
            <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
languagebash
themeRDark
systemctl restart clickhouse-server

4. Создайте пользователя wcs и дайте ему необходимые права

Code Block
languagebash
themeRDark
cat wcs_clickhouse_users.sql | clickhouse-client -mn
Code Block
languagesql
themeRDark
titlewcs_clickhouse_users.sql
collapsetrue
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
languagexml
themeRDark
            <access_management>0</access_management>

7. Перезапустите ClickHouse

Code Block
languagebash
themeRDark
systemctl restart clickhouse-server

Настройка WCS

Сбор данных в БД ClickHouse включается настройкой, в которой перечисляются типы отправляемых данных

Code Block
themeRDark
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
themeRDark
rels_client_type=HTTP
rels_database_address=http://clickhouseserver:8123/wcs?user=wcs&password=wcs

По умолчанию используется рекомендованный HTTP протокол. Однако, при необходимости можно переключиться на использование JDBC драйвера

Code Block
themeRDark
rels_client_type=JDBC
rels_database_address=jdbc:clickhouse://clickhouseserver:8123/wcs?user=wcs&password=wcs

Настройка подключения к ClickHose в сборках WCS 5.2.1999 и новее

Адрес сервера ClickHouse, пользователь и протокол задаются настройками

Code Block
themeRDark
rels_client_type=HTTP
rels_database_address=http://clickhouseserver:8123/wcs?
rels_database_properties=user=wcs&password=wcs

По умолчанию используется рекомендованный HTTP протокол. Однако, при необходимости можно переключиться на использование JDBC драйвера

Code Block
themeRDark
rels_client_type=JDBC
rels_database_address=jdbc:clickhouse://clickhouseserver:8123/wcs?user=wcs&password=wcs_type=JDBC

Остановка сбора данных без перезапуска WCS

...

Code Block
languagejs
themeRDark
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

CodeReason
200OK
404Not found
500Internal server error

/rels/terminate

Остановить сбор определенных типов данных для определенного потока

...

Code Block
languagejs
themeRDark
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json

Return codes

CodeReason
200OK
400Bad request
404Not found
500Internal server error

/rels/terminate_all

Остановить сбор определенных типов данных для всех потоков

...

Code Block
languagejs
themeRDark
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json

{
  "MEDIA_SESSION": [
    "39cbf770-128a-11ef-b839-d1a1f53f8bd2"
  ]
}

Return codes

CodeReason
200OK
400Bad request
404Not found
500Internal 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-
3333
7777-
4444
8888"]}
hlsSegmenter
rtmpInBufferОбъект описания сбора данных
HLS
RTMP_IN_
SEGMENTER
BUFFER"
hlsSegmenter
rtmpInBuffer": {"ids":["
stream1
12345678-9999-AAAA"]}
hlsClientОбъект описания сбора данных 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
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 wcstest1flashphonercom_192168065_521999.StreamEvent where streamName = 'test'
Code Block
languagesql
themeRDark
select timestamp,ip,sessionId,dictGetString('wcs.DictionaryConnectionEvents','type', eventType) as eventType from wcstest1flashphonercom_192168065_521999.ConnectionEvent
Code Block
languagesql
themeRDark
select timestamp,ip,nodeId,dictGetString('wcs.DictionaryCDNEvents','type', eventType) as eventType,eventPayload from wcstest1flashphonercom_192168065_521999.CDNEvent