Skip to content

Метрики Prometheus

control.observability.metrics

Prometheus-скрейп: свой мониторинг

Опция «расширенные счётчики»

Ручки скрейпа доступны только с лицензионной опцией расширенных счётчиков. Без неё используйте встроенный Prometheus-сервер и Retroview.

Для инсталляций с собственной инфраструктурой мониторинга Sapsan отдаёт метрики в текстовом формате Prometheus:

  • GET /streamer/api-v4/live-metrics — стримы и входы;
  • GET /streamer/api-v4/sessions-metrics — сессии проигрывания;
  • GET /streamer/api-v4/dvr/metrics — диски и каталог архива;
  • GET /streamer/api-v4/runtime/metrics — процесс и аллокатор.

Отличия от встроенного Prometheus-сервера: история хранится у вас и ограничена только retention'ом вашей TSDB; доступна полная глубина, включая протокольные метрики per-PID/SRT/RTP; алертинг — ваш alertmanager. Счётчики монотонны и переживают наблюдение рестартов — это канал и для биллинговой сверки на вашей стороне.

Метрики Prometheus

GET /streamer/api-v4/runtime/metrics отдает метрики процесса в формате Prometheus (включая аллокатор jemalloc). Рядом — метрики лайва, сессий и DVR: /live-metrics, /sessions-metrics, /dvr/metrics (см. Admin API). Ручки скрейпа доступны с лицензионной опцией расширенных счётчиков; без неё графики строятся встроенным Prometheus-сервером (готовый датасорс для Grafana). Полный разбор каналов статистики, полей и рецептов алертинга — на странице Статистика.

Рецепты

Вопрос Где смотреть Признак проблемы
Стрим жив? status в API; rate(stream_input_bytes_total[1m]) во встроенном Prometheus статус не running; скорость приёма упала в ноль
Резерв готов? inputs[] в списке статов status = error или unchecked; checked_ago_ms много больше интервала проверки
Живём на резерве? source.url; num_sec_on_secondary_input URL не первый из конфига; счётчик секунд на резерве растёт
Вход деградирует? input.errors, input.retries; причины — расширенные счётчики или Retroview счётчики растут при живом стриме
Пуш доходит? pushes[].status и bitrate_kbit; rate(stream_push_bytes_total[1m]) статус не running; скорость нулевая при живом стриме
Почему пуш не работает? pushes[].error текст причины: отказ соединения, таймаут, отказ публикации
Канал до приёмника рвётся? pushes[].reconnects_total, opened_at реконнекты растут; opened_at молодеет каждые несколько минут
Идёт подбор секрета к SRT-выдаче с картой клиентов? скрейп ноды: srt_handshake_attempts_total, srt_handshake_secret_candidates_total много кандидатов секрета на попытку — идёт перебор; единицы — штатное подключение
Доставка зрителю деградирует? srt.health в сессиях; серии stream_play_srt_session_lost_packets_total вердикт degraded или bad; потери растут
Архив пишется? dvr.to в списке; dvr.write.segments_failed в единичном GET to отстаёт от настоящего времени; segments_failed растёт
В архиве дыры? dvr.recorded_hours против окна to - from записанных часов заметно меньше ширины окна
Диски успевают? segments_written_slow/_delayed (опция); dvr_disk_free_bytes в скрейпе доля медленных записей растёт; свободное место тает быстрее ожидаемого
Сервер здоров? runtime/metrics: process_rss_bytes; встроенный Prometheus: stream_memory_bytes память монотонно растёт без роста нагрузки
Что было ночью? Retroview —

Выдача MPEG-TS HLS

Причины неполных сегментов, сборки мимо кэша, поля API и примеры алертинга описаны в разделе счётчиков MPEG-TS HLS.