Observabilidade: conceito e aplicabilidade em software

André Luiz Cavalcante
mobicareofficial
Published in
6 min readMar 4, 2022

O cenário de tecnologia da informação se torna cada dia mais dinâmico. O que era considerado rebuscado há alguns anos, como sistemas altamente distribuídos alocados na nuvem, até mesmo arquiteturas serverless que dispensam alocação prévia de infraestrutura, tem se tornado cada vez mais comum conforme a complexidade das aplicações vem crescendo. Ao mesmo tempo, um desafio que acompanha toda essa dinamicidade tem sido muito discutido na comunidade: o acompanhamento dos fluxos das aplicações. Este ato se faz indispensável no momento de investigação de um problema, principalmente quando somos convocados para investigar um bug no ambiente de produção que impacta a receita no final de semana. Tendo em vista essa necessidade inerente às complexidades de se desenvolver aplicações robustas, surge a observabilidade.

O que é observabilidade?

Para entender o conceito de observabilidade, é necessário entender o que são sistemas, estados, entradas e saídas.

Um sistema é uma coleção de componentes abstratos ou concretos que são interligados entre si, compondo uma organização. Uma característica fundamental de um sistema é que ele não pode ser reduzido à funcionalidade de um único componente, pois ele é o arranjo do todo.

No que tange aos sistemas, uma entrada é um conjunto de dados que são aplicados a estados. Estados são pontos no fluxo de execução de um sistema que armazenam qual foi a entrada fornecida, um conjunto de regras de validação sobre os dados disponibilizados e possíveis saídas relacionadas. Perceba que uma saída de um estado pode ser uma entrada de um outro estado e assim por diante.

A origem do termo Observabilidade vem da Teoria de Controle, introduzida pelo engenheiro Rudolf E. Kálmán:

“Observabilidade é a medida da qualidade do aferimento dos estados internos de um sistema a partir de suas saídas externas”.

Logo, é entendido que para um sistema ser observável, é necessário que todas as partes que o compõem também sejam observáveis.

Por que monitorar as saídas?

Em um instante, pode surgir a pergunta: qual é a necessidade de monitorar a saída dos estados da aplicação, já que basta ter em mãos a entrada inicial e a saída poderá ser replicada? É uma questão bem interessante.

Quando um sistema é muito simples, constituído de poucos componentes e um conjunto bem definido de entradas, é muito simples replicar um comportamento desejado.

Contudo, quando as restrições sobre as entradas válidas são complexas (sensibilidade ao tempo, por exemplo), o número de estados é muito grande ou a quantidade de interações entre os componentes do sistema cresce exponencialmente, torna-se inviável obter uma saída final, até porque ela pode não ser obtida, já que em alguns momentos os comportamentos internos em um fluxo de execução podem ser imprevisíveis. Um exemplo de comportamento imprevisível pode ser o uso de cache em um ambiente altamente distribuído e concorrente, representando não linearidade.

Aplicação da Observabilidade em Software

No que diz respeito ao software, a observabilidade consiste no ato de reportar as saídas e coletá-las com o intuito de entender o que aconteceu durante uma cadeia de execução, de forma remota e independente, sempre tentando inferir os estados internos. Este ato se apoia fortemente em uma área chamada Telemetria.

Telemetria é uma palavra derivada da junção de duas palavras gregas, tele, que significa à distância e meter que significa metrificar. Em suma, telemetria representa medir e monitorar informações à distância.

De forma geral, em um cenário de entendimento de um fluxo de uma aplicação, é crucial termos respostas para as três perguntas a seguir, carinhosamente chamadas de 3P:

  • Como a execução foi dada
  • Onde a aplicação foi executada
  • Quando cada etapa do fluxo foi executada

Com essas perguntas esclarecidas através da telemetria, é possível ter direcionamentos mais assertivos em cenários de análise e resolução de problemas. Em seguida, serão discutidas estratégias para auxiliar a resolução das 3P.

Como a execução foi dada e quando

