O número que mostra que um rollout está dando errado provavelmente já está num dashboard do Grafana: uma proporção de erros, uma latência p95, uma fila crescendo. O Grafana mostra esse número para uma pessoa. Um guardrail do rollfuse pode agir sobre ele: um conector lê a mesma consulta pela API HTTP do Grafana e, quando o valor ultrapassa um limite durante um rollout, o rollfuse aborta o rollout automaticamente.
Esta página mostra esse caminho para uma fonte de dados compatível com Prometheus no Grafana, e a alternativa de você mesmo enviar os valores.
Como o rollfuse lê uma métrica pelo Grafana
Um conector do rollfuse faz um GET numa URL HTTPS, envia o segredo dele como Authorization: Bearer <segredo> e transforma a resposta JSON em observações. Ele faz isso periodicamente e sempre que você pede uma sincronização.
O proxy de fonte de dados do Grafana repassa uma requisição para uma das fontes de dados dele, identificada pelo UID, em /api/datasources/proxy/uid/<datasource-uid>/.... O Grafana autentica chamadas à API com um token de conta de serviço (service account) enviado como Bearer. Juntando as duas coisas, a URL do conector é o endpoint de consulta instantânea do Prometheus que fica atrás do seu Grafana:
https://grafana.exemplo.com.br/api/datasources/proxy/uid/<datasource-uid>/api/v1/query?query=<sua PromQL, codificada para URL>
e o segredo do conector é o token da conta de serviço do Grafana.
Testamos isso contra um Grafana Cloud em 11/10/2026. Com o token da conta de serviço, o proxy respondeu 200 com a resposta padrão da API do Prometheus ({"status":"success","data":{"resultType":"vector","result":[...]}}). Sem o token, respondeu 401.
1. Defina a métrica no rollfuse
Uma definição de métrica dá nome à métrica e à unidade. Ela não guarda consulta; a PromQL fica na URL do conector.
POST /v1/projects/{project_id}/metric-definitions
{
"name": "Proporção de 5xx no checkout",
"key": "checkout_5xx_ratio",
"aggregation_type": "average",
"unit": "ratio"
}
2. Teste o mapeamento contra o seu Grafana
A resposta do Prometheus guarda cada série em data.result, com o ponto num par [timestamp, "valor"]. Dá para testar o mapeamento contra a URL real antes de salvar qualquer coisa; a pré-visualização busca uma vez e não grava nada:
POST /v1/projects/{project_id}/connectors/preview
{
"source_url": "https://grafana.exemplo.com.br/api/datasources/proxy/uid/<datasource-uid>/api/v1/query?query=<PromQL codificada para URL>",
"secret": "<token da conta de serviço do Grafana>",
"root_path": "data.result",
"value_field": "value.1",
"observed_at_field": "value.0",
"observed_at_format": "unix_seconds"
}
A resposta mostra o corpo que o Grafana devolveu e as observações que o mapeamento gerou, ou qual campo não foi encontrado.
3. Crie o conector
Os mesmos quatro campos de mapeamento vão para uma versão de modelo de contrato no seu projeto, que precisa ser enviada para revisão e aprovada antes que um conector possa usá-la. Depois crie o conector com a URL do Grafana, o token da conta de serviço como secret, a definição de métrica e o ambiente em que o rollout roda. O tutorial de conectores mostra a pré-visualização, a criação e a sincronização.
4. Anexe um guardrail ao rollout
Um guardrail referencia a definição de métrica, um operador de comparação, um limite e uma janela de avaliação. Você pode criá-lo no console ou pela API:
POST /v1/rollouts/{rollout_id}/guardrails
{
"metric_definition_id": "<metric_definition_id>",
"comparison_operator": "gt",
"threshold": 0.01,
"evaluation_window_seconds": 900
}
O tutorial de rollback automático mostra essa chamada e como ler o histórico de avaliações do guardrail.
Escreva uma consulta que devolva um número só
Cada série em data.result vira uma observação, e o guardrail compara a média de todas as observações da janela com o limite. Uma consulta que devolve uma série por pod ou por rota misturaria tudo numa média só. Agregue até sobrar uma série, por exemplo:
sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m]))
Se o seu serviço marca as métricas com a variação da flag, a consulta também pode medir só a variação que está sendo liberada, em vez do serviço inteiro.
Ou envie os valores você mesmo
Se o seu Grafana não é acessível pela internet, ou a fonte de dados não é compatível com Prometheus, um job seu pode rodar a consulta e enviar o resultado ao rollfuse com uma service credential que tenha o escopo metrics:write:
POST /v1/environments/{environment_id}/metric-definitions/{metric_definition_id}/observations
{
"observations": [
{ "value": 0.004, "occurred_at": "2026-10-11T14:00:00Z" }
]
}
O guardrail trata essas observações do mesmo jeito que as gravadas por um conector.
O que acontece numa violação
Quando a média da janela ultrapassa o limite, o rollfuse aborta o rollout: a flag volta a servir a variação padrão para 100% daquele ambiente, e o rollout para de avançar. Os SDKs recebem a nova configuração na próxima atualização. Nada é deployado de novo; o código novo só deixa de ser servido enquanto alguém investiga.
O rollback automático está disponível em todos os planos, dentro de um limite de guardrails por plano (Free: 1, Starter: 5, Growth e Enterprise: ilimitado). Veja os planos em preços.
Cada variação nos seus dashboards
O Grafana consegue mostrar como cada variação se comporta se o seu serviço exporta métricas marcadas com a variação. O repositório público rollfuse/examples-go-prometheus faz isso com o SDK de Go: marca checkout_requests_total e checkout_request_duration_seconds com variation_key, conta rollfuse_flag_evaluations_total por flag, variação e motivo, e traz um dashboard do Grafana para essas métricas. Essa instrumentação fica no código do seu serviço; o rollfuse não envia métricas para o Grafana.
Limites que vale conhecer
- O Grafana precisa ser acessível por HTTPS público. O conector só aceita URLs
httpse se recusa a conectar em endereços privados, de loopback ou link-local, então um Grafana que só responde dentro da sua rede não pode ser a fonte. Nesse caso, envie os valores você mesmo. - O token vai em toda sincronização. Use uma conta de serviço que só precise consultar aquela fonte de dados, e troque o segredo do conector quando trocar o token.
- Sem dado, sem rollback. Se o Grafana ou a fonte de dados param de responder por mais tempo que a janela de avaliação, a janela fica sem observações; o rollfuse registra isso como dados insuficientes, não como violação, e o rollout não é abortado.
- As avaliações do guardrail ficam no rollfuse. Um membro logado com a permissão
guardrails:manageas consulta no console ou pela API com a própria sessão; service credentials não conseguem lê-las. - O mapeamento acima vale para fontes de dados compatíveis com Prometheus. Outros tipos de fonte de dados respondem no próprio formato e precisam de um mapeamento próprio, se couberem no modelo do conector.
- Um projeto pode ter até 20 conectores.
Fontes
- Grafana, "Data source HTTP API", chamadas pelo proxy de fonte de dados: https://grafana.com/docs/grafana/latest/developers/http_api/data_source/ (acesso em 11/10/2026).
- Grafana, "Service accounts": https://grafana.com/docs/grafana/latest/administration/service-accounts/ (acesso em 11/10/2026).
- Prometheus, "HTTP API", consultas instantâneas e o formato de resultado vector: https://prometheus.io/docs/prometheus/latest/querying/api/ (acesso em 11/10/2026).
- rollfuse/examples-go-prometheus no commit 24f670b: https://github.com/rollfuse/examples-go-prometheus/tree/24f670b47c5f1e54996589d5c56bfdfb8e17a862 (acesso em 11/10/2026).