DEV Community

Cover image for Observabilidade
Andressa Abrantes
Andressa Abrantes

Posted on

Observabilidade

Introdução

Quantos “apagões de incêndio” você já enfrentou tentando entender o que realmente acontece dentro dos seus sistemas? E se, em vez de reagir a problemas, você pudesse preveni-los e solucionar a causa raiz antes mesmo que impactem seus usuários?

Com a crescente complexidade dos sistemas de software, equipes vivem em constante estado de alerta, “apagando incêndios” para corrigir falhas e garantir que tudo funcione perfeitamente. Com a explosão de microsserviços e arquiteturas distribuídas, esse desafio se intensificou: são incontáveis pontos de falha, interações complexas e um volume colossal de dados para analisar. Tentar prever e combater cada problema em um sistema tão intrincado se torna uma tarefa quase impossível, como tentar apagar um incêndio colossal usando apenas um balde d’água.

É nesse cenário desafiador que a Observabilidade surge como um "extintor de incêndio inteligente". Mais do que apenas “apagar incêndios” quando eles surgem, a Observabilidade fornece às equipes as ferramentas certas para prevenir - identificar gargalos e riscos potenciais, diagnosticar - compreender a causa raiz do problema com rapidez e precisão e solucionar- minimizar impactos e evitar que os problemas se repitam.

  1. Observabilidade

Mas o que é a Observabilidade? Vamos começar pelo termo. Segundo FONG-JONES, L. et al.(2018) o termo Observabilidade surge em 1960 no contexto da Teoria de Controle do engenheiro húngaro-americano Rudolf E. Kalman e essa teoria lida com sistemas dinâmicos (mecânicos, elétricos, etc.) e busca maneiras de controlá-los através da análise de suas entradas e saídas. Nesse contexto, ela se referia à capacidade de determinar o estado interno de um sistema (ex: posição, velocidade) apenas observando suas saídas (ex: sensores).

Engenheiros de software, diante da crescente complexidade dos sistemas modernos - com seus microsserviços, arquiteturas distribuídas e alta dinamicidade -, enxergaram na Observabilidade uma ferramenta poderosa para solucionar os desafios de monitoramento e gerenciamento. Essa adaptação para o mundo virtual, porém, exige uma mudança de paradigma. Para tornar essa mudança possível, diversas ferramentas de Observabilidade, como plataformas que integram métricas, logs e traces, além de soluções de rastreamento distribuído e análise de alta cardinalidade, vêm sendo desenvolvidas e aprimoradas, e vamos explorá-las mais adiante neste artigo.

FONG-JONES, L. et al.(2018) argumentam que o monitoramento tradicional se torna ineficaz e insuficiente diante da complexidade dos sistemas atuais. Baseado em métricas predefinidas e alertas para problemas conhecidos, ele opera sob a falsa premissa de que as falhas são previsíveis e que as equipes podem antecipar todas as métricas relevantes. Em um ambiente onde as falhas são imprevisíveis e interconectadas, essa abordagem se mostra limitada e reativa, deixando as equipes “apagando incêndios” sem entender a raiz dos problemas. A Observabilidade, por outro lado, oferece uma visão holística, permitindo investigar causas desconhecidas, fazer perguntas exploratórias e compreender o sistema em sua totalidade. Essa abordagem impacta diversas áreas da engenharia de software, indo além dos desenvolvedores - um tópico que também exploraremos mais adiante.

Ao abordarem sobre a adaptação do conceito de Observabilidade para o universo do software, FONG-JONES, L. et al.(2018) definem Observabilidade como a capacidade de entender e explicar qualquer estado que o sistema possa apresentar, por mais incomum ou complexo que seja. Essa compreensão, alcançada através da análise profunda dos dados do sistema, sem a necessidade de modificar o código, permite investigar e solucionar problemas de forma iterativa e exploratória.

Para ilustrar essa capacidade, os autores propõem uma série de perguntas desafiadoras, como:

  • "Você consegue entender o que qualquer usuário específico do seu software pode estar vivenciando em um determinado momento?"
  • "Você pode comparar grupos arbitrários de solicitações de usuários para identificar corretamente quais atributos são comumente compartilhados por todos os usuários que estão enfrentando comportamento inesperado em seu aplicativo?"
  • "Após encontrar atributos suspeitos em uma solicitação de usuário individual, você pode pesquisar em todas as solicitações de usuários para identificar padrões comportamentais semelhantes para confirmar ou descartar suas suspeitas?"

Ao refletir sobre essas e outras perguntas que abordam desde a experiência individual dos usuários até a capacidade de solucionar problemas complexos, o leitor começará a entender a importância crucial da observabilidade para as equipes de engenharia de software.