Quais foram os fluxos afetados, bem como as dependências relacionadas e também os estados que consomem as saídas, caso houverem. Esta etapa requer um amplo registro sobre os passos que foram executados. No que diz respeito a ambientes distribuídos, é fundamental a aplicação de um identificador de requisições ou transações, comumente chamado de request id ou transaction id.

Uma estratégia amplamente adotada para ter conhecimento sobre os passos executados são os logs, que representam registros imutáveis que carregam informações sobre os contextos de execução próprios do domínio, eventos desempenhados, a data que eles ocorreram e níveis de alerta.

Uma estratégia utilizada para monitorar dependências é o uso de Dependency Trackers ou Dependency Maps. São softwares responsáveis por mapear os componentes de um sistema a fim de ter conhecimento sobre a cadeia de interações entre as partes que compõem uma aplicação.

Onde a aplicação foi executada

É importante ter informações sobre o sistema operacional que está executando a aplicação, incluindo métricas de uso como utilização de disco, CPU, memória virtual, dados de rede, etc. Além disso, informações sobre os frameworks utilizados, bibliotecas adotadas, versões de compiladores e tradutores podem ser vitais na etapa de análise.

Ferramentas de APM (Application Performance Monitoring) são comumente adotadas para este propósito.

Benefícios

  • Apresentação de pontos de melhoria no sistema, como melhor utilização de recursos computacionais, melhoria de algoritmos e até pontos de refatoração.
  • Melhor qualidade no processo de investigação de problemas.
  • Automatização de tratativas de erros.
  • Ponte entre desenvolvimento e operações.

Desvantagens

  • Maior custo de infraestrutura, operação e capacitação.

Desafios

Embora hajam muitos pontos favoráveis a tornar um sistema observável, alguns desafios são encontrados nessa jornada.

Como vimos, de forma genérica, para um sistema ser observável é necessário que suas partes sejam observáveis. No que tange a software, é crucial que a mentalidade da observabilidade esteja presente em todas as etapas do desenvolvimento, como se fosse um requisito inquestionável.

Além disso, é comum que sejam utilizadas soluções distintas para coletar e monitorar as saídas, no entanto, conforme a quantidade de componentes observáveis e o número de stacks adotadas crescem, é possível que a confusão dentro da organização também se eleve. Neste caso, a documentação e os processos internos são importantes aliados.

Com dados telemétricos em mãos, o que fazer?

É necessário entender qual é o cenário de investigação. Quanto mais aleatoriedade estiver presente em um sistema ou aplicação, mais os dados telemétricos quantitativos serão relevantes, o que sugere uma abordagem investigativa estatística e probabilística. No caso de uma situação determinística, geralmente, consultas aos logs costumam apresentar uma boa visão sobre a transição entre os estados internos.

-

Com aplicações cada vez mais complexas sendo desenvolvidas, é crucial que ferramentas de observabilidade sejam criadas, aprimoradas e aplicadas nos ambientes de desenvolvimento e operação, pois como são envolvidos muitos componentes sistêmicos, muitas vezes erros podem não ser replicados com uma entrada determinada, o que reflete na não linearidade das soluções arquitetônicas e técnicas adotadas. Além disso, uma aplicação bem observável possibilita análise assertiva e eficiente sobre cenários de investigação.

Sobre o autor: Meu nome é André Luiz Cavalcante Ferreira de Souza e sou Analista de desenvolvimento de sistemas na Akross e um apaixonado pelo Desenvolvimento de Sistemas Distribuídos.

A Mobicare combina os Melhores Talentos, Tecnologias de Ponta, Práticas Agile e DevOps com Capacidades Operacionais avançadas para ajudar Operadoras Telecom e grandes empresas a gerarem novas receitas e a melhorarem a experiência dos seus próprios clientes.

Se você gosta de inovar, trabalhar com tecnologia de ponta e está sempre buscando conhecimento, somos um match perfeito!

Faça parte do nosso time. 😉

--

--