4.9 Métricas vs Logs vs Traces
Quando falamos em monitoramento de sistemas modernos, é comum encontrar três tipos principais de informações utilizadas para observar o comportamento das aplicações: métricas, logs e traces. Esses três elementos formam a base do que hoje se chama de observabilidade de sistemas.
Cada um desses tipos de informação serve para responder perguntas diferentes sobre o funcionamento de uma aplicação em produção.
Métricas
As métricas são valores numéricos coletados ao longo do tempo que descrevem o estado ou o comportamento de um sistema. Elas são geralmente armazenadas como séries temporais, ou seja, valores associados a um instante de tempo.
Exemplos de métricas comuns incluem:
uso de CPU de um servidor;
consumo de memória de um contêiner;
número de requisições recebidas por uma API;
tempo médio de resposta de um serviço;
número de mensagens processadas por um consumidor de fila.
Métricas são extremamente úteis para acompanhar tendências e detectar anomalias. Por exemplo, se o tempo médio de resposta de uma API começa a aumentar gradualmente ou se o consumo de memória cresce de forma inesperada, isso pode indicar que algo não está funcionando corretamente.
Ferramentas de monitoramento modernas coletam essas métricas automaticamente e permitem visualizar gráficos que mostram como o sistema se comporta ao longo do tempo.
Logs
Os logs são registros detalhados de eventos que ocorrem dentro de um sistema. Diferentemente das métricas, que normalmente são valores numéricos agregados, os logs são mensagens textuais que descrevem acontecimentos específicos.
Exemplos de logs incluem:
mensagens indicando que um servidor foi iniciado;
erros ocorridos durante a execução de uma aplicação;
requisições recebidas por um serviço;
exceções geradas por um programa.
Logs são particularmente úteis para investigar problemas específicos. Quando algo dá errado, os logs frequentemente fornecem pistas importantes sobre o que aconteceu dentro da aplicação.
Por exemplo, se uma API começa a retornar erros para os usuários, os logs podem revelar exatamente qual exceção foi gerada ou em qual parte do código o problema ocorreu.
Traces
Os traces (ou distributed traces) são utilizados principalmente em sistemas distribuídos, nos quais uma única requisição pode passar por vários serviços diferentes antes de ser concluída.
Um trace acompanha o caminho completo de uma requisição através do sistema, registrando quanto tempo cada componente levou para processá-la.
Imagine, por exemplo, uma requisição que passa pelas seguintes etapas:
um servidor web recebe a requisição do usuário;
a requisição é encaminhada para uma API em Flask;
a API consulta um serviço de inferência de modelo;
o resultado é retornado ao usuário.
Um trace permite visualizar essa sequência completa, mostrando quanto tempo cada etapa levou. Isso é extremamente útil para identificar gargalos de desempenho em arquiteturas baseadas em microserviços.
Como esses três elementos se complementam
Em sistemas modernos, métricas, logs e traces são usados em conjunto para oferecer uma visão mais completa do comportamento da aplicação.
De forma simplificada, podemos pensar neles da seguinte maneira:
métricas ajudam a detectar que existe um problema;
logs ajudam a entender o que aconteceu;
traces ajudam a identificar onde, no fluxo do sistema, o problema ocorreu.
Neste capítulo iremos focar principalmente no uso de métricas, pois elas são a base das ferramentas de monitoramento que utilizaremos para acompanhar o funcionamento dos serviços e contêineres criados nos capítulos anteriores.
Atualizado