Контроль доставки¶
Головная станция не может спросить у приёмника, что он намерил. Единственное, чем она располагает, — собственные счётчики отправки, и снимаются они по каждому направлению отдельно.
Ключ статистики — пара «имя стрима, имя направления», та же, что и в настройках направления. Это не формальность: один стрим уходит на пять адресатов, и фраза «стрим отдаёт 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 направления против битрейта стрима |
скорость направления систематически ниже |
Что дальше¶
- Доставка в сеть и доставка по SRT — что настраивается у направления.
- Ошибки входа — вторая половина картины: что приходит на станцию.
- Мониторинг — каналы статистики целиком.