Métricas do Prometheus¶
control.observability.metrics
O scrape do Prometheus: o seu próprio monitoramento¶
A opção «contadores estendidos»
Os endpoints do scrape estão disponíveis só com a opção de licença de contadores estendidos. Sem ela, use o servidor Prometheus embutido e o Retroview.
Para instalações com infraestrutura de monitoramento própria, o Sapsan serve métricas no formato de texto do Prometheus:
GET /streamer/api-v4/live-metrics— streams e entradas;GET /streamer/api-v4/sessions-metrics— sessões de reprodução;GET /streamer/api-v4/dvr/metrics— discos e catálogo do arquivo;GET /streamer/api-v4/runtime/metrics— o processo e o alocador.
Diferenças em relação ao servidor Prometheus embutido: o histórico fica guardado do seu lado e é limitado só pelo retention da sua TSDB; a profundidade completa está disponível, incluindo as métricas de protocolo por PID/SRT/RTP; o alerting é o seu alertmanager. Os contadores são monótonos e sobrevivem à observação de restarts — este é também o canal para a conciliação de faturamento do seu lado.
Métricas Prometheus¶
GET /streamer/api-v4/runtime/metrics serve métricas do processo em formato Prometheus (incluindo o alocador jemalloc). Ao lado estão as métricas de live, de sessões e de DVR: /live-metrics, /sessions-metrics, /dvr/metrics (veja o Admin API). Os endpoints do scrape exigem a opção de licença de contadores estendidos; sem ela, os gráficos são servidos pelo servidor Prometheus embutido (um datasource Grafana pronto). O percurso completo pelos canais de estatística, os campos e as receitas de alertas está na página Estatísticas.
Receitas¶
| Pergunta | Onde olhar | O sinal do problema |
|---|---|---|
| O stream está vivo? | status na API; rate(stream_input_bytes_total[1m]) no Prometheus embutido |
status não é running; a velocidade de captura despencou para zero |
| A reserva está pronta? | inputs[] na lista de estatísticas |
status é error ou unchecked; checked_ago_ms muito acima do intervalo de verificação |
| Estamos vivendo na reserva? | source.url; num_sec_on_secondary_input |
a URL não é a primeira do config; os segundos na reserva seguem crescendo |
| A entrada está degradando? | input.errors, input.retries; as causas — contadores estendidos ou Retroview |
os contadores crescem com o stream vivo |
| O push chega? | pushes[].status e bitrate_kbit; rate(stream_push_bytes_total[1m]) |
status não é running; velocidade zerada com o stream vivo |
| Por que o push não funciona? | pushes[].error |
a causa em palavras: conexão recusada, tempo limite, recusa de publicação |
| O canal até o receptor rompe? | pushes[].reconnects_total, opened_at |
as reconexões crescem; opened_at fica mais novo a cada poucos minutos |
| Há força bruta contra uma entrega SRT com mapa de clientes? | scrape do nó: srt_handshake_attempts_total, srt_handshake_secret_candidates_total |
muitos candidatos de segredo por tentativa — força bruta; um par — um espectador normal |
| A entrega a um espectador está degradando? | srt.health nas sessões; a série stream_play_srt_session_lost_packets_total |
veredicto degraded ou bad; as perdas crescem |
| O arquivo está sendo escrito? | dvr.to na lista; dvr.write.segments_failed no GET individual |
to fica atrás da hora real; segments_failed cresce |
| Há buracos no arquivo? | dvr.recorded_hours contra a janela to - from |
as horas gravadas são notavelmente menos que a largura da janela |
| Os discos dão conta? | segments_written_slow/_delayed (opção); dvr_disk_free_bytes no scrape |
a fatia de escritas lentas cresce; o espaço livre derrete mais rápido que o esperado |
| O servidor está saudável? | runtime/metrics: process_rss_bytes; o Prometheus embutido: stream_memory_bytes |
a memória cresce monotonicamente sem crescimento de carga |
| O que aconteceu de madrugada? | Retroview | — |
Entrega de HLS MPEG-TS¶
Segmentos incompletos, montagens fora do cache, campos da API e exemplos de alertas são descritos em contadores de HLS MPEG-TS.