Observability is how well you understand your complex IT state.

fonte: https://newrelic.com/pt/blog/best-practices/what-is-observability

Característica Observabilidade Monitoramento
Objetivo Entender o “porquê” Detectar o “quê”
Abordagem Proativa Reativa
Dados Alta cardinalidade e dimensionalidade Baixa cardinalidade e dimensionalidade
Ferramentas Flexíveis e exploratórias Dashboards e alertas

Pilares da Observabilidade e Instrumentação: A Base para Sistemas Resilientes

Em ambientes complexos, garantir a saúde e o desempenho de um sistema requer mais do que simplesmente monitorá-lo superficialmente. É aí que entram os pilares da observabilidademétricas, logs e traces — para fornecer uma visão detalhada e completa de tudo o que está acontecendo no sistema. Porém, para que esses dados sejam realmente úteis, é fundamental uma boa instrumentação. Instrumentar corretamente um sistema significa garantir que ele gere as informações certas para monitoramento e diagnóstico, facilitando a manutenção e a correção de falhas.

Métricas: Monitorando a Saúde do Sistema

As métricas são números que mostram o estado atual de uma aplicação. Vamos imaginar um serviço de e-commerce. Entre as principais métricas monitoradas estariam a quantidade de transações por segundo, o tempo de resposta da API e o uso de memória dos servidores.

Por exemplo, suponha que uma métrica esteja mostrando que o tempo de resposta de uma API de checkout subiu de 200 ms para 2 segundos após o aumento de usuários em um evento de promoções. Essa métrica pode acionar um alerta automático, notificando a equipe sobre o comportamento anômalo, possibilitando uma ação rápida para resolver o problema antes que os clientes comecem a abandonar o carrinho de compras.

Ferramentas como Prometheus permitem a coleta dessas métricas, e Grafana pode ser usada para criar dashboards que mostram a evolução delas ao longo do tempo. Mas para que isso funcione bem, é essencial que a instrumentação seja configurada para gerar as métricas certas. Se o sistema não estiver instrumentado para coletar métricas detalhadas, você pode até saber que há um problema, mas não conseguirá entender suas causas.

Logs: O Registro de Eventos em Detalhe

Logs são como o diário de bordo do seu sistema, registrando tudo o que acontece, desde requisições HTTP até erros de execução. Para exemplificar, imagine um sistema de gestão de pedidos que começa a registrar um erro específico quando clientes tentam atualizar o endereço de entrega.

Um log bem instrumentado capturaria os detalhes desse erro: o timestamp, a requisição falha, o ID do pedido e uma mensagem detalhando o problema. Esse tipo de log torna possível que os desenvolvedores identifiquem rapidamente a origem do erro — seja uma falha de validação de dados ou um problema com um serviço externo.

Se o sistema gerar logs sem muitos detalhes, a equipe de desenvolvimento pode perder muito tempo tentando reproduzir o erro. Além disso, se os logs forem mal formatados, será difícil analisá-los automaticamente. Ferramentas como Elasticsearch e Kibana são usadas para indexar e visualizar logs, o que torna mais simples encontrar problemas em sistemas complexos.

Por exemplo, um log estruturado para o erro de atualização de endereço poderia ser assim:

{
  "timestamp": "2024-09-28T14:33:45Z",
  "level": "ERROR",
  "service": "OrderService",
  "orderId": "12345",
  "message": "Failed to update shipping address",
  "errorDetails": "Validation failed: ZIP code format invalid"
}

Enter fullscreen mode Exit fullscreen mode

Com essa estrutura, fica fácil filtrar logs semelhantes e diagnosticar rapidamente o que está acontecendo.

Traces: Entendendo a Jornada Completa

Imagine que seu sistema de streaming de vídeo esteja recebendo reclamações de que vídeos demoram a carregar. No entanto, o problema não aparece consistentemente, e ocorre apenas para certos usuários em momentos específicos. Através de traces, é possível acompanhar o caminho completo de uma requisição — desde o momento que o usuário solicita o vídeo até o processamento final e a entrega do conteúdo.

Suponha que o trace mostre que a requisição passa por três microserviços: um para autenticação do usuário, outro para recuperar o catálogo de vídeos e um último para servir o vídeo em si. Ao observar os tempos de execução de cada serviço, você descobre que o serviço de catálogo está demorando 5 segundos para responder, muito mais do que os outros.

Com essa visão, é possível isolar o problema e trabalhar diretamente na otimização desse serviço, talvez ajustando as consultas ao banco de dados ou aumentando a capacidade de servidores. Ferramentas como Jaeger e Zipkin são usadas para rastrear e visualizar essas requisições distribuídas, facilitando a detecção de gargalos.

A Importância da Instrumentação

