Метрики 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.