Monitoramento de entrega¶
Uma cabeça de rede não pode perguntar ao receptor o que ele mediu. Tudo o que ela tem são seus próprios contadores de envio, e eles são coletados por destino.
A chave da estatística é o par «nome do stream, nome do destino», o mesmo das configurações do destino. Isso não é formalidade: um stream sai para cinco destinos, e a frase «o stream está entregando 40 Mbit/s» não responde se ele chega a algum deles em particular.
A opção «estatísticas de pushes»
A vista de entrega é uma opção de licença à parte. Ela corta apenas os canais de dados: a seção pushes e os campos planos push_* da API, as séries stream_push_* do scrape e do servidor Prometheus embutido. A coleta em si nunca para, e os contadores sempre vão para a telemetria do Retroview — a análise no Retroview está disponível também sem a opção.
A vista no painel¶
Na aba Saída, abaixo das configurações de cada destino corre uma linha de estatísticas ao vivo: status, velocidade, erros por segundo, reconexões e, num destino que falhou, a causa ali mesmo na linha.

Na lista de streams, um destino quebrado acende uma marca ao lado do status do stream: dá para ver que a entrega está quebrada sem abrir o stream.

Contadores do destino¶
GET /streamer/api-v4/streams/stats/{name} traz um objeto indexado pelo nome do destino:
"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"}
}
| Campo | O que significa | Como usar |
|---|---|---|
status |
running, error ou disabled |
fora de running por mais de N minutos — alerta; disabled é normal, é um destino que o operador desligou |
error |
a causa do status error |
o primeiro a ler: conexão recusada, tempo esgotado, handshake rejeitado |
proto, url |
o transporte e o destino exatamente como o operador os definiu | dá para ver para onde o sinal vai de fato |
opened_at |
o momento em que o pusher atual começou | fica mais novo a cada reconexão — o canal está caindo e voltando |
bitrate_kbit |
a velocidade de envio medida | bem abaixo do bitrate do stream — o envio não dá conta |
errors_rate |
erros de envio por segundo | cresce com a conexão viva — o receptor ou o canal estão degradando |
bytes_total |
bytes enviados, acumulado | conciliação de volumes por destino |
errors_total |
erros de envio, acumulado | — |
reconnects_total |
ressurreições de um pusher morto | cresce com status: running — o canal rompe e se recupera |
retransmitted_packets_total |
retransmissões do transporte (SRT, RIST) | crescem — perdas no caminho até o receptor |
datagrams_total, frames_total |
as unidades enviadas: datagramas nos transportes de pacotes, quadros no RTMP | — |
Campos zerados são omitidos da resposta: um destino RTMP não tem datagramas, um UDP não tem quadros nem retransmissões.
Ao lado dos contadores do stream há três somas sobre todos os destinos — push_bytes_total, push_errors_total, push_reconnects_total. Elas respondem «quanto a cabeça de rede enviou no total» sem percorrer o mapa.
Séries do Prometheus¶
Cada contador de destino é uma série própria com o rótulo push:
| Série | Rótulos |
|---|---|
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 |
No servidor Prometheus embutido os mesmos contadores estão disponíveis com os rótulos name (stream) e push; quando há mais de uma cabeça de rede, soma-se node. A profundidade de protocolo — stream_push_srt_* e stream_push_rist_* — chega junto com a opção de contadores estendidos.
# velocidade de envio por destino
rate(stream_push_bytes_total{stream="tv1"}[1m])
# a saída total do stream por todos os destinos
sum by (name) (rate(stream_push_bytes_total{name="tv1"}[1m]))
# canais que rompem: reconexões em cinco minutos
increase(stream_push_reconnects_total[5m]) > 0
# perdas no caminho até o receptor por SRT/RIST
rate(stream_push_retransmitted_packets_total[1m])
Como ler o estado¶
status: errorcomerrornão vazio — nada está sendo enviado, e a causa está nomeada. O destino continua se levantando sozinho, uma vez a cada cinco segundos.status: running, masbitrate_kbitzerado — a conexão está lá, os dados não: confira se o próprio sinal está chegando na entrada.status: runningcomreconnects_totalcrescente — o canal rompe e se recupera;opened_atmostra a idade da conexão atual.status: disabled— o destino está desligado pelo interruptor. Os contadores ficam congelados nos últimos valores; isso não é perda de dados.
Os alertas para começar¶
| Pergunta | Onde olhar | O sinal do problema |
|---|---|---|
| O sinal chega? | pushes[].status, bitrate_kbit; rate(stream_push_bytes_total[1m]) |
o status não é running; velocidade zerada num stream vivo |
| Por que não chega? | pushes[].error |
o texto da causa: conexão recusada, tempo esgotado, handshake rejeitado |
| O canal até o receptor rompe? | reconnects_total, opened_at |
as reconexões crescem; opened_at fica mais novo a cada poucos minutos |
| O caminho perde pacotes? | retransmitted_packets_total |
cresce com o status estável |
| A saída dá conta? | o bitrate_kbit do destino contra o bitrate do stream |
a velocidade do destino é sistematicamente menor |
O que vem depois¶
- Entrega para a rede e entrega por SRT — com o que um destino é configurado.
- Erros de entrada — a outra metade do quadro: o que chega na cabeça de rede.
- Monitoramento — os canais de estatística como um todo.