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

Para os destinos SRT e RIST, a linha de estatísticas mostra a taxa atual em retransmissões/s. Um único gráfico abaixo compara a saída de rede com os erros e as retransmissões:

  • Bitrate — velocidade de envio pela rede em Mbit/s, no eixo esquerdo.
  • Erros — erros de envio por segundo, no eixo direito.
  • Retransmissões — retransmissões por segundo, no mesmo eixo direito, em eventos/s.

O gráfico mostra até seis horas de histórico. As taxas usam uma janela de dois minutos; os pontos têm intervalo de um minuto e os dados são atualizados a cada 30 segundos. As taxas exibidas são arredondadas para duas casas decimais. Medições ausentes interrompem as linhas; dados indisponíveis são indicados por «—» e não são tratados como uma taxa de zero. Uma taxa de retransmissões diferente de zero indica que o transporte está reenviando pacotes no caminho até o receptor.

O campo da API retransmitted_packets_total continua sendo um contador cumulativo de retransmissões. O servidor Prometheus incorporado calcula a taxa a partir do histórico do contador, considerando seus reinícios; o console mostra o resultado de sum(rate(stream_push_retransmitted_packets_total{name="tv1",push="relay"}[2m])).

Saída de rede de um push SRT em um enlace com perdas: bitrate à esquerda, erros e retransmissões por segundo à direita

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

A página de pushes

A página Pushes dá uma visão transversal de todos os pushes ativos e do histórico dos fechados. É útil quando a pergunta não é "o que está acontecendo com os destinos deste stream?", mas "o que a cabeça de rede está enviando agora e quão saudável está cada push?"

A tabela de ativos tem uma linha por cada push em execução: stream, nome do push, endpoint, nó, status, tempo ativo, bitrate, reconexões, RTT e retransmissões. Os filtros acima da tabela permitem restringir a visão por stream, push, proprietário, nó ou transporte.

Episódios de push ativos na página Pushes

Clicar em uma linha abre o painel de detalhes. Ele mostra os totais do registo e, quando há histórico suficiente, gráficos por minuto:

  • Bitrate — a taxa de envio do push.
  • Eventos — erros, reinícios e paradas do operador ao longo da linha do tempo.
  • Para pushes UDP: frames atrasados e pacotes MPEG-TS atrasados — o custo de um caminho de datagramas sobrecarregado.
  • Para pushes SRT: RTT, detalhamento de perdas (pacotes perdidos, too-late e drop-request) e retransmissões vs NAKs.

Detalhe de um push SRT com gráficos de RTT, perdas e retransmissões

Os registos fechados são listados abaixo da tabela ativa com seu motivo de fechamento, duração e totais. O mesmo gráfico de detalhes está disponível para um registo fechado, congelado na janela de sua vida.

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 — o scrape do nó, rótulo stream
rate(stream_push_bytes_total{stream="tv1"}[1m])

# a saída total do stream por todos os destinos — o servidor integrado, rótulo name
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
sum(rate(stream_push_retransmitted_packets_total{name="tv1",push="relay"}[2m]))

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