Agora, pense em um cenário onde um time configurou um sistema de observabilidade, mas deixou de instrumentar corretamente algumas partes críticas da aplicação. Talvez eles coletem métricas básicas, como uso de CPU, mas não instrumentaram suas APIs para gerar métricas detalhadas, como o tempo de resposta por endpoint. Ou talvez existam logs, mas eles são dispersos e pouco informativos, dificultando a depuração quando algo dá errado.

A ausência de boa instrumentação leva à perda de insights valiosos. A equipe pode ter informações suficientes para saber que existe um problema, mas não terá a granularidade necessária para resolver rapidamente. A solução é planejar a instrumentação desde o início, assegurando que cada parte do sistema gera métricas, logs e traces relevantes para monitoramento e diagnóstico.

Um exemplo prático seria uma aplicação de banco digital que, além de métricas básicas de uso do servidor, instrumenta detalhadamente seu serviço de transações. As métricas incluem o tempo de resposta para transferências entre contas, o número de transações por minuto e a taxa de falhas. Já os logs incluem eventos detalhados para cada transação, incluindo o status final e possíveis erros. Além disso, traces monitoram o caminho completo de uma transação, da autenticação até a atualização dos saldos.

Os três pilares da observabilidade — métricas, logs e traces — proporcionam uma visão completa de um sistema, permitindo monitorar sua saúde e diagnosticar problemas com eficiência. No entanto, sem uma instrumentação bem-feita, esses dados podem se tornar inúteis ou insuficientes. A instrumentação adequada garante que os sistemas gerem dados relevantes, facilitando a manutenção proativa e a resolução rápida de falhas. Ao combinar observabilidade com uma boa estratégia de instrumentação, as equipes podem criar sistemas mais robustos, resilientes e alinhados com as necessidades do negócio.

Tracing

Em sistemas distribuídos, como aqueles que usam microserviços, a complexidade das interações torna a detecção e resolução de problemas mais desafiadora. É nesse cenário que o tracing se torna essencial para observar e entender o comportamento dessas interações.

Tracing, ou rastreamento, é uma técnica que permite seguir o caminho que uma requisição faz ao percorrer diversos serviços e componentes dentro de um sistema. Ele oferece uma visão detalhada de ponta a ponta, capturando dados sobre a jornada de cada requisição, desde o ponto de entrada até o ponto final. Dessa forma, conseguimos identificar quais partes do sistema estão contribuindo para problemas de desempenho ou falhas específicas.

Integração com Logs e Métricas

O verdadeiro potencial do tracing é realizado quando integrado aos outros pilares da observabilidade: logs e métricas. Enquanto as métricas fornecem uma perspectiva quantitativa sobre a saúde do sistema, os logs oferecem detalhes granulares sobre eventos específicos. O tracing atua como um elo, conectando essas informações e proporcionando um contexto contínuo para compreender o ciclo de vida completo de uma requisição.

Dessa forma, métricas, logs e traces formam uma base sólida para a observabilidade, permitindo uma visão holística e detalhada do sistema.

Troubleshooting: Resolvendo Problemas Complexos

Uma das principais vantagens do tracing é o suporte ao troubleshooting. Ao utilizar tracing, as equipes podem reproduzir o fluxo de uma requisição com precisão, entender exatamente onde ocorreram falhas ou lentidões, e identificar o serviço ou componente responsável. Isso facilita a localização de problemas que seriam difíceis de diagnosticar apenas com logs ou métricas.

Conclusão

A compreensão da observabilidade é fundamental para profissionais de tecnologia, pois permite monitorar e entender o comportamento de sistemas complexos. Com conhecimentos em tracing, logging e métricas, as equipes podem tomar decisões informadas, melhorando continuamente a experiência do usuário e alinhando a tecnologia aos objetivos de negócio.

A observabilidade, embora conceitualmente antiga, encontra uma nova aplicação em sistemas de software modernos, os quais exigem uma mudança de paradigma devido à sua crescente complexidade.

A imprevisibilidade das falhas nesses sistemas torna o monitoramento tradicional ineficaz, demandando uma abordagem que permita analisar dados de forma abrangente e flexível para investigar qualquer problema, sem necessidade de predefinições. Ferramentas de observabilidade devem ir além da simples coleta de métricas, logs e traces, priorizando alta cardinalidade, dimensionalidade e explorabilidade dos dados para uma investigação profunda e eficaz.

Artigo feito por: @andressa_abrantes @kelvia_santos e @ana_juliarauber

Referências:

FONG-JONES, L. et al. Observability Engineering: Achieving Production Excellence. Sebastopol: O’Reilly Media, 2018. Disponível em: https://learning.oreilly.com/. Acesso em: 11 set. 2024.

Top comments (0)