Observabilidade é um conceito que se concentra em interpretar os dados recebidos de um sistema externo para detectar qualquer falha ou erro mínimo nos dados. O objetivo de uma plataforma de observabilidade é encontrar o ponto de desempenho normal de um sistema e, em seguida, melhorá-lo. Embora este cenário perfeito possa não ser alcançado, a observabilidade permite eliminar possibilidades de erro. Para alcançar este objetivo, é necessária a relação de três pilares: métricas, logs e traces.
Métricas são dados numéricos fáceis de obter de um determinado programa que está sendo observado. Esses dados são normalmente reunidos em gráficos para facilitar a leitura. Existem dois tipos de métricas: as métricas de trabalho, que fornecem informações sobre o sistema, como o throughput, e as métricas de recursos, que fornecem informações sobre os recursos do sistema, como a porcentagem de utilização de CPU. Os eventos são outro parâmetro importante da observabilidade, mas normalmente estão incluídos nas métricas. Eles são um acontecimento que ocorreu em um determinado momento, ao contrário das métricas que são recolhidas por intervalos de tempo. Um exemplo de evento é o acionamento de um alarme.
Os logs são coleções de dados semiestruturados ou apenas strings que detalham erros ou anomalias presentes no sistema, ao contrário das métricas. Eles são usados para ter uma percepção do que aconteceu em caso de erro, a fim de encontrar uma solução mais rápida.
Traces são dados semiestruturados, como os logs, mas contêm informações sobre o caminho de rede que se comunica com o programa para obter essa informação. É criado um documento semelhante a um log para mostrar detalhadamente um erro. Os principais parâmetros dos tracers incluem a função do sistema em que ocorreu o erro, sua duração, entre outros.
No caso de micro serviços, que é uma arquitetura dividida em vários módulos que se comunicam entre si, os traces ganham importância adicional. Esses tracers mostram o caminho entre os vários módulos, o tempo que eles demoraram e os eventos que encontraram pelo caminho. Esses tracers são chamados de tracers distribuídos e são diferentes dos tracers normais. Eles utilizam cabeçalhos de pacote adicionais HTTP para se propagar entre os vários componentes do serviço.
Qual é a diferença entre monitoramento e observabilidade?
A observabilidade é realmente o monitoramento por outro nome? Em resumo, não. Embora a observabilidade e o monitoramento estejam relacionados e possam se complementar, são conceitos diferentes.
Em um cenário de monitoramento, você geralmente configura painéis que são destinados a alertá-lo sobre problemas de desempenho que você espera ver mais tarde. No entanto, esses painéis dependem da suposição fundamental de que você é capaz de prever que tipos de problemas encontrará antes que ocorram.
Ambientes nativos da nuvem não se prestam bem a esse tipo de monitoramento porque são dinâmicos e complexos, o que significa que você não tem como saber com antecedência que tipos de problemas podem surgir.
Em um cenário de observabilidade, em que um ambiente foi totalmente instrumentado para fornecer dados completos de observabilidade, você pode explorar de forma flexível o que está acontecendo e rapidamente descobrir a causa raiz de problemas que pode não ter sido capaz de antecipar.
Por que a observabilidade é importante?
A observabilidade é importante porque oferece maior controle sobre sistemas complexos. Sistemas simples têm menos componentes móveis, o que os torna mais fáceis de gerenciar. Monitorar a CPU, a memória, os bancos de dados e as condições de rede geralmente é suficiente para entender esses sistemas e aplicar a correção apropriada a um problema.
Os sistemas distribuídos têm um número muito maior de peças interconectadas, o que significa que o número e os tipos de falhas que podem ocorrer são também maiores. Além disso, os sistemas distribuídos são constantemente atualizados e cada mudança pode criar um novo tipo de falha.
Em um ambiente distribuído, compreender um problema atual é um enorme desafio, principalmente porque ele produz mais "unknown unknowns" (problemas não são conhecidos nem monitorados) do que sistemas mais simples. Como o monitoramento requer "known unknowns" (problemas já identificados e monitorados), pode ser que a abordagem de monitoramento não seja suficiente para lidar adequadamente com os problemas que surgem em ambientes complexos.
A observabilidade é mais adequada para a imprevisibilidade de sistemas distribuídos, principalmente porque permite fazer perguntas sobre o comportamento do sistema à medida que surgem problemas. "Por que X está quebrado?" ou "O que está causando a latência agora?" são algumas das perguntas que a observabilidade pode responder.