DEV Community

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.

Top comments (0)