Por que a Observabilidade é essencial ao desenvolvimento?
Gostaria de discutir um problema comum que frequentemente encontramos ao criar um produto sem uma equipe experiente: a lacuna que surge quando nos apressamos para entregar rapidamente e atender às demandas do mercado. A pressão para priorizar outras demandas leva muitas equipes a deixarem a observabilidade de lado, resultando em soluções difíceis de manter e gerenciar. Primeiramente, considere como exemplo questões como:
- Quantas requisições estamos recebendo por minuto?
- Quantos erros estão ocorrendo?
- Qual é o uso médio de CPU e memória dessa aplicação?
- Para o Cliente ‘X’, qual é o nosso tempo médio de resposta?
Essas perguntas não devem ser secundárias; responda-as desde o início da aplicação. São essenciais e ajudam a direcionar a arquitetura da solução na direção certa, tanto técnica quanto comercialmente. Portanto, a incapacidade de medir ou entender o que está acontecendo com nosso software deve sempre ser uma prioridade e tratada como uma necessidade primária.
O que envolve a Observabilidade?
Logs: Registros de eventos ou ações que ocorrem dentro do sistema. Logs fornecem um histórico detalhado do que aconteceu, portanto são cruciais para diagnosticar problemas ou entender o comportamento do sistema.
Métricas: Medidas quantitativas que fornecem insights sobre o estado e o desempenho do sistema. Isso inclui tanto métricas de negócios quanto técnicas, como contadores (por exemplo, requisições por segundo, produtos vendidos, acessos à plataforma) e medidores (por exemplo, uso de CPU e memória).
Traces: Rastreamento de uma requisição ou transação através de vários serviços e componentes do sistema. O tracing ajuda a entender o fluxo de uma operação e a identificar gargalos ou falhas nas cadeias de chamadas. Mas com a ajuda do OpenTelemetry, criar e acessar essas informações se tornou muito mais fácil.
OpenTelemetry
OpenTelemetry (OTel) é uma convenção open-source que permite às equipes de desenvolvimento gerar, processar e transmitir dados de telemetria em um formato unificado. Desenvolvido pela Cloud Native Computing Foundation (CNCF), oferece protocolos e ferramentas padronizadas para coletar e direcionar métricas, logs e traces.
Sugestões e Exemplos:
Elastic Stack
Elastic Stack, como o nome sugere, refere-se ao conjunto de produtos da Elastic Cloud. Ferramentas open-source podem ser usadas sem custo quando implantadas on-premise ou autogerenciadas. Ao usar na Elastic Cloud, aplica-se uma taxa de assinatura. Em seguida, veja quais são os principais componentes:
- Elasticsearch: Um mecanismo distribuído de busca e análise baseado em Lucene. Ele é usado para indexar e armazenar dados, permitindo buscas e análises em tempo real de grandes conjuntos de dados.
- Logstash: Um pipeline de processamento de dados do lado do servidor que ingere dados de múltiplas fontes simultaneamente, transforma-os e, em seguida, os envia para um “stash” como o Elasticsearch.
- Kibana: Uma interface de usuário baseada na web para visualização de dados do Elasticsearch. O Kibana permite que os usuários criem e compartilhem dashboards que exibem visualizações de dados em tempo real.
- Beats: Uma plataforma de agentes leves para envio de dados, onde cada “beat” é um agente projetado para coletar tipos específicos de dados de máquinas remotas e enviá-los para o Elasticsearch ou Logstash.
Grafana Stack
Do mesmo modo, Grafana Stack consiste em ferramentas open-source utilizáveis sem custo on-premise ou com serviços gerenciados pagos. Os principais componentes incluem:
- Grafana: Uma plataforma de análise e visualização de dados que permite aos usuários criar, explorar e compartilhar dashboards visualizando dados em tempo real. O Grafana é conhecido por sua capacidade de integração com várias fontes de dados como Prometheus, InfluxDB, Elasticsearch, entre outros.
- Prometheus: Um sistema de monitoramento e alertas open-source que coleta e armazena métricas como dados de séries temporais, permitindo consultas e alertas baseados em consultas específicas.
- Mimir: Anteriormente conhecido como Thanos, o Mimir é uma solução de armazenamento de longo prazo para métricas do Prometheus, altamente escalável e multi-tenant. Foi renomeado após a Grafana Labs, a empresa por trás do Grafana, adquirir o projeto.
- Pyroscope: Um banco de dados de profiling contínuo open-source que oferece armazenamento e consulta eficientes, ajudando a entender o uso de recursos em aplicações até o nível de linha de código.
- Loki: Um sistema de agregação de logs horizontalmente escalável, inspirado no Prometheus, projetado para armazenamento e busca eficientes. O Loki foca em fornecer uma solução de armazenamento e consulta para logs, integrando-se perfeitamente ao Grafana para visualização.
- Tempo: Um sistema de tracing distribuído em alta escala que armazena e consulta dados de tracing semelhantes ao Jaeger e Zipkin. O Tempo é projetado como um backend de tracing que se integra ao Grafana para visualização de traces.
- Graphite: Um banco de dados de séries temporais para armazenar dados de desempenho em tempo real. O Grafana pode servir como uma interface de visualização para dados armazenados no Graphite.
- InfluxDB: Um banco de dados de séries temporais otimizado para armazenamento de alta disponibilidade e consulta de dados de séries temporais, eventos e métricas.
Conclusão
Deixar nossa aplicação ou produto sem observabilidade é como estar em um barco sem remo—não podemos influenciar a direção que estamos seguindo; só podemos torcer para que seja a correta. Portanto, antes de despriorizar a observabilidade no seu produto, pense duas vezes.
Como dizem: “Se você não pode medir, você não pode gerenciar.” Curiosidade: geralmente dizem que essa frase é de Peter Drucker, mas há controvérsias; parece que ele nunca disse isso.
Adriano Torini é especialista em desenvolvimento de software, com pós-graduação em Engenharia de Software. Ele é apaixonado por encontrar novas soluções e resolver problemas. No tempo livre, dedica-se a atividades físicas, leitura e aprendizado contínuo, sempre buscando ser 1% melhor a cada dia.