Conceitos e práticas da Engenharia de Observabilidade

Thyago Mininelli
luizalabs
Published in
4 min readDec 28, 2023

Este artigo tem como objetivo abordar a engenharia de observabilidade como um campo de conhecimento da engenharia de software. Nele vamos decorrer os conceitos e práticas desse assunto que cada vez mais vem tomando tempo e dedicação das pessoas que trabalham com desenvolvimento de software e as discussões nos papos de cafezinho.

Você conhece o seu sistema sem precisar entender o código-fonte?

Essa é uma pergunta que os times precisam fazer repetidamente. Não tem uma resposta definitiva, mas sim cada vez mais a compreensão do comportamento do seu sistema, desde a entrada e saída dos dados, as dependências integradas, o desempenho da infraestrutura, entre outras observações que fazem a compreensão do fluxo e maneiras que o sistema comporta, desde as mais básicas até as mais diferentes.

Para isso, além de começar a criar monitorias das requisições recebidas e enviadas, identificar as dependências, o tempo de resposta dos fluxos e taxas de erros apresentadas, é importante que o time saiba as métricas básicas, que são as RED Metrics, e os sinais de telemetria.

RED Metrics: É um conjunto de métricas que se refere a taxa ou números de requisições ou transações (rate), duração medida pelo tempo dessas transações (duration)e os erros que foram apresentados durante as transações (error).

As RED Metrics ajudam a monitorar e otimizar cada serviço individualmente, além de entender como eles interagem em um ecossistema maior. Ao combinar essas métricas, oferece uma visão abrangente da saúde e performance dos serviços, permitindo intervenções rápidas e eficazes. Por exemplo, uma alta taxa de erros em uma aplicação pode indicar problemas que afetam outros serviços dependentes.

Sinais de telemetria: Os sinais são os dados observáveis de uma aplicação que são capturados afim de disponibilizar monitoria e observabilidade num ecossistema de serviços distribuídos. São eles:

Logs: São registros de textos dos diferentes eventos em um determinado momento;

Métricas: São unidades numéricas referentes às informações técnicas ou de negócio disponibilizados para analisar um determinado momento ou eventos.

Rastros: Representa o caminho de uma requisição ou transação. Informando as etapas de ponta a ponta, incluindo as interações que a determinada aplicação faz para outros serviços.

Perfilamento (Profiling): Como o nome diz, são perfis de dados de telemetria referentes as transações relacionados a desempenho e otimização. É um sinal de telemetria que pode ajudar os desenvolvedores a entender melhor como seus programas estão funcionando e identificar áreas que podem ser otimizadas para melhorar o desempenho

Medição Real do Usuário: Conhecido no termo em inglês Real User Monitoring (RUM), é uma forma de monitoramento de desempenho que captura e analisa cada transação feita pelos usuários de um site ou aplicativo.

Utilizar os dados para decisões técnicas e de negócio!

Anteriormente, falamos sobre coleta de dados de telemetria e neste momento podemos falar em armazenamento, apresentação e análise desses dados.

Algumas projeções na engenharia de observabilidade são referentes ao armazenamento desses dados, a ponto de começarem a incluir o conceito de Big Data. Onde o armazenamento de um grande volume de dados começa a ser de maneira estruturada para identificar tendências, detectar anomalias, prever comportamentos futuros e tomar decisões informadas. Por exemplo: Entender o sentido dos caminhos que os usuários percorreram na aplicação; comportamento do sistema; etc.

Para isso, entretanto, todas as pessoas que trabalham em seus sistemas devem ter acesso a esses dados, desde desenvolvedores, analistas de negócio, gestores, ou seja, democratizar os dados de observabilidade para que as tomadas de decisões possam ser feitas em conjunto.

Que tal entender as configurações e pontos de instrumentação?

Nem todos os dados coletados são dados úteis. Na autoinstrumentação muitos dados são desnecessário. A instrumentação manual é a melhor maneira de entender quais rastros (leia-se dados de telemetria) são importantes para capturar, armazenar e analisar.

Observabilidade pode, e deve, ser parte do ciclo de desenvolvimento de software, sendo um método similar ao test-driven development (TDD). Sabemos que no TDD o desenvolvimento é iniciado pelos testes, em observabilidade o desenvolvimento acontece identificando os rastros das transações, pontos de atenção e falhas das etapas e as métricas como identificação de algum comportamento técnico ou de negócio. No geral, observar o comportamento e o estado do seu sistema.

Esses princípios fazem parte do observability-driven development (ODD), na prática podemos dizer que é o desenvolvimento orientado por comportamento.

“Por que está acontecendo” ao invés de “O que está acontecendo”.

Nesse ponto trago uma mudança de mindset. É comum querer entender o que está acontecendo em nosso sistema, na nossa infraestrutura, porém, é melhor ainda saber o porquê acontece algo. Nesse aspecto podemos ter um comportamento mais pró-ativo do que reativo, partindo do ponto de entender o comportamento dos sistemas, o desempenho dos recursos utilizados, as interações com outros sistemas, identificar eventos mais críticos que podem acontecer. Pra isso, sabemos que capturar os dados são importantes, todavia, não podemos deixar de lado como eles serão apresentados. Escolher as ferramentas, criar dashboards customizados, agregar as informações, definir padrões, são algumas das ações que a engenharia de observabilidade oferece como conhecimento para os times de desenvolvimento.

Conclusão

Por fim, a engenharia de observabilidade é entendida através da coleta e análise de um amplo espectro de dados, incluindo a integridade e o desempenho de aplicações, métricas de negócios, como taxas de conversão, mapeamento da experiência de usuário e telemetria de infraestrutura e de rede. E, a partir daí, tomadas de decisões são escolhidas de forma mais assertivas. Sendo uma prática cultural ao garantir que a observabilidade seja uma parte integrante no desenvolvimento de software, permitindo que as equipes detectem e resolvam problemas antes que eles afetem os usuários finais.

--

--

Thyago Mininelli
luizalabs

Código e café no sangue. Pensando em soluções tecnológicas para proporcionar inovações.