SLOs para ferramentas internas: metas de confiabilidade simples que funcionam
SLOs para ferramentas internas simplificados: defina metas mensuráveis de uptime e latência e mapeie alertas que um time pequeno consiga manter sem esgotamento.

Por que ferramentas internas precisam de SLOs (mesmo que só 20 pessoas as usem)
Ferramentas internas parecem pequenas porque o público é reduzido. O impacto muitas vezes não é: se seu dashboard de operações estiver fora, pedidos param; se o console de suporte estiver lento, clientes aguardam; se o painel administrativo quebra, consertos se acumulam.
Sem metas claras de confiabilidade, cada indisponibilidade vira uma discussão. Uma pessoa dá de ombros para um problema de 10 minutos, outra trata como crise. Você perde tempo com chats barulhentos, prioridades confusas e trabalho surpresa no pior momento.
SLOs resolvem isso ao estabelecer expectativas simples e mensuráveis. Eles respondem duas perguntas práticas: o que deve funcionar, e quão bem isso precisa funcionar para as pessoas fazerem seu trabalho.
O custo oculto do “vamos manter mais ou menos estável” aparece rápido. O trabalho para enquanto times esperam a recuperação da ferramenta. Pings de suporte se multiplicam porque ninguém sabe o que é normal. Engenheiros são arrastados para correções urgentes em vez de melhorias planejadas. Donos de produto deixam de confiar no sistema e começam a pedir backups manuais. Pequenos problemas persistem porque nunca cruzam uma linha clara.
Você não precisa de um programa de confiabilidade completo. Um time pequeno pode começar com algumas metas focadas no usuário, como “login funciona” ou “resultados de busca carregam rápido”, além de um conjunto pequeno de alertas ligados a ações reais.
Isso vale independentemente de como a ferramenta foi construída. Se você estiver usando AppMaster (appmaster.io) para criar apps internos, escolha as ações em que as pessoas confiam, meça uptime e tempo de resposta, e alerte somente quando isso afetar o trabalho.
SLOs, SLIs e SLAs em palavras simples
Esses três termos soam parecidos, mas são tipos diferentes de linguagem de confiabilidade. Confundi-los é uma fonte comum de frustração.
Um SLI (Service Level Indicator) é uma medição. É algo que você pode contar, como “percentual de requisições que tiveram sucesso” ou “quanto tempo a página levou para carregar.” Se você não consegue medir de forma confiável, não é um bom SLI.
Um SLO (Service Level Objective) é a meta dessa medição. Responde: qual nível é bom o suficiente para os usuários na maior parte do tempo? SLOs ajudam a decidir o que corrigir primeiro e o que pode esperar.
Um SLA (Service Level Agreement) é uma promessa, geralmente por escrito, muitas vezes com consequências. Muitas ferramentas internas não precisam de SLAs. Elas precisam de metas claras, não de compromissos no estilo legal.
Um exemplo rápido:
- SLI (uptime): Percentual de minutos em que a ferramenta fica acessível.
- SLO (meta de uptime): 99,9% de uptime mensal.
- SLI (latência): p95 do tempo de carregamento da página do dashboard.
- SLO (meta de latência): p95 abaixo de 2 segundos durante o horário comercial.
Repare no que falta: “nunca cair” ou “sempre rápido.” SLOs não tratam de perfeição. Eles tornam trade-offs visíveis para que um time pequeno escolha entre features, trabalho de confiabilidade e evitar esforço desnecessário.
Uma regra prática: se atingir a meta exigiria heroísmo, não é um SLO, é sonho. Comece com algo que seu time consiga manter com calma e aperfeiçoe depois se os usuários ainda sentirem dor.
Escolha poucas ações de usuário que realmente importam
Ferramentas internas falham de maneiras específicas: o painel admin carrega, mas salvar um registro roda para sempre; um dashboard de ops abre, mas gráficos não atualizam; um portal funciona, exceto que o login quebra após uma atualização. Você obtém mais valor ao focar nas ações que as pessoas dependem todo dia, não em cada página ou botão.
Comece nomeando o tipo de ferramenta, porque isso indica os caminhos críticos. Painéis administrativos tratam de “mudar algo com segurança”. Dashboards de ops tratam de “ver o que está acontecendo agora”. Portais tratam de “entrar, achar informação e submeter uma solicitação”.
Depois, escreva as principais jornadas de usuário em linguagem simples. Um bom conjunto inicial:
- Login e chegar à tela inicial
- Buscar ou filtrar e obter resultados
- Enviar um formulário (criar/atualizar) e ver uma mensagem de sucesso
- Carregar a visualização principal do dashboard com dados atualizados
- Exportar ou baixar o relatório usado no trabalho diário
Para cada jornada, defina o que conta como falha. Seja estrito e mensurável: um erro 500 é falha, mas também é uma falha um timeout, uma página que nunca termina de carregar ou um formulário que retorna sucesso enquanto os dados estão faltando.
Mantenha o escopo pequeno no início. Escolha de 1 a 3 jornadas que correspondam a dor real e risco real. Se as páginas on-call geralmente são “ninguém consegue logar” e “o botão salvar trava”, comece com Login e Enviar formulário. Adicione Busca depois, quando confiar nas medições e nos alertas.
Escolha SLIs que você realmente consegue medir
Bons SLIs são chatos. Eles vêm de dados que você já tem e correspondem ao que os usuários sentem quando a ferramenta funciona ou falha. Se você precisar de toda uma nova estrutura de monitoramento só para medi-los, escolha SLIs mais simples.
Comece com disponibilidade em termos que as pessoas entendem: consigo abrir a ferramenta e concluir a tarefa? Para muitas ferramentas internas, dois SLIs cobrem a maior parte da dor:
- Uptime da ferramenta (está alcançável e respondendo)
- Taxa de sucesso para 1 a 3 ações chave (login, busca, salvar, aprovar)
Depois adicione latência, mas mantenha estreito. Escolha uma ou duas telas/endpoints que representem a espera que os usuários reclamam, como carregar o dashboard ou submeter um formulário. Medir tudo normalmente gera ruído e discussões.
Decida a janela de medição desde o início. Uma janela rolante de 30 dias é comum para ferramentas estáveis; semanal funciona quando você lança com frequência e quer feedback rápido. Seja qual for sua escolha, mantenha-a para que tendências façam sentido.
Finalmente, escolha uma fonte de verdade por SLI e escreva-a:
- Checagens sintéticas (um bot aciona um health check ou executa um fluxo simples)
- Métricas do servidor (contagem de requisições, erros, latência do backend)
- Logs (contar eventos “success” vs “failed” para uma ação específica)
Exemplo: se seu app interno foi construído com AppMaster, você pode medir uptime com um ping sintético ao backend, taxa de sucesso a partir de respostas de API e latência a partir dos tempos de requisição do backend. O essencial é consistência, não perfeição.
Defina SLOs de uptime e latência realistas
Comece escolhendo um número de uptime que você consiga defender numa semana ruim. Para muitas ferramentas internas, 99,5% é um bom primeiro SLO. Parece alto, mas deixa espaço para trabalho de mudança normal. Pular direto para 99,9% costuma significar páginas fora do horário e releases mais lentos.
Para fazer o uptime parecer real, traduza em tempo. Um mês de 30 dias tem cerca de 43.200 minutos:
- 99,5% de uptime permite cerca de 216 minutos de downtime por mês
- 99,9% de uptime permite cerca de 43 minutos de downtime por mês
Esse downtime permitido é seu orçamento de erro. Se você queimá-lo cedo, pausa mudanças arriscadas e foca em confiabilidade até voltar ao patamar.
Para latência, evite médias. Elas escondem os momentos lentos que os usuários lembram. Use um percentil (normalmente p95) e estabeleça um limite claro atrelado a uma ação real. Exemplos: “p95 de carregamento do dashboard abaixo de 2 segundos” ou “p95 do Salvar completo em menos de 800 ms”.
Uma forma simples de definir o primeiro número é observar uma semana de tráfego real e então escolher uma meta um pouco melhor que hoje, mas não fantasiosa. Se o p95 já é 1,9s, um SLO de 2,0s é seguro e útil. Um SLO de 500 ms só vai criar ruído.
Combine os SLOs com sua capacidade de suporte. Um time pequeno deve preferir poucas metas alcançáveis em vez de muitas metas rígidas. Se ninguém pode responder em uma hora, não defina objetivos que assumam essa resposta.
Torne trade-offs visíveis: custo, risco e orçamento de erro
Um SLO mais apertado soa reconfortante, mas tem um preço. Se você move uma ferramenta de 99,5% para 99,9% de uptime, você também está dizendo “aceitamos bem menos minutos ruins”, o que geralmente significa mais paging e mais tempo gasto em confiabilidade ao invés de novas features.
A maneira mais simples de tornar isso real é falar em orçamento de erro. Com 99,5% mensal, você pode “gastar” cerca de 3,6 horas de downtime em um mês de 30 dias. Com 99,9%, você só tem cerca de 43 minutos. Essa diferença muda com que frequência você vai parar o trabalho de features para consertar confiabilidade.
Também ajuda ajustar expectativas para quando as pessoas realmente usam a ferramenta. Uma meta 24/7 é cara se a ferramenta é crítica apenas das 9h às 18h. Você pode definir um SLO para horário comercial (mais rígido) e outro mais folgado fora do horário (menos pages) para que o time possa dormir.
Manutenção planejada não deve contar como falha desde que seja comunicada e limitada. Trate como uma exceção explícita (janela de manutenção) em vez de ignorar alertas depois do fato.
Escreva o básico para que todos vejam os trade-offs:
- O número do SLO e o que os usuários perdem quando ele não é cumprido
- O orçamento de erro do mês (em minutos ou horas)
- Regras de paging (quem, quando e por quê)
- Expectativas para horário comercial vs 24/7, se diferentes
- O que conta como manutenção planejada
Após 4 a 6 semanas de dados reais, revise a meta. Se você nunca queima orçamento de erro, o SLO pode estar folgado demais. Se queima rápido e features param, provavelmente está apertado demais.
Mapeie SLOs para alertas que seu time consegue manter
Alertas não são seus SLOs. Alertas são o sinal de “algo está errado agora” que protege o SLO. Uma regra simples: para cada SLO, crie um alerta que importe, e resista em adicionar mais a não ser que você prove que reduzem downtime.
Uma abordagem prática é alertar em queima rápida do orçamento de erro (quão rápido você está usando o orçamento) ou em um limiar claro que corresponda à dor do usuário. Se seu SLO de latência é “p95 abaixo de 800 ms”, não mande página a cada pico lento. Página apenas quando for sustentado.
Uma divisão simples que mantém o ruído baixo:
- Página urgente: a ferramenta está efetivamente quebrada e alguém deve agir agora.
- Ticket não urgente: algo está degradando, mas pode esperar até o horário de trabalho.
Limiar concretos (ajuste conforme seu tráfego): se seu SLO de uptime é 99,5% mensal, page quando a disponibilidade cair abaixo de 99% por 10 minutos (queda clara). Crie um ticket quando cair abaixo de 99,4% por 6 horas (queima lenta). Para latência, page quando p95 estiver acima de 1,5 s por 15 minutos; abra ticket quando p95 estiver acima de 1,0 s por 2 horas.
Torne a propriedade explícita. Decida quem está on call (mesmo que seja “uma pessoa na semana”), o que significa reconhecer (por exemplo, em 10 minutos) e qual é a primeira ação. Para um time pequeno rodando um app interno construído em AppMaster, essa primeira ação pode ser: checar deploys recentes, ver erros de API e então fazer rollback ou redeploy se necessário.
Após todo alerta real, faça um pequeno follow-up: corrija a causa ou ajuste o alerta para que ele dispare menos vezes, mas ainda capture impacto real ao usuário.
Erros comuns que geram fadiga de alertas
A fadiga de alertas geralmente começa com boas intenções. Um time pequeno adiciona “só mais alguns” alertas, depois adiciona mais uma a cada semana. Logo, as pessoas param de confiar nas notificações e verdadeiras indisponibilidades passam batido.
Uma grande armadilha é alertar a cada pico. Ferramentas internas costumam ter tráfego em rajadas (processos de folha de pagamento, relatórios de fim de mês). Se um alerta dispara por um pico de 2 minutos, o time aprende a ignorá-lo. Relacione alertas a sinais de impacto no usuário, não ao ruído bruto de métricas.
Outra armadilha é pensar “mais métricas = mais segurança.” Na prática, muitas vezes significa mais páginas. Mantenha-se num pequeno conjunto de sinais que os usuários realmente sentem: falha no login, carregamento de página muito lento, jobs chave não terminando.
Erros que tendem a criar mais ruído:
- Dar página por sintomas (CPU, memória) em vez de impacto no usuário (erros, latência)
- Sem dono para um alerta, então ele nunca é ajustado ou removido
- Sem runbook, então todo alerta vira um jogo de adivinhação
- Confiar em dashboards como substituto de alertas (dashboards servem para olhar, alertas servem para agir)
- Inventar thresholds porque o sistema está mal instrumentado
Dashboards continuam importantes, mas devem ajudar a diagnosticar após um alerta disparar, não substituir o alerta.
Se você não tem medições limpas ainda, não finja que tem. Adicione instrumentação básica primeiro (taxa de sucesso, p95 de latência e um check “o usuário consegue completar a tarefa”), então defina thresholds com base em uma ou duas semanas de dados reais.
Checagens rápidas antes de ligar alertas
Antes de ativar alertas, faça um pré-voo curto. A maior parte da fadiga de alertas vem de pular uma dessas etapas básicas e depois tentar consertar sob pressão.
Um checklist prático para um time pequeno:
- Confirme 1 a 3 ações chave do usuário (por exemplo: abrir o dashboard, salvar uma atualização de ticket, exportar um relatório).
- Mantenha 2 a 4 SLIs que você consegue medir hoje (disponibilidade/taxa de sucesso, p95 de latência, taxa de erro do endpoint crítico).
- Limite-se a 2 a 4 alertas no total para a ferramenta.
- Combine a janela de medição, incluindo o que significa “ruim” (últimos 5 minutos para detecção rápida, ou últimos 30 a 60 minutos para reduzir ruído).
- Atribua um dono (uma pessoa, não “o time”).
Depois, certifique-se de que o alerta pode ser realmente acionado. Um alerta que dispara quando ninguém está disponível treina as pessoas a ignorá-lo.
Decida estes detalhes operacionais antes da primeira página:
- Horário de paging: só horário comercial ou 24/7 real
- Caminho de escalonamento: quem é o próximo se a primeira pessoa não responder
- O que fazer primeiro: um ou dois passos para confirmar impacto e fazer rollback ou mitigar
- Um hábito mensal simples: 15 minutos para revisar alertas disparados, incidentes perdidos e se o SLO ainda reflete o uso da ferramenta
Se você constrói ou altera a ferramenta (incluindo no AppMaster), repita o checklist. Código regenerado e novos fluxos podem mudar padrões de latência e erro, e seus alertas devem acompanhar.
Exemplo: um dashboard de ops pequeno com dois SLOs e três alertas
Um time de ops de 18 pessoas usa um dashboard interno o dia todo para checar status de pedidos, reenviar notificações falhadas e aprovar reembolsos. Se estiver fora ou lento, o trabalho para rápido.
Eles escolhem dois SLOs:
- SLO de uptime: 99,9% de carregamentos de página com sucesso em 30 dias (cerca de 43 minutos de “tempo ruim” por mês)
- SLO de latência: p95 do carregamento da página abaixo de 1,5 segundos durante o horário comercial
Agora adicionam três alertas que um time pequeno consegue lidar:
- Alerta de queda total (page loads falhando): dispara se a taxa de sucesso cair abaixo de 98% por 5 minutos. Primeira ação: checar deploys recentes, reiniciar a aplicação web, confirmar a saúde do banco de dados.
- Alerta de dashboard lento: dispara se p95 de latência estiver acima de 2,5 segundos por 10 minutos. Primeira ação: procurar uma query lenta ou um job em bloqueio, então pausar temporariamente relatórios pesados.
- Alerta de queima de orçamento de erro: dispara se estiverem a caminho de usar 50% do orçamento mensal de erro nos próximos 7 dias. Primeira ação: parar mudanças não essenciais até a situação estabilizar.
O que importa é o que acontece na semana seguinte. Se o alerta de orçamento de erro disparou duas vezes, o time toma uma decisão clara: adiar uma nova feature e dedicar dois dias para consertar a maior causa de latência (por exemplo, uma varredura sem índice). Se eles construíram a ferramenta no AppMaster, podem ajustar o modelo de dados, regenerar e redeployar código limpo em vez de empilhar gambiarras.
Como manter SLOs vivos sem transformar isso em um projeto
SLOs só ajudam se permanecerem conectados ao trabalho real. O truque é tratá-los como um hábito pequeno, não um novo programa.
Use um ritmo que caiba num time pequeno e encaixe em uma reunião existente. Um rápido olhar semanal pega deriva, e um ajuste mensal basta depois que você tiver dados reais.
Um processo leve que funciona:
- Semanal (10 minutos): confira o gráfico do SLO e os últimos alertas, confirme que nada está piorando sem que se note.
- Após qualquer incidente (15 minutos): marque a causa e observe qual ação de usuário foi afetada (login, busca, salvar, exportar).
- Mensal (30 minutos): reveja o padrão de incidentes recorrentes e escolha uma correção para o mês seguinte.
- Mensal (10 minutos): remover ou ajustar um alerta barulhento.
Mantenha melhorias pequenas e visíveis. Se “página lenta toda segunda de manhã” aparecer três vezes, faça uma mudança concreta (cachê de um relatório, adicionar um índice, agendar um job pesado para outro horário), então observe o SLI na semana seguinte.
Use SLOs para dizer não, de forma educada e clara. Quando pedirem uma feature de baixo valor, aponte o orçamento de erro atual e pergunte: “Essa mudança vai arriscar nosso fluxo de salvar ou aprovar?” Se você já está queimando orçamento, confiabilidade vence. Isso não é bloqueio, é priorização.
Mantenha a documentação mínima: uma página por ferramenta. Inclua as ações chave, os números do SLO, os poucos alertas atrelados a eles e o dono. Se a ferramenta foi construída no AppMaster, adicione onde ver logs/métricas e quem pode fazer deploys, e pare por aí.
Próximos passos: comece pequeno e melhore uma ferramenta de cada vez
A maneira mais fácil de tornar a confiabilidade real é manter a primeira configuração minúscula. Escolha uma ferramenta interna que cause dor real quando quebra (handoffs on-call, aprovações de pedido, reembolsos, edições de inventário) e defina metas em torno das poucas ações que as pessoas fazem todo dia.
Uma configuração mínima viável que a maioria dos times pode copiar:
- Escolha 1 ferramenta e 2 ações chave do usuário (por exemplo: abrir o dashboard e submeter aprovação).
- Defina 2 SLIs que você consegue medir agora: uptime do endpoint/página e p95 de latência para a ação.
- Estabeleça 2 SLOs simples (ex.: 99,5% de uptime mensal, p95 abaixo de 800 ms durante o horário comercial).
- Crie 2 a 3 alertas no total: um para queda total, um para latência sustentada e um para queima rápida do orçamento de erro.
- Reveja uma vez por semana por 10 minutos: os alertas ajudaram ou só fizeram barulho?
Quando isso estiver estável, expanda devagar: adicione mais uma ação ou mais uma ferramenta por mês. Se você não consegue dizer quem vai ser dono de um alerta, não o crie ainda.
Se você está construindo ou reconstruindo ferramentas internas, AppMaster pode tornar a manutenção mais fácil de sustentar. Você pode atualizar modelos de dados e lógica visualmente e regenerar código limpo conforme as necessidades mudam, o que ajuda a manter os SLOs alinhados com o que a ferramenta realmente faz hoje.
Tente construir uma ferramenta interna e adicionar SLOs básicos desde o primeiro dia. Você terá expectativas mais claras, menos surpresas e alertas que seu time pequeno conseguirá acompanhar.
FAQ
SLOs encerram discussões sobre confiabilidade ao transformar “mais ou menos estável” em uma meta clara que se pode medir. Mesmo com 20 usuários, uma indisponibilidade pode pausar pedidos, atrasar suporte ou bloquear aprovações — então ferramentas pequenas também podem ter grande impacto.
Escolha algumas ações de usuário que as pessoas fazem todo dia e que bloqueiam o trabalho quando falham. Iniciantes comuns são: login, carregar o dashboard principal com dados atualizados, busca/filtragem e submeter um formulário de criar/atualizar com sucesso.
Um SLI é a métrica que você mede (por exemplo, taxa de sucesso ou p95 de latência). Um SLO é a meta para essa métrica (por exemplo, 99,5% de sucesso em 30 dias). Um SLA é uma promessa formal com consequências — a maioria das ferramentas internas não precisa disso.
Um bom SLO inicial para muitas ferramentas internas é 99,5% mensal, porque é alcançável sem heroísmo constante. Se a ferramenta for verdadeiramente crítica durante o horário de trabalho, você pode apertar a meta depois de ver dados reais.
Converta a porcentagem em minutos para que todos entendam a troca. Em um mês de 30 dias, 99,5% permite cerca de 216 minutos de indisponibilidade, enquanto 99,9% permite cerca de 43 minutos — o que normalmente significa mais paging e mais trabalho de confiabilidade.
Use um percentil como p95, não uma média, porque médias ocultam os momentos lentos que os usuários lembram. Defina a meta em uma ação real (por exemplo, “p95 de carregamento do dashboard abaixo de 2s no horário comercial”) e escolha um limiar que você consiga manter com calma.
Comece com métricas de servidor e logs que você já tem: disponibilidade (alcançável e respondendo), taxa de sucesso para ações chave e p95 de latência para um ou dois endpoints/telas críticos. Adicione checagens sintéticas apenas para os fluxos mais importantes, mantendo a medição consistente e simples.
Padronize para um conjunto pequeno de alertas relacionados ao impacto no usuário, e só faça paging em problemas sustentados. Uma divisão útil é uma página urgente para “a ferramenta está efetivamente quebrada” e um ticket não urgente para degradação gradual que pode esperar o horário de trabalho.
A fadiga de alertas vem de disparar por todo pico ou por sintomas (CPU, memória) em vez de impacto no usuário (erros, latência). Mantenha poucos alertas, dê dono a cada um e, depois de cada alerta real, conserte a causa ou ajuste o alerta para que dispare menos mas continue pegando problemas reais.
Escolha as ações chave no seu app e então meça uptime, taxa de sucesso e p95 de latência para essas ações usando uma fonte de verdade consistente. Se você constrói ferramentas internas em AppMaster, mantenha as metas focadas no que os usuários fazem (login, salvar, buscar) e ajuste medições e alertas após mudanças ou regenerações para que correspondam ao comportamento atual.


