Информация о нагрузке и ресурсах WCS-сервера доступна на порту 8081 по URL
http://test.flashphoner.com:8081/?action=stat
где test.flashphoner.com - это адрес WCS-сервера.
Она включает данные о публикуемых и воспроизводимых потоках, SIP-звонках и характеристиках сервера.
Статистические параметры
connections_stats | Соединения с WCS-сервером |
---|---|
connections | Общее количество соединений |
connections_rtmfp | Количество RTMFP-соединений (Flash) |
connections_websocket | Количество WebSocket-соединений |
port_stats | Порты, слушаемые WCS-сервером |
ports_media_free | Количество свободных медиапортов |
ports_media_busy | Количество занятых медиапортов |
ports_media_quarantine | Количество медиапортов в карантине |
ports_wcs_agents_free | Количество свободных портов, используемых в CDN |
ports_wcs_agents_busy | Количество занятых портов, используемых в CDN |
ports_wcs_agents_quarantine | Количество портов, используемых в CDN, находящихся в карантине |
streams_stats | Сессии аудио и видеопотоков на WCS-сервере |
streams_rtsp_in | Количество активных RTSP-сессий, раздающих трафик |
streams_rtsp_out | Количество активных RTSP-сессий, забирающих трафик |
streams_websocket_out | Количество активных потоков, воспроизводимых через WebSocket |
streams_rtmp_out | Количество активных RTMP-потоков |
streams_webrtc_in | Количество активных потоков, публикуемых через WebRTC |
streams_webrtc_out | Количество активных потоков, воспроизводимых через WebRTC |
streams_rtmfp_in | Количество активных потоков, публикуемых через RTMFP |
streams_rtmfp_out | Количество активных потоков, воспроизводимых через RTMFP |
streams_viewers | Количество активных клиентов, воспроизводящих опубликованные потоки |
streams_synchronization | Синхронизация в опубликованных потоках |
native_resources | Информация о потребляемых ресурсах |
native_resources | Информация о кодировании/декодировании медиапотока |
core_stats | Параметры системы (полученные с использованием методов Java) и параметры WCS-сервера |
core_threads | Количество активных потоков server-процесса WCS |
core_java_threads | Текущее количество живых потоков |
core_java_threads_blocked | Текущее количество заблокированных потоков |
core_java_committedMemory | Количество гарантированно доступной виртуальной памяти, в байтах |
core_java_freePhysicalMemorySize | Количество свободной физической памяти, в байтах |
core_java_arch | Aрхитектура операционной системы |
core_java_availableProcessors | Количество процессоров доступных виртуальной машине Java |
core_java_freeSwapSpaceSize | Количество свободного swap-пространства, в байтах |
core_java_maxFileDescriptorCount | Максимальное количество файл-дескрипторов |
core_java_open_file_descriptors | Количество файл-дескрипторов, открытых в виртуальной машине Java |
core_java_cpu_usage | "Недавнее использование процессора" для процесса виртуальной машины Java |
core_java_totalPhysicalMemorySize | Количество физической памяти, в байтах |
core_java_totalSwapSpaceSize | Количество swap-пространства, в байтах |
core_java_uptime | Сколько времени прошло от запуска виртуальной машины Java, в миллисекундах |
core_heap_memory_used | Использование памяти в куче |
core_rss_memory | Использование памяти |
core_open_file_descriptors | Количество открытых файл-дескрипторов |
core_cpu_usage | Процент времени, затраченного на работу процессов |
core_gc | Информация о "сборке мусора" |
core_gc_manager | Информация о "сборке мусора" в административном модуле |
core_heap_memory_used | Используемая память в куче |
core_java_version | Версия Java |
core_java_nio_memory_buffer_count | Количество используемых TCP NIO буферов |
core_java_nio_memory_used | Объем памяти, используемой под TCP NIO буферы |
core_java_nio_memory_capacity | Объем памяти, выделенной под TCP NIO буферы |
call_stats | SIP-звонки на WCS-сервере |
sip_calls | Количество SIP-звонков |
sip_calls_established | Количество активных SIP-звонков |
sip_calls_in | Количество входящих SIP-звонков |
sip_calls_out | Количество исходящих SIP-звонков |
sip_calls_per_second (cps) | Количество SIP-звонков в секунду |
sip_stats | SIP-клиенты |
sip_registered | Количество клиентов в состоянии REGISTERED |
recording_stats | Запись аудио и видеофайлов |
recording_sessions | Количество активных сессий записи |
system_stats | Параметры системы |
system_java_cpu_usage | "Недавнее использование процессора" для всей системы (получено с использованием методов Java) |
system_java_load_average | Средняя нагрузка системы за последнюю минуту (получено с использованием методов Java) |
system_uptime | Сколько времени прошло от запуска Linux-сервера |
system_memory_total | Доступная к использованию RAM-память, в килобайтах |
system_memory_free | Количество физической RAM-памяти, не используемой системой, в килобайтах |
system_cpu_usage | Процент времени, затраченного на работу процессов ядра |
network_stats | Статистика сетевого трафика |
global_bandwidth_in | Пропускная способность канала для входящих соединений |
global_bandwidth_out | Пропускная способность канала для исходящих соединений |
version_stats | Информация о версии WCS |
wcs_version | Текущая версия WCS-сервера |
wcs_client_version | Текущая версия Web SDK |
gc_stats | Информация о последнем цикле сборки мусора |
gc_last_pause_ms | Пауза в работе JVM, в миллисекундах |
gc_last_duration_ms | Общая длительность цикла сборки мусора, в миллисекундах |
gc_last_heap_before_mb | Объем кучи в мегабайтах, до сборки мусора |
gc_last_heap_after_mb | Объем кучи в мегабайтах, после сборки мусора |
errors_info | Информация об ошибках (собирается на основании перехваченных исключений Java) |
java.io.IOException | Количество ошибок ввода-вывода |
java.lang.ArrayIndexOutOfBoundsException | Количество выходов за пределы массива |
java.lang.IllegalArgumentException | Количество ошибок в аргументах функций |
com.flashphoner.server.license.activation.A.C | Количество ошибок при активации лицензии |
java.lang.NullPointerException | Количество попыток перехода по нулевому указателю |
java.lang.OutOfMemoryError | Количество ошибок выделения памяти (требуется перезапуск сервера) |
degraded_streams_stats | Информация о деградации потоков |
degraded_streams | Количество деградировавших потоков |
degraded_streams_percent | Процент деградации от общего числа потоков на сервере |
transcoding_stats | Информация о транскодировании потоков |
transcoding_video_decoding_resolutions | Список декодируемых разрешений в виде "разрешение/количество потоков" |
transcoding_video_decoding_average_time | Среднее время декодирования по разрешениям в виде "разрешение/время в мс" |
transcoding_video_decoding_max_time | Максимальное время декодирования по разрешениям в виде "разрешение/время в мс" |
transcoding_video_decoding_average_queue_size | Средний размер очереди декодирования по разрешениям в виде "разрешение/размер очереди" |
transcoding_video_decoding_max_queue_size | Максимальный размер очереди декодирования по разрешениям в виде "разрешение/размер очереди" |
transcoding_video_encoding_resolutions | Список кодируемых разрешений в виде "разрешение/количество потоков" |
transcoding_video_encoding_average_time | Среднее время кодирования по разрешениям в виде "разрешение/время в мс" |
transcoding_video_encoding_max_time | Максимальное время кодирования по разрешениям в виде "разрешение/время в мс" |
transcoding_video_encoding_average_queue_size | Средний размер очереди кодирования по разрешениям в виде "разрешение/размер очереди" |
transcoding_video_encoding_max_queue_size | Максимальный размер очереди кодирования по разрешениям в виде "разрешение/размер очереди" |
transcoding_video_decoding_load | Интегральный показатель нагрузки декодирования |
transcoding_video_encoding_load | Интегральный показатель нагрузки кодирования |
buffer_output_stats | Информация о выравнивающем буфере (только в JSON формате) |
cdn_stats | Информация о CDN |
cdn_version | Версия CDN, поддерживаемая данным сервером |
cdn_role | Роль сервера в CDN |
cdn_group | Группа, в которую входит сервер |
custom_stats | Статистика, собираемая при помощи внешнего скрипта |
Каждый параметр может быть запрошен отдельно, например
http://test.flashphoner.com:8081/?action=stat¶ms=native_resources
Статистику используемых ресурсов и информацию о нагрузке WCS-сервера, объединенную по группам, можно запросить по имени группы (доступны connections_stats, streams_stats, port_stats, call_stats, degraded_streams_stats, system_stats, core_stats)
http://test.flashphoner.com:8081/?action=stat&groups=call_stats
В запрос можно включить несколько наименований групп
http://test.flashphoner.com:8081/?action=stat&groups=call_stats,connections_stats
Параметры системы могут быть исключены из полной выборки при помощи настройки в файле flashphoner.properties
parse_system_stats=false
В этом случае параметры системы предоставляются только по запросу.
Форматы вывода статистики
По умолчанию, статистика выводится в plain text
Начиная со сборки 5.2.416, поддерживаются также форматы JSON и Prometheus. Для вывода статистики в формате JSON необходимо указать формат в URI запроса
curl -s 'http://localhost:8081/?action=stat&format=json'
Для вывода статистики в формате Prometheus необходимо указать формат в URI запроса
curl -s 'http://localhost:8081/?action=stat&format=prometheus'
Статистика транскодирования потоков
В сборке 5.2.443 добавлена возможность вывода краткой и подробной статистики транскодирования потоков. Краткая статистика группируется по разрешениям и доступна во всех форматах, например:
-----Transcoding info----- transcoding_video_decoding_resolutions=640x360/1 transcoding_video_decoding_average_time=640x360/2.0 transcoding_video_decoding_max_time=640x360/2 transcoding_video_decoding_average_queue_size=640x360/0.0 transcoding_video_decoding_max_queue_size=640x360/0 transcoding_video_encoding_resolutions=426x240/1;640x360/1;852x480/1 transcoding_video_encoding_average_time=426x240/2.0;640x360/2.0;852x480/6.0 transcoding_video_encoding_max_time=426x240/2;640x360/2;852x480/6 transcoding_video_encoding_average_queue_size=426x240/0.0;640x360/0.0;852x480/0.0 transcoding_video_encoding_max_queue_size=426x240/0;640x360/0;852x480/0
Здесь отображаются:
- разрешение и количество декодируемых и кодируемых потоков
- среднее и максимальное время декодирования и кодирования по разрешениям
- средний и максимальный размер очередей декодирования и кодирования
Подробная статистика выводится только в формате JSON, например
curl -s 'http://localhost:8081/?action=stat&format=json&groups=transcoding_stats' | jq
и группируется по опубликованным потокам
"transcoding_video_full_info": { "test1": { "codec": "H264", "queueSize": 0, "distributors": [ { "codec": "H264", "queueSize": 0, "resolution": "426x240", "averageProcessingTime": 3 }, { "codec": "H264", "queueSize": 0, "resolution": "640x360", "averageProcessingTime": 5 }, { "codec": "H264", "queueSize": 0, "resolution": "852x480", "averageProcessingTime": 10 } ], "resolution": "640x360", "averageProcessingTime": 3 } }
Здесь:
- codec - кодек потока
- queueSize - размер очереди
- resolution - разрешение потока
- averageProcessingTime - среднее время кодирования или декодирования
- distributors - параметры кодируемых (выходных) потоков
Интегральные показатели нагрузки транскодирования
В сборке 5.2.570 в статистику транскодирования добавлены интегральные показатели нагрузки декодирования и кодирования
-----Transcoding info----- ... transcoding_video_decoding_load=22118400 ... transcoding_video_encoding_load=7983360
Нагрузка декодирования рассчитывается следующим образом
transcoding_video_decoding_load = ∑ width * height * fps
Здесь
- width - ширина картинки декодируемого потока
- height - высота картинки декодируемого потока
- fps - FPS декодируемого потока
Нагрузка кодирования рассчитывается следующим образом
transcoding_video_encoding_load = ∑ width * height * fps
Здесь
- width - ширина картинки кодируемого потока согласно профилю
- height - высота картинки кодируемого потока согласно профилю
- fps - FPS заданный профилем кодирования, либо FPS транскодируемого (исходного) потока
Информация о CDN
В сборке 5.2.471 добавлен вывод информации о CDN, в которой участвует данный сервер
curl -s 'http://localhost:8081/?action=stat&groups=cdn_stats'
-----CDN info----- cdn_version=2.3 cdn_role=ORIGIN cdn_group=
Здесь:
cdn_version - версия CDN, поддерживаемая данным сервером
cdn_role - роль сервера в CDN
cdn_group - группа, к которой принадлежит сервер, либо пустая строка, если сервер не введен ни в одну группу
Синхронизация в опубликованных потоках
В сборке 5.2.508 в статистику потоков добавлен вывод информации о синхронизации аудио и видео в опубликованных потоках:
-----Stream Stats----- streams_synchronization=stream1/90,stream2/-11
Значение метрик вычисляется как разность между текущими значениями аудио и видео синхронизации
var metric = lastAudioSync - lastVideoSync;
Таким образом, положительное значение метрики показывает, что аудио в данный момент обгоняет видео, а отрицательное - что аудио отстает от видео.
Изменения данной метрики в небольших пределах являются нормой. Если метрика для потока остается высоким и постоянным по знаку, это может означать проблемы с данным потоком.
Информация о выравнивающих буферах
В сборке 5.2.543 добавлена возможность вывода информации об использовании выравнивающих буферов на выходе транскодеров. Информация доступна только в формате JSON
curl -s 'http://localhost:8081/?action=stat&format=json&groups=buffer_stats'
и группируется по транскодируемым потока и подписчикам на эти потоки
{ "buffer_stats": { "buffer_output_info": { "test": { "buffer_output_video_average": "0.0", "subscribers": { "25b94cd0-5eaf-11ea-a9b7-abda8d208547": { "overflows": 0, "buffer_output_audio": 4, "buffer_output_video": 0 }, ... }, "buffer_output_audio_average": "4.0" } } } }
Здесь
- buffer_output_audio_average - среднее количество аудио пакетов в буфере по всем подписчикам
- buffer_output_video_average - среднее количество видео пакетов в буфере по всем подписчикам
- buffer_output_audio - количество аудио пакетов в буфере для подписчика
- buffer_output_video - количество видео пакетов в буфере для подписчика
- overflows - количество переполнений буфера, при которых буфер очищается
Статистика, собираемая при помощи внешнего скрипта
В сборке 5.2.579 добавлена возможность сбора статистики, недоступной из JVM, при помощи вызова внешнего скрипта.
Имя скрипта указывается настройкой
custom_stats_script=/path/to/custom_stats.sh
По умолчанию, если указано только имя скрипта без пути, он должен располагаться в каталоге /usr/local/FlashphonerWebCallServer/bin
Скрипт должен возвращать параметры в виде
key1=value1 key2=value2 ...
Пример скрипта, который возвращает версию Java и последнюю строку из лога сборщика мусора
#!/bin/bash ver=$(java -version 2>&1 | grep "version" | cut -d" " -f 3 | sed 's/\"//g') echo "java_ver=$ver" gc_log=$( ls -t /usr/local/FlashphonerWebCallServer/logs/gc-core* | head -1) echo "gc=$(tail -n1 $gc_log)" exit 0
Этот скрипт добавит на страницу статистики
-----Custom info----- java_ver=1.8.0_222 gc=2020-04-23T15:20:56.138+0700: 1546.835: [GC (Allocation Failure) 2020-04-23T15:20:56.138+0700: 1546.835: [ParNew: 8978K->325K(9216K), 0.0103299 secs] 26379K->18056K(36172K), 0.0104582 secs] [Times: user
Параметры, возвращаемые скриптом, доступны во всех форматах статистики. В формате Prometheus ключ и значение преобразуются в метку:
custom_stats{java_ver="1.8.0_222"} 1 custom_stats{gc="2020-04-23T15:11:11.235+0700: 961.933: [GC (Allocation Failure) 2020-04-23T15:11:11.235+0700: 961.933: [ParNew: 9216K->793K(9216K), 0.0042971 secs] 26617K->18195K(36172K), 0.0044029 secs] [Times: user"} 1
Ограничения
1. Не допускается использование длительных операций и задержек в этом скрипте, поскольку это вызовет задержку выдачи страницы статистики.
2. Не допускается наличие кавычек в именах и значениям параметров, для совместимости с Prometheus. Например, значения
java_ver=openjdk version "1.8.0_222"
использовать нельзя, а
java_ver=1.8.0_222
можно
Получение информации об ошибках Java VM
В сборке 5.2.769 добавлена возможность получения информации о количестве определенных ошибок (исключений) Java VM при помощи запроса
http://localhost:8081/?action=stat¶ms=wcs_errors,<exception class name>
Например, для того, чтобы своевременно контролировать нехватку физической памяти, необходимо периодически запрашивать
http://localhost:8081/?action=stat¶ms=wcs_errors,java.lang.OutOfMemoryError
Если полученный ответ содержит указанное исключение, и количество ошибок больше либо равно единицы
-----Errors info----- java.lang.OutOfMemoryError=4
необходимо выводить клиентов и перезапускать сервер.
Статистика сборщика мусора (garbage collector)
В сборке 5.2.897 добавлена возможность получения статистики сборщика мусора (garbage collector)
http://localhost:8081/?action=stat&groups=gc_stats
В статистику входят следующие параметры последнего цикла сборки мусора на момент запроса:
-----Gc info----- gc_last_pause_ms=62 gc_last_duration_ms=62 gc_last_heap_before_mb=315 gc_last_heap_after_mb=78
Здесь:
- gc_last_pause_ms - пауза в работе JVM, в миллисекундах
- gc_last_duration_ms - общая длительность сборки мусора, в миллисекундах
- gc_last_heap_before_mb - объем кучи в мегабайтах, до сборки мусора
- gc_last_heap_after_mb - объем кучи в мегабайтах, после сборки мусора
Информация выбирается из соответствующих параметров Java MX Beans.
Выборка статистики сборщика мусора при использовании ZGC
Для ZGC статистика выбирается из лога сборщика мусора, поскольку информация в Java MX Beans может возвращаться некорректно. Поэтому при использовании ZGC в настройках необходимо указать
zgc_log_parser_enable=true
Также необходимо задать формат меток времени в логах. По умолчанию, используется полный формат с датой
zgc_log_time_format=yyyy-MM-dd'T'HH:mm:ss.SSSZ
Если в лог выводятся только секунды от начала работы JVM, формат задается как
zgc_log_time_format=ss.SSS
При необходимости, можно задать шаблон для поиска файлов лога. По умолчанию, предполагается, что имя файла содержит дату и время
zgc_log_parser_path=logs/gc-core-[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}.log