Skip to content

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.

Estatísticas ao vivo dos destinos na aba Saída

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.

A marca de um destino quebrado na lista de streams

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: error com error nã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, mas bitrate_kbit zerado — a conexão está lá, os dados não: confira se o próprio sinal está chegando na entrada.
  • status: running com reconnects_total crescente — o canal rompe e se recupera; opened_at mostra 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