Monitoramento sintético contínuo

TL;DR

O CI mede no merge; o RUM mede o usuário real. Entre os dois há uma terceira vigia: o monitoramento sintético contínuo — rodar o lab (Lighthouse/WebPageTest) em horários agendados contra produção, sempre nas mesmas condições. Sua força é a reprodutibilidade: como o ambiente é fixo, uma variação aponta uma mudança real (um deploy, um script de terceiros que mudou), sem o ruído do RUM. Cobre o que o RUM não vê (páginas de baixo tráfego, ambientes sem usuários ainda) e pega problemas antes de afetar gente. Ferramentas: WebPageTest, DebugBear, SpeedCurve, Checkly. Complementa — não substitui — o RUM.

O problema: os pontos cegos do CI e do RUM

Você tem CI (previne no merge) e RUM (mede usuários reais). Parece completo — mas há brechas entre os dois:

  • Uma página de baixo tráfego (uma landing de campanha, uma rota de admin) quase não gera dados de RUM, então uma regressão nela fica invisível no campo.
  • Uma mudança em produção que não passou pelo seu CI — um script de terceiros que o fornecedor atualizou, uma config de CDN, um teste A/B — degrada a performance sem nenhum PR seu para o CI pegar.
  • Você quer saber que algo quebrou antes de milhares de usuários sofrerem — o RUM, por definição, só te avisa depois que eles já viveram o problema.

O monitoramento sintético preenche essas brechas: um lab que roda sozinho, continuamente, contra produção, funcionando como uma sentinela reproduzível.

Sintético contínuo vs. as outras duas vigias


graph TB
    A["Lighthouse CI<br/>lab, no merge"] -->|previne| X[antes do merge]
    B["Sintético contínuo<br/>lab, agendado"] -->|vigia| Y[produção, sem usuários]
    C["RUM<br/>campo, contínuo"] -->|mede| Z[usuários reais]
    style A fill:#4A90D9,color:#fff
    style B fill:#F5A623,color:#000
    style C fill:#4A90D9,color:#fff

As três formam uma linha de defesa completa:

VigiaQuandoAmbientePega
Lighthouse CIa cada PRlabregressão na origem, antes do merge
Sintético contínuoagendado (cron)lab, contra produçãomudanças externas, páginas sem tráfego, antes dos usuários
RUMsemprecampo (usuários)a realidade, incluindo o que o lab não reproduz

O sintético contínuo é, essencialmente, o mesmo lab do Galho 1 (G1 nota 04), mas rodando repetidamente e agendado contra o ambiente de produção, guardando o histórico para detectar tendências.

A força: reprodutibilidade

O RUM é a verdade, mas é ruidoso (nota 04) — o p75 balança com a mistura de dispositivos e redes. O sintético é o oposto: ambiente fixo (mesmo dispositivo simulado, mesma rede, mesma localização), então quando o número muda, a página mudou — não a sorte da amostra. Isso o torna ideal para:

  • Isolar o efeito de mudanças externas: o número saltou entre duas rodadas sem deploy seu? Um terceiro mudou.
  • Testar fluxos, não só páginas: ferramentas sintéticas roteirizam jornadas (login → busca → checkout), medindo performance em passos que o RUM agrega mal.
  • Comparar com concorrentes: rode o sintético contra o site do concorrente (é público) e acompanhe a diferença ao longo do tempo.

As ferramentas comuns: WebPageTest (o mais detalhado, com filmstrip e waterfall), DebugBear e SpeedCurve (monitoramento sintético + RUM num produto), Checkly (checagens sintéticas com Playwright). Muitas combinam sintético e RUM, dando as duas óticas no mesmo dashboard.

Rodar sintético numa condição irreal e tirar conclusões de campo

O que acontece: o monitoramento sintético roda num data center rápido, com desktop e banda alta, mostra tudo verde — e o time conclui que a performance está ótima, enquanto o RUM mobile está vermelho. Por quê: um sintético mal-configurado (sem throttling de CPU/rede, perfil desktop) mede um cenário otimista que não representa ninguém. “Verde no sintético” não é “verde para o usuário”. Como evitar: configure o sintético para se aproximar do seu p75 real — perfil mobile de gama média, CPU e rede com throttling, localização representativa do seu público. E sempre cruze com o RUM: o sintético detecta mudança, o RUM confirma o impacto.

Monitoramento sintético contínuo em uma frase: é o lab rodando agendado contra produção, cuja reprodutibilidade permite isolar mudanças (deploys, terceiros) e cobrir páginas sem tráfego antes de os usuários sofrerem — a terceira vigia entre o CI (no merge) e o RUM (campo), que complementa mas nunca substitui o dado de usuário real.

Como explicar em inglês

“Between CI at merge and RUM in the field, there’s a third watchdog: continuous synthetic monitoring — running the lab, like WebPageTest or Lighthouse, on a schedule against production, always under the same conditions. Its strength is reproducibility: because the environment is fixed, a change in the number means a real change — a deploy, a third-party script — without RUM’s noise. It covers what RUM misses: low-traffic pages, and problems before real users hit them. But it’s not representative — it measures one condition I chose, so it detects and isolates changes, while RUM measures reality. I use both, and I configure the synthetic to match my real p75, not a fast data-center desktop.”

PTEN
Monitoramento sintéticoSynthetic monitoring
Checagem agendadaScheduled check
ReprodutívelReproducible
RepresentativoRepresentative
Jornada / fluxoUser journey / flow
Sentinela / vigiaWatchdog

O que vem a seguir

CI, sintético e RUM juntos te dizem que e quando algo regrediu. Falta o onde e o por quê — a perícia. Quando um alerta dispara, você abre o microscópio: o painel Performance do DevTools, a fundo, para achar a função, o recurso ou o reflow culpado.

Fontes

  • WebPageTestwebpagetest.org — teste sintético detalhado (waterfall, filmstrip) e monitoramento agendado.
  • web.dev (Google)Synthetic vs. real user monitoring — os papéis complementares de lab contínuo e RUM.
  • Checkly / SpeedCurve / DebugBear — docs de synthetic monitoring — checagens agendadas, roteirização de jornadas e alertas.