rollfuse

Rollback Automático de Feature Flag com Métricas do Datadog

Como funciona

Um job seu lê uma métrica do Datadog e envia ao rollfuse, onde um guardrail calcula a média numa janela e aborta o rollout quando ela passa do limite que você definiu.

Um monitor do Datadog que chama alguém às duas da manhã por causa de um rollout detecta a regressão, mas não age sobre ela. A pessoa chamada ainda precisa achar o rollout e revertê-lo na mão. O rollback automático com métricas do Datadog fecha essa distância: o mesmo número que o seu time acompanha no Datadog chega a um guardrail do rollfuse, e o guardrail aborta o rollout sozinho quando o número passa de um limite.

O rollfuse não tem integração nativa com o Datadog. Ele não chama a API do Datadog e não lê os seus monitores. O que ele faz é agir sobre valores de métrica que você envia. Esta página mostra os dois jeitos de levar uma métrica do Datadog para o rollfuse e o que acontece quando ela chega.

O que o guardrail faz com a métrica

Um guardrail pertence a um rollout e observa uma definição de métrica. Enquanto o rollout está ativo, o rollfuse calcula de tempos em tempos a média das observações recebidas para essa métrica dentro da janela de avaliação do guardrail e compara essa média com o seu limite. Cada checagem fica registrada com o valor da métrica, o limite e a ação tomada.

Quando a média viola o limite, o rollfuse aborta o rollout pelo mesmo caminho do abort manual. A flag volta a servir a variação padrão para 100% daquele ambiente. Não há novo deploy: o código continua no ar, só para de receber tráfego enquanto alguém investiga.

A definição de métrica é criada uma vez por projeto, com nome, chave, tipo de agregação e unidade. Depois, criar o guardrail pede quatro campos obrigatórios:

{
  "metric_definition_id": "<id da sua definição de métrica>",
  "comparison_operator": "gt",
  "threshold": 0.02,
  "evaluation_window_seconds": 600
}

Esse corpo vai para POST /v1/rollouts/{rollout_id}/guardrails. comparison_operator é um de gt, gte, lt ou lte, e a janela precisa ser positiva. Leia como "aborte se a média dos últimos 10 minutos passar de 0,02", por exemplo uma taxa de erro acima de 2%.

Caminho 1: um job seu envia a métrica ao rollfuse

Um job agendado que você já roda (um cron, um worker, um passo da sua ferramenta de deploy) consulta o Datadog com as suas próprias credenciais do Datadog e envia cada valor ao rollfuse:

{
  "observations": [
    { "value": 0.013, "occurred_at": "2026-10-11T12:00:00Z" },
    { "value": 0.015, "occurred_at": "2026-10-11T12:01:00Z" }
  ]
}

Esse corpo vai para POST /v1/environments/{environment_id}/metric-definitions/{metric_definition_id}/observations, autenticado com uma Service Credential daquele ambiente que tenha o escopo metrics:write. value e occurred_at são obrigatórios em cada observação. Se qualquer observação do lote estiver malformada, o lote inteiro é recusado e nada é salvo.

Nesse caminho você controla a frequência de envio, e as chaves do Datadog nunca saem da sua infraestrutura.

Caminho 2: um conector busca de um endpoint que você expõe

Um conector do rollfuse faz um GET via HTTPS numa URL fixa, com o cabeçalho Authorization: Bearer <segredo>, lê a resposta em JSON e registra cada item como uma observação. Ele sincroniza de forma agendada, e você também pode disparar uma sincronização na hora.

O conector não consegue pedir ao Datadog "os últimos dez minutos" sozinho. O endpoint de consulta de séries temporais do Datadog, GET /api/v1/query, exige from e to como timestamps Unix em toda chamada (referência da API do Datadog, consultada em 11/10/2026), e o conector pede sempre a mesma URL fixa. Então a janela de tempo móvel precisa vir de um código seu: um endpoint pequeno que consulta o Datadog para a janela recente e devolve os valores em JSON. O tutorial de conectores mostra como testar o mapeamento, criar o conector e forçar uma sincronização.

Limites que vale saber antes de configurar

  • O limite mora no rollfuse. O monitor do Datadog e o guardrail são duas definições separadas. Se ajustar um, ajuste o outro.
  • Sem dado, sem abort. Se nenhuma observação chegar dentro da janela, a checagem fica registrada como dado insuficiente e o rollout não é abortado. Dá para configurar o guardrail para pausar o rollout depois de um tempo sem dados (pause_after_uncertain_seconds).
  • Guardrails existem em todos os planos, com um limite de quantos cada plano permite. No Growth e no Enterprise, são ilimitados.

Quem está de plantão continua recebendo o alerta do Datadog, se o monitor estiver configurado assim. A diferença é que o rollback não espera ninguém ler o alerta. Para testar num rollout de verdade, comece pelo tutorial de rollback automático.