Skip to content

Контроль доставки

Головная станция не может спросить у приёмника, что он намерил. Единственное, чем она располагает, — собственные счётчики отправки, и снимаются они по каждому направлению отдельно.

Ключ статистики — пара «имя стрима, имя направления», та же, что и в настройках направления. Это не формальность: один стрим уходит на пять адресатов, и фраза «стрим отдаёт 40 Мбит/с» не отвечает на вопрос, доходит ли он до конкретного из них.

Опция «статистика пушей»

Витрина доставки — отдельная лицензионная опция. Она режет только каналы отдачи данных: секцию pushes и плоские push_* в API, серии stream_push_* в скрейпе и во встроенном Prometheus-сервере. Сам сбор не останавливается, и в телеметрию Retroview счётчики уходят всегда — разбор в Retroview доступен и без опции.

Витрина в панели

На вкладке Исходящий поток под настройкой каждого направления идёт строка живой статистики: статус, скорость, ошибки в секунду, реконнекты, а у отказавшего — причина прямо в строке.

Живая статистика направлений на вкладке исходящего потока

В списке стримов сломанное направление зажигает отметку рядом со статусом стрима: видно, что доставка сломана, не открывая стрим.

Отметка сломанного направления в списке стримов

Счётчики направления

GET /streamer/api-v4/streams/stats/{name} несёт объект по имени направления:

"pushes": {
  "cable-net": {
    "status": "running",
    "proto": "udp",
    "url": "udp://239.1.1.10:5000",
    "opened_at": "2026-08-13T11:17:53Z",
    "bitrate_kbit": 2113.4,
    "bytes_total": 19053048,
    "datagrams_total": 14478
  },
  "partner-dc": {
    "status": "error",
    "proto": "srt",
    "url": "srt://203.0.113.10:9000",
    "error": "srt handshake rejected: bad passphrase",
    "reconnects_total": 22
  },
  "backup-site": {"status": "disabled", "proto": "srt", "url": "srt://198.51.100.4:9000"}
}
Поле Что означает Как использовать
status running, error или disabled не running дольше N минут — алерт; disabled штатен, это выключенное оператором направление
error причина статуса error первое, что читать при разборе: отказ соединения, таймаут, отказ рукопожатия
proto, url транспорт и адресат в том виде, как их задал оператор видно, куда именно уходит сигнал
opened_at момент старта текущего пушера молодеет на каждом реконнекте — канал флапает
bitrate_kbit измеренная скорость отправки заметно ниже битрейта стрима — отправка не успевает
errors_rate ошибки отправки в секунду растёт при живом соединении — приёмник или канал деградируют
bytes_total отправлено байт нарастающим итогом сверка объёма отдачи по направлениям
errors_total ошибки отправки нарастающим итогом
reconnects_total подъёмы умершего пушера растёт при status: running — канал рвётся и восстанавливается
retransmitted_packets_total ретрансмиты транспорта (SRT, RIST) растут — потери на пути к приёмнику
datagrams_total, frames_total отправленные единицы: датаграммы у пакетных транспортов, кадры у RTMP

Нулевые поля в ответе опускаются: у RTMP-направления нет датаграмм, у UDP — кадров и ретрансмитов.

Рядом со счётчиками стрима лежат три суммы по всем направлениям — push_bytes_total, push_errors_total, push_reconnects_total. Они отвечают на вопрос «сколько станция отдала вообще», не заставляя обходить карту.

Серии Prometheus

Каждый счётчик направления — своя серия с лейблом push:

Серия Лейблы
stream_push_bytes_total stream, push, proto
stream_push_errors_total stream, push, proto
stream_push_reconnects_total stream, push, proto
stream_push_retransmitted_packets_total stream, push, proto
stream_push_datagrams_total, stream_push_frames_total stream, push, proto

Во встроенном Prometheus-сервере те же счётчики доступны с лейблами name (стрим) и push; когда станций несколько, к ним добавляется node. Протокольная глубина — stream_push_srt_* и stream_push_rist_* — приходит вместе с опцией расширенных счётчиков.

# скорость отправки по каждому адресату
rate(stream_push_bytes_total{stream="tv1"}[1m])

# суммарная отдача стрима по всем направлениям
sum by (name) (rate(stream_push_bytes_total{name="tv1"}[1m]))

# рвущиеся каналы: реконнекты за пять минут
increase(stream_push_reconnects_total[5m]) > 0

# потери на пути к приёмнику по SRT/RIST
rate(stream_push_retransmitted_packets_total[1m])

Как читать состояние

  • status: error и непустой error — отправка не идёт, причина названа. Направление при этом продолжает подниматься само, раз в пять секунд.
  • status: running, но bitrate_kbit нулевой — соединение есть, данных нет: проверьте, идёт ли сам сигнал на входе.
  • status: running и растущий reconnects_total — канал рвётся и восстанавливается; opened_at показывает возраст текущего соединения.
  • status: disabled — направление выключено переключателем. Счётчики заморожены на последних значениях, это не потеря данных.

Алерты, с которых стоит начать

Вопрос Где смотреть Признак проблемы
Сигнал доходит? pushes[].status, bitrate_kbit; rate(stream_push_bytes_total[1m]) статус не running; скорость нулевая при живом стриме
Почему не доходит? pushes[].error текст причины: отказ соединения, таймаут, отказ рукопожатия
Канал до приёмника рвётся? reconnects_total, opened_at реконнекты растут; opened_at молодеет каждые несколько минут
Путь теряет пакеты? retransmitted_packets_total растёт при стабильном статусе
Отдача успевает? bitrate_kbit направления против битрейта стрима скорость направления систематически ниже

Что дальше