Monitoramento versus observabilidade: A verdadeira diferença, com registros, métricas e rastreamentos
O monitoramento informa que algo está errado. A observabilidade ajuda você a descobrir o porquê, mesmo quando a falha é algo que você nunca previu. Acompanhe um incidente de checkout para ver como os dois funcionam juntos.
- O monitoramento monitora problemas conhecidos usando métricas e alertas predefinidos.
- Observabilidade é o quão bem você pode entender o estado interno de um sistema a partir de suas saídas.
- Logs, métricas e traces são sinais comuns, mas coletá-los não garante insights.
- Eles trabalham juntos: o monitoramento dispara o alarme e a observabilidade ajuda a encontrar a causa.
O painel está verde, mas os clientes reclamam que o checkout está quebrado. Se você já esteve nesta posição, já entende a diferença entre monitoramento e observabilidade. Seu monitoramento verificou apenas o que você pensou verificar, e essa falha é algo novo.
Este guia explica ambas as ideias sem a linguagem de marketing e segue um incidente fictício, desde o alerta até a causa raiz. Os logs, rastreamento e números são inventados para ilustrar o processo. Você também deve saber que fornecedores e profissionais traçam essa linha de maneira diferente, e alguns consideram isso, em parte, uma distinção de marketing. Focamos na parte prática.
A resposta curta
Monitoramento é uma atividade. Você decide antecipadamente o que observar, como CPU, taxa de erros ou espaço em disco, e define limites que acionam alertas. Ele responde: “O que me preocupava estava acontecendo?”
Observabilidade é uma propriedade do seu sistema. O termo vem da teoria de controle, onde descreve quão bem você pode inferir o estado interno de um sistema a partir de suas saídas externas. Na prática, responde: “O que está acontecendo e por quê, inclusive em relação a problemas que nunca previ?”
Pense em um carro. As luzes de advertência no painel estão monitorando. Eles cobrem um conjunto de problemas conhecidos. A porta de diagnóstico completa de um mecânico, que permite que alguém faça novas perguntas sobre qualquer parte do motor, está mais próxima da observabilidade.
Monitoramento versus observabilidade lado a lado
| Aspecto | Monitoramento | Observabilidade |
|---|---|---|
| Pergunta principal | Há algo errado? | Por que isso está errado? |
| Melhor para | Modos de falha conhecidos | Falhas desconhecidas e novas |
| Abordagem | Verificações e painéis predefinidos | Exploração aberta de dados ricos |
| Saída típica | Alertas e gráficos de status | Respostas para novas perguntas |
| Detalhe dos dados | Frequentemente agregado | Detalhado, por solicitação, sempre que possível |
| Configuração | Configurar verificações externas | Requer instrumentação do seu código |
| Usado por | Operações, equipe de plantão | Desenvolvedores e equipe de plantão |
Esta não é uma escolha entre os dois. Você ainda precisa de alertas para avisar quando procurar.
Por que o monitoramento por si só não é suficiente
Com um aplicativo em um servidor, a lista de coisas que podem dar errado é bastante curta, então você pode observar todas elas. Um sistema moderno pode ter dezenas de serviços, filas e APIs de terceiros, além de contêineres que vão e vêm. As falhas tornam-se combinações que ninguém previu: uma região, um tipo de cliente, uma versão específica do aplicativo e uma única dependência lenta.
Você não pode escrever um painel antecipadamente para uma pergunta na qual não pensou. Você precisa de dados que permitam perguntar depois.
Logs, métricas e rastreamentos
Esses três tipos de telemetria são frequentemente chamados de pilares da observabilidade. Cada um responde a uma pergunta diferente:
| Sinal | O que é isso | Respostas | Fraqueza |
|---|---|---|---|
| Métricas | Números ao longo do tempo | Quanto? Está piorando? | Pequenos detalhes em eventos únicos |
| Registros | Registros de eventos individuais | O que exatamente aconteceu? | Pode ser caro e barulhento |
| Vestígios | O caminho de uma solicitação através dos serviços | Para onde foi o tempo? | Requerem instrumentação e são frequentemente amostrados |
Métricas
http_requests_total{service="checkout", status="500"} 1832
http_request_duration_seconds{service="checkout", quantile="0.95"} 2.4
As métricas são baratas para armazenar e rápidas para consultar, o que as torna ideais para painéis e alertas. Tenha cuidado com rótulos de alta cardinalidade, como ID de usuário, em muitos sistemas métricos, pois eles podem aumentar drasticamente os custos.
Vestígios
Um rastreamento segue uma solicitação entre serviços. Cada etapa é um período com um horário de início e uma duração:
POST /checkout 2410 ms
├─ auth-service: verify token 18 ms
├─ cart-service: load cart 42 ms
├─ pricing-service: calculate 2290 ms <-- slow
│ └─ SELECT coupons ... 2265 ms
└─ payment-service: not reached
Um rastreamento torna óbvia uma etapa lenta, o que é muito difícil de ver em logs separados de serviços separados.
Registros
Os registros fornecem detalhes do que aconteceu em um determinado momento. Veremos como torná-los úteis em um momento.
Um passo a passo do incidente
Veja como as peças se encaixam, em um exemplo fictício.
| Passo | Sinal | O que aprendemos |
|---|---|---|
| 1. Alerta de incêndios | Métrica | A latência do Checkout p95 ultrapassou a meta de 1 segundo |
| 2. Divida | Métrica | Apenas o aplicativo móvel é afetado, não a web |
| 3. Inspecione uma solicitação | Rastreamento | A hora está no serviço de preços, em uma consulta de cupom |
| 4. Leia os detalhes | Registros | Todas as solicitações lentas usam um cupom da campanha de hoje |
| 5. Confirme a causa | Plano de consulta | A pesquisa de cupom não possui índice adequado |
| 6. Conserte | Implantação | Adicione o índice e observe a recuperação da latência |
O monitoramento tratou da etapa 1. Tudo depois disso foi observabilidade. Observe como cada pergunta surgiu da resposta anterior. Ninguém poderia ter criado um painel antecipadamente para “consulta de cupons de aplicativos móveis da campanha de hoje”. Para a correção em si, nosso guia para otimização de consultas SQL mostra como ler esse tipo de plano.
Registros melhores
Os registros de texto simples são feitos para olhos humanos e são difíceis de consultar. Logs estruturados usam campos que uma máquina pode filtrar:
# Hard to search
ERROR Payment failed for user 42 after 3 tries
# Easy to search
{"level":"error","event":"payment_failed","user_id":"42",
"attempts":3,"provider":"acme","trace_id":"a1b2c3","duration_ms":2410}
Com o segundo formulário, você pode perguntar imediatamente “quantas falhas por provedor na última hora?” O campo trace_id é especialmente valioso, pois vincula uma linha de log a toda a solicitação, em todos os serviços tocados.
Nunca registre senhas, tokens ou números de cartão e tome cuidado com os dados pessoais. Como explica nosso guia, JWTs podem ser reutilizados por qualquer pessoa que os leia em um log.
Dica: adicione o contexto que você deseja durante um incidente, como versão, região, nível do cliente e estado da sinalização do recurso. Ser capaz de dizer “apenas a versão 2.14 em uma região” geralmente resolve o problema por si só.
Os sinais dourados
Não sabe o que monitorar? O livro Site Reliability Engineering do Google sugere quatro sinais para sistemas voltados para o usuário:
| Sinal | Pergunta | Exemplo |
|---|---|---|
| Latência | Quanto tempo demoram as solicitações? | Tempo de resposta p95 e p99 |
| Trânsito | Quanta demanda existe? | Solicitações por segundo |
| Erros | Quantas solicitações falham? | Taxa de 5xx respostas |
| Saturação | Quão cheio está o sistema? | CPU, memória, uso do pool de conexões |
Use percentis para latência, já que as médias ocultam solicitações lentas, como mostramos em teste de carga versus teste de estresse.
Alertas em que as pessoas confiam
Se os alertas dispararem o tempo todo, as pessoas param de lê-los. Os bons seguem algumas regras:
- Alerta sobre sintomas que os usuários sentem. “Erros de checkout acima de 2%” superam “CPU em 85%”. CPU alta que não prejudica ninguém não deve acordar ninguém.
- Torne cada alerta acionável. Se ninguém precisar fazer nada, torne-o um item do painel ou remova-o.
- Link para um runbook. Diga ao respondente onde procurar e o que tentar.
- Revise-os regularmente. Exclua ou corrija qualquer alerta que tenha sido ignorado no mês passado.
Objetivos de nível de serviço
Um SLO transforma “o site deve ser rápido e confiável” em uma meta mensurável, como “99,9% das solicitações de checkout são bem-sucedidas em 30 dias”. Isso permite cerca de 0,1% de falhas, o que é conhecido como orçamento de erro. Se sobrar bastante, você poderá enviar mais rápido e, se estiver quase esgotado, poderá priorizar a confiabilidade. É uma forma útil de resolver discussões entre velocidade de entrega e estabilidade.
OpenTelemetria e ferramentas
OpenTelemetry é um padrão de código aberto e independente de fornecedor para geração e exportação de telemetria. É um projeto da Cloud Native Computing Foundation. Instrumentar com ele significa que você pode alterar seu back-end posteriormente, sem reescrever seu código. Não é um produto de armazenamento ou painel em si, então você pode combiná-lo com um:
| Objetivo | Exemplos de código aberto | Exemplos comerciais |
|---|---|---|
| Métricas | Prometeu | Datadog, Nova Relíquia |
| Painéis | Grafana | Datadog, Dynatrace |
| Registros | Loki, OpenSearch | Splunk, Elástico |
| Vestígios | Jaeger, Tempo | Favo de mel, Datadog |
Verifique você mesmo os recursos e preços atuais, pois esses produtos mudam com frequência. Os custos podem aumentar rapidamente com o volume de dados, portanto, use amostragem e defina limites de retenção.
Como começar
- Comece com os sinais dourados para seu serviço mais importante.
- Adicione um ou dois alertas sobre sintomas percebidos pelos usuários.
- Mude para registros estruturados com um ID de solicitação em cada linha.
- Adicione rastreamento à jornada principal do usuário com OpenTelemetry, pois a instrumentação automática pode abranger muitas estruturas comuns.
- Vincule implantações aos seus gráficos para que você possa ver se uma versão do seu pipeline de CI/CD causou uma alteração.
- Aprenda com cada incidente. Depois de cada um, pergunte quais dados teriam tornado a solução mais rápida e adicione-os.
Uma equipe pequena com um serviço não precisa de uma plataforma enorme. Métricas básicas, bons registros e alguns alertas podem ser suficientes. O rastreamento ganha seu sustento à medida que o número de serviços cresce.
Erros comuns
- Comprar uma ferramenta e chamá-la de observabilidade. O valor vem de uma boa instrumentação e de como você usa os dados.
- Tratar três pilares como uma lista de verificação. Separar dados sem nenhuma maneira de vinculá-los deixa você procurando por guias. IDs compartilhados são importantes.
- Coletando tudo. A telemetria não filtrada fica cara e adiciona ruído.
- Muitos painéis. Algumas visualizações confiáveis superam cem que ninguém abre.
- Pensando que isso substitui os testes. Você ainda precisa de testes antes do lançamento. No entanto, lançamentos Canary combinam bem com esses sinais.
Considerações finais
O monitoramento informa que algo deu errado e a observabilidade fornece os meios para descobrir o porquê. O teste prático é simples: quando surge um problema desconhecido, você consegue encontrar a causa sem enviar um novo código? Da próxima vez que você estiver em um incidente, anote todas as perguntas que não conseguiu responder. Essa lista é o seu roteiro.
Perguntas frequentes
Qual é a diferença entre monitoramento e observabilidade?
O monitoramento rastreia métricas e alertas predefinidos sobre problemas conhecidos. Observabilidade é a capacidade de compreender o estado de um sistema a partir de suas saídas, inclusive para problemas inesperados.
Quais são os três pilares da observabilidade?
Eles são logs, métricas e rastreamentos. Os logs registram eventos, as métricas medem valores ao longo do tempo e os rastreamentos seguem uma única solicitação entre serviços.
Preciso de observabilidade se tiver monitoramento?
Para um sistema pequeno e simples, um bom monitoramento e registros podem ser suficientes. À medida que os sistemas se tornam distribuídos e as falhas menos previsíveis, a observabilidade torna-se mais valiosa.
O que é OpenTelemetria?
É um padrão de código aberto e um conjunto de ferramentas para produzir e exportar logs, métricas e rastreamentos, para que você não fique vinculado a um único agente de fornecedor.
Quais são os quatro sinais dourados?
Eles são latência, tráfego, erros e saturação. A orientação SRE do Google recomenda isso como ponto de partida para monitorar sistemas voltados para o usuário.
Continue aprendendo
Precisa de ajuda com testes, WordPress ou SEO?
Ajudamos as equipes a fornecer software melhor e a expandir seus sites. Conte-nos no que você está trabalhando e sugeriremos um próximo passo claro.
Mais guias sobre testes, IA e desenvolvimento moderno
Gostou deste artigo? Escolha um tópico e vá direto para nossos tutoriais mais recentes.
Explicação das alucinações de IA: por que os modelos de linguagem inventam as coisas e como reduzi-las
Explicação das alucinações de IA: o que são, por que os modelos de linguagem as produzem, tipos comuns, como reduzi-las com aterramento e instruções…
Leia o artigo →DevOpsVariáveis de ambiente explicadas: arquivos .env, segredos e configuração bem feitos
Variáveis de ambiente explicadas com exemplos de Python que executamos: leitura e configuração, por que cada valor é uma string, arquivos .env, hera…
Leia o artigo →Desenvolvimento de softwareExplicação da limitação de taxa de API: algoritmos, cabeçalhos e tratamento de erros 429
Limitação de taxa de API explicada com uma simulação que executamos: token bucket, janela fixa, janela deslizante, 429 respostas, cabeçalhos de limi…
Leia o artigo →Automação de testesZombando em Python: unittest.mock, patch e os erros que fazem os testes mentirem
Zombaria em Python com unittest.mock, testado: Mock e return_value, side_effect, patch onde um nome é usado, especificação e autospec, zombaria de d…
Leia o artigo →Teste de softwareCobertura de código explicada: cobertura de linha versus filial e o que 100% realmente significa
Cobertura de código explicada com uma execução cobertura.py real: cobertura de linha, ramal e condição, leitura de um relatório, por que 100% de cob…
Leia o artigo →Bancos de dados e SQLDELETE vs TRUNCATE vs DROP em SQL: diferenças, reversão e quando usar cada um
DELETE vs TRUNCATE vs DROP explicado com SQL testado: o que cada um remove, rollback, aciona, redefinição de identidade, velocidade e como PostgreSQ…
Leia o artigo →Bancos de dados e SQLExibições SQL explicadas: crie, use e evite as armadilhas, com exemplos
Visualizações SQL explicadas com consultas que executamos: criação de uma visualização, resultados ao vivo, ocultação de colunas, desempenho, visual…
Leia o artigo →Desenvolvimento de softwareInterface TypeScript vs tipo: diferenças reais, testadas com o compilador
Interface TypeScript versus tipo, verificada com o compilador real: o que ambos podem fazer, o que apenas um pode fazer, mesclagem de declarações, e…
Leia o artigo →Desenvolvimento de softwarePython *args e **kwargs explicados: funções flexíveis com exemplos claros
Python *args e **kwargs explicados com o código que executamos: empacotamento e descompactação, ordem dos parâmetros, argumentos somente de palavras…
Leia o artigo →Desenvolvimento de softwareFunções Python Lambda: sintaxe, usos reais e quando não usá-los
Funções lambda do Python explicadas com o código que executamos: sintaxe, classificação com chave, mapa e filtro, fechamentos, armadilha de ligação …
Leia o artigo →Inteligência artificialO que são agentes de IA? Como eles funcionam, com um loop de agente simples que você pode executar
O que são agentes de IA? Um guia simples para o loop do agente, ferramentas, memória e proteções, com um pequeno loop Python que executamos, riscos …
Leia o artigo →DevOpsMonitoramento versus observabilidade: a verdadeira diferença, com logs, métricas e rastreamentos
Explicação do monitoramento versus observabilidade: falhas conhecidas e desconhecidas, logs, métricas e rastreamentos, um passo a passo do incidente…
Leia o artigo →DevOpsDocker Volumes vs Bind Mounts: persista os dados do contêiner da maneira certa
Volumes Docker versus montagens de ligação explicadas: por que os dados do contêiner desaparecem, volumes nomeados, montagens de ligação, tmpfs, exe…
Leia o artigo →Automação de testesTDD vs BDD: principais diferenças, um recurso criado de ambas as maneiras e quando usar cada um
TDD vs BDD explicado com um recurso de desconto construído em ambos os sentidos: refatoração vermelho-verde com o código que executamos, cenários da…
Leia o artigo →Desenvolvimento de softwareGit merge vs rebase: diferenças, exemplos e quando usar cada um
Git merge vs rebase explicado com saída real do log, uma tabela comparativa, a regra de ouro do rebase e um fluxo de trabalho seguro para equipes.
Leia o artigo →Desenvolvimento de softwareList comprehension em Python: sintaxe, exemplos e quando evitar
List comprehension em Python explicada: sintaxe, filtros, if-else, laços aninhados, tempos medidos e quando um laço for comum é a melhor escolha.
Leia o artigo →Bancos de dados e SQLSQL JOIN explicado com exemplos (Inner, Left, Right, Full)
Entenda os joins SQL passo a passo com tabelas e consultas de exemplo: INNER, LEFT, RIGHT, FULL, CROSS e SELF, além de erros comuns e dicas de desem…
Leia o artigo →