Forem

Ilana Cabral Coutinho for WoMakersCode

Posted on

Observabilidade em Sistemas de Software: Práticas, Técnicas e Ferramentas

Autoras: Ilana Cabral Coutinho, Alícia Oliveira e Anna Raphaela Berto

A observabilidade é um conceito fundamental no desenvolvimento de software moderno, especialmente em sistemas distribuídos e microsserviços. Neste artigo, vamos explorar o que é observabilidade, suas técnicas e as ferramentas de mercado que podem ser utilizadas para implementá-la em projetos.

O que é Observabilidade?

Observabilidade é a capacidade de medir o estado interno de um sistema com base em sua saída externa. Em outras palavras, é a habilidade de entender o que está acontecendo dentro de um sistema apenas observando os dados que ele gera, como logs, métricas e traces.

Image description

Diferença entre Monitoramento e Observabilidade

  • Monitoramento: Envolve coleta de dados sobre o desempenho e a saúde do sistema.
  • Observabilidade: Vai além do monitoramento, permitindo uma compreensão profunda e a capacidade de diagnosticar problemas complexos.

Logs: O Primeiro Pilar da Observabilidade

Os logs são registros de eventos e atividades realizadas por um sistema. Esses registros são essenciais para monitorar, diagnosticar problemas e garantir a segurança e o desempenho das operações. Na observabilidade, um dos principais objetivos do uso de logs é obter insights valiosos, identificar padrões comportamentais e antecipar tendências de funcionamento de uma aplicação.

Boas Práticas para Logs

  1. Estruturação: Para facilitar a observabilidade, é fundamental que os logs sejam estruturados de forma padronizada para facilitar a leitura, manutenção e análise. Cada mensagem de log no formato JSON representa um objeto com pares chave-valor, facilitando a identificação dos dados. Essa padronização é capaz de melhorar as análises, a legibilidade e o acesso às informações geradas pelos logs.

Image description

Um exemplo em Java com a biblioteca Logback pode ser visto abaixo mostrando os níveis de logs que podemos capturar:

Image description

  1. Níveis de Log: Os logs podem ser categorizados de acordo com seu nível, de acordo com o tipo e objetivo que o log é implementado.
  • INFO: serve basicamente para registrar informações gerais do sistema, não necessitam necessariamente de uma ação. Registram por exemplo logs de envio e recebimento bem sucedidos para atividades da aplicação.
  • DEBUG: utilizado para caracterizar os logs que são utilizados para identificar características específicas ou debugar alguma funcionalidade do sistema. Utilizado principalmente para "troubleshooting" fornecendo informações técnicas.
  • ERROR: identifica logs que de fato representam algum erro ou comportamento indesejado que requer ação necessária para reverter este estado.

A utilização desses níveis na categorização dos logs além de ser uma boa prática, otimiza a detecção de informações e possíveis problemas, permitindo a identificação de forma mais rápida.

Ferramentas de Logs: ELK Stack

Uma solução popular para gerenciamento de logs é o ELK Stack (Elasticsearch, Logstash, Kibana):

  • Elasticsearch: Armazenamento e busca de grandes volumes de dados.

  • Logstash: Processamento e transformação dos logs.

  • Kibana: Visualização dos logs em uma interface gráfica.

Image description

Tipos de logs e suas aplicabilidades

Existem diversos tipos de logs, cada um capturando informações específicas que necessitam ser analisadas para diferentes propósitos. Alguns tipos comuns e suas aplicações:

  • Logs de Alteração: Registra as modificações realizadas em um sistema, como atualizações de configuração ou mudanças de código. Eles podem identificar a autoria e demais informações fundamentais para a rastreabilidade de mudanças.

Exemplo: Sistema que registra logs durante uma atualização de software com informações de alteração como quais arquivos foram modificados e por qual desenvolvedor, garantindo que todas as mudanças sejam documentadas.

  • Logs de Acesso: Registra informações de acesso a um sistema, registrando pedidos de acesso, solicitação a acesso de arquivos, autenticação de usuários, assim como os dados do usuário. Esses logs são fundamentais para auditorias de segurança.

Exemplo: Implementação de logs para um usuário acessar ou editar um documento sensível, o sistema gera um log de acesso que registra a data, hora e informações de usuário, permitindo o rastreamento dos acesso aos documentos.

  • Logs de ameaças: São logs que registram atividades suspeitas que ameaçam a segurança de um sistema. São particularmente úteis rastrear comportamentos anômalos e prevenir incidentes de segurança, como invasões, ataques de negação de serviço, ataques de força bruta, ou vazamento de dados e exploração de vulnerabilidades.

Exemplo: Logs de registro caso um usuário faça várias tentativas de login fracassadas, um log de ameaça é gerado, contendo o endereço IP, o horário das tentativas e informações do usuário. Com base nesses logs, o sistema pode disparar alertas ou bloquear o acesso após um número anormal de tentativas.

Métricas: O Segundo Pilar da Observabilidade

Métricas são dados quantitativos que medem o desempenho de um sistema e são essenciais para monitorar sua saúde e identificar tendências. Elas geralmente se dividem em dois grupos principais: métricas de sistema e métricas de aplicação. As métricas de sistema monitoram recursos como uso de CPU, memória e disco, enquanto as métricas de aplicação identificam aspectos como taxas de requisição, latências e erros. Essas métricas fornecem uma visão geral do comportamento do sistema tornando o acompanhamento mais eficiente.

Ferramentas para Métricas: Prometheus e Grafana

As mais populares para monitoramento de métricas incluem:

  • Prometheus: Ferramenta de código aberto para coleta e armazenamento de métricas como séries temporais.

  • Grafana: Plataforma de análise e monitoramento de dados que suporta várias fontes de dados, incluindo o Prometheus, ideal para criação de dashboards interativos.

Exemplo de monitoramento

Image description

Traces: O Terceiro Pilar da Observabilidade

O que são traces?

Os traces rastreiam o fluxo de uma requisição através de diferentes serviços em um sistema distribuído. Eles são cruciais para entender a latência e identificar gargalos. Os traces possuem como componentes os spans, que representam uma unidade de trabalho, e o Tracing ID, que é um identificador único para uma requisição completa.

Ferramenta para Tracing: Jaeger

Uma ferramenta popular para tracing é o Jaeger, que ajuda a monitorar e solucionar problemas de transações em sistemas distribuídos, facilitando a detecção de problemas de latência e gargalos.

Image description Exemplo de Código em Java com OpenTelemetry e Jaeger

Image description
O Jaeger facilita a visualização do caminho percorrido por uma requisição e identifica pontos de falha ou lentidão.

Conclusão

A observabilidade desempenha um papel crucial na garantia do desempenho, segurança e confiabilidade de sistemas modernos, especialmente em ambientes complexos como os de microsserviços e sistemas distribuídos. Ao combinar logs estruturados, métricas precisas e traces detalhados, as equipes de desenvolvimento conseguem uma visão completa do estado e comportamento de suas aplicações, permitindo uma resposta rápida a problemas e a otimização contínua dos serviços.

Ferramentas como ELK Stack, Prometheus, Grafana e Jaeger são essenciais para implementar essa abordagem, oferecendo suporte para monitoramento, análise de dados e identificação de falhas. Quando bem implementada, a observabilidade não apenas melhora a capacidade de resposta e solução de problemas, mas também promove um desenvolvimento mais eficiente e resiliente, preparando as organizações para enfrentar desafios e evoluir suas aplicações de forma sustentável.

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more →

Top comments (2)

Collapse
 
mggcmatheus profile image
Matheus

Muito bom.

Collapse
 
jjpaulo2 profile image
João Paulo Carvalho

Baita artigo! Parabéns às autoras! 🥳

Billboard image

Deploy and scale your apps on AWS and GCP with a world class developer experience

Coherence makes it easy to set up and maintain cloud infrastructure. Harness the extensibility, compliance and cost efficiency of the cloud.

Learn more

👋 Kindness is contagious

Discover a treasure trove of wisdom within this insightful piece, highly respected in the nurturing DEV Community enviroment. Developers, whether novice or expert, are encouraged to participate and add to our shared knowledge basin.

A simple "thank you" can illuminate someone's day. Express your appreciation in the comments section!

On DEV, sharing ideas smoothens our journey and strengthens our community ties. Learn something useful? Offering a quick thanks to the author is deeply appreciated.

Okay