Skip to content

Monitorización de entrega

Una cabecera no puede preguntarle al receptor qué midió. Todo lo que tiene son sus propios contadores de envío, y se toman por destino.

La clave de la estadística es el par «nombre del stream, nombre del destino», el mismo que en la configuración del destino. Esto no es un formalismo: un stream sale a cinco destinos, y la frase «el stream está entregando 40 Mbit/s» no responde a si llega a alguno de ellos en concreto.

La opción «estadísticas de pushes»

La vista de entrega es una opción de licencia aparte. Corta solo los canales de datos: la sección pushes y los campos planos push_* de la API, las series stream_push_* del scrape y del servidor Prometheus integrado. La recolección en sí nunca se detiene, y los contadores siempre van a la telemetría de Retroview — el análisis en Retroview está disponible también sin la opción.

La vista en el panel

En la pestaña Egreso, debajo de la configuración de cada destino corre una línea de estadísticas en vivo: estado, velocidad, errores por segundo, reconexiones y, en uno fallido, la causa ahí mismo en la línea.

Estadísticas en vivo de los destinos en la pestaña Egreso

En la lista de streams, un destino roto enciende una marca junto al estado del stream: se ve que la entrega está rota sin abrir el stream.

La marca de un destino roto en la lista de streams

Contadores del destino

GET /streamer/api-v4/streams/stats/{name} trae un objeto indexado por nombre de 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 Qué significa Cómo usarlo
status running, error o disabled no running durante más de N minutos — alerta; disabled es normal, es un destino que el operador apagó
error la causa del estado error lo primero que hay que leer: conexión rechazada, tiempo agotado, handshake rechazado
proto, url el transporte y el destino tal como los definió el operador se ve adónde va realmente la señal
opened_at el momento en que arrancó el pusher actual se renueva en cada reconexión — el canal cae y vuelve
bitrate_kbit la velocidad de envío medida claramente por debajo del bitrate del stream — el envío no da abasto
errors_rate errores de envío por segundo crece con la conexión viva — el receptor o el canal se están degradando
bytes_total bytes enviados, acumulados conciliar volúmenes por destino
errors_total errores de envío, acumulados
reconnects_total resurrecciones de un pusher muerto crece con status: running — el canal se corta y se recupera
retransmitted_packets_total retransmisiones del transporte (SRT, RIST) crecen — pérdidas en el camino hacia el receptor
datagrams_total, frames_total las unidades enviadas: datagramas en los transportes de paquetes, fotogramas en RTMP

Los campos en cero se omiten de la respuesta: un destino RTMP no tiene datagramas, uno UDP no tiene ni fotogramas ni retransmisiones.

Junto a los contadores del stream hay tres sumas sobre todos los destinos — push_bytes_total, push_errors_total, push_reconnects_total. Responden «cuánto envió la cabecera en total» sin recorrer el mapa.

Series de Prometheus

Cada contador de destino es una serie propia con la etiqueta push:

Serie Etiquetas
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

En el servidor Prometheus integrado los mismos contadores están disponibles con las etiquetas name (stream) y push; cuando hay más de una cabecera, se añade node. La profundidad de protocolo — stream_push_srt_* y stream_push_rist_* — llega junto con la opción de contadores extendidos.

# velocidad de envío por destino
rate(stream_push_bytes_total{stream="tv1"}[1m])

# la salida total del stream por todos los destinos
sum by (name) (rate(stream_push_bytes_total{name="tv1"}[1m]))

# canales que se cortan: reconexiones en cinco minutos
increase(stream_push_reconnects_total[5m]) > 0

# pérdidas en el camino hacia el receptor por SRT/RIST
rate(stream_push_retransmitted_packets_total[1m])

Cómo leer el estado

  • status: error con un error no vacío — no se está enviando nada y la causa está nombrada. El destino sigue levantándose solo, una vez cada cinco segundos.
  • status: running pero bitrate_kbit en cero — la conexión está, los datos no: compruebe si la señal está llegando por la entrada.
  • status: running con un reconnects_total creciente — el canal se corta y se recupera; opened_at muestra la edad de la conexión actual.
  • status: disabled — el destino está apagado con el interruptor. Los contadores quedan congelados en sus últimos valores; esto no es una pérdida de datos.

Las alertas con las que empezar

Pregunta Dónde mirar Señal del problema
¿Llega la señal? pushes[].status, bitrate_kbit; rate(stream_push_bytes_total[1m]) el estado no es running; la velocidad en cero en un stream vivo
¿Por qué no llega? pushes[].error el texto de la causa: conexión rechazada, tiempo agotado, handshake rechazado
¿Se corta el canal hasta el receptor? reconnects_total, opened_at las reconexiones crecen; opened_at se renueva cada pocos minutos
¿El camino pierde paquetes? retransmitted_packets_total crece con el estado estable
¿La salida da abasto? el bitrate_kbit del destino contra el bitrate del stream la velocidad del destino es sistemáticamente menor

Qué sigue