Compreendendo a diferença entre monitoramento e observabilidade
Finalmente, chegamos a entender a diferença entre monitoramento e observabilidade. Embora sejam conceitos distintos, eles se complementam para proporcionar uma visão clara da operação e da experiência do usuário.
Quando falamos de monitoramento, referimo-nos ao acompanhamento de sistemas nos quais já conhecemos os problemas e as métricas que desejamos coletar. Por exemplo, queremos identificar falhas, aprender com elas e começar a respondê-las. Isso pode incluir um servidor que reinicia frequentemente, um disco que enche rapidamente ou uma CPU que trava com frequência. São problemas cujos sintomas já sentimos e que queremos observar ao longo do tempo para resolvê-los e minimizar os impactos no sistema. Por exemplo, se sabemos que 95% de uso de memória impactará o sistema, queremos ser alertados com antecedência para aumentar a memória ou identificar o processo causador do problema.
Explorando o papel do monitoramento
O monitoramento, a curto prazo, ajuda a solucionar problemas conhecidos. Quando observamos um dashboard, podemos ver que a CPU está em bom estado, a memória está abaixo de 80% e os discos têm consumo considerável, mas ainda assim, o cliente pode reclamar de lentidão no sistema. Isso indica que, além dos problemas conhecidos, há uma "caixa preta" de problemas desconhecidos que não foram correlacionados.
A correlação pode ser feita por ferramentas que fornecem insights ou pelo próprio operador. No entanto, em grandes equipes e empresas, é difícil que a pessoa responsável tenha o contexto necessário para entender todas as dependências além das métricas de CPU, disco e memória. É por isso que buscamos a observabilidade.
Complementando com observabilidade
A observabilidade complementa o monitoramento, abrangendo não apenas os problemas conhecidos, mas também as dependências, problemas de rede, latência e tráfego. Ela se aproxima mais do usuário, evidenciando os impactos sofridos pelo sistema. Em eventos imprevisíveis, como picos de acesso em dias de pagamento, Black Friday ou pandemias, o sistema é testado até seus limites, revelando falhas imprevisíveis que podem ser planejadas em cerca de 80% dos casos com o uso de Chaos Engineering.
Essas falhas imprevisíveis podem ser derivadas de deploys feitos semanas antes, e tudo isso se encaixa na lei de Murphy, onde as coisas tendem a dar errado no pior momento possível. Com a velocidade de produção atual, é comum que sistemas enfrentem alterações e mudanças frequentes em busca de escalabilidade e inovação.
Abordagens reativas e preditivas
Podemos observar abordagens reativas e preditivas. O monitoramento tradicional é reativo, pois tomamos ações diante de problemas já existentes. Já a observabilidade traz uma abordagem preditiva, baseada em tendências conhecidas. Por exemplo, ao acompanhar picos de memória por três meses, podemos receber alertas preditivos sobre possíveis colapsos do sistema.
Na abordagem preditiva, temos uma visão unificada de métricas, logs e traces, facilitando a identificação rápida de problemas e o entendimento de causa e efeito. Isso pode ser feito manualmente ou com o auxílio de IA.
Estruturando o ciclo de observabilidade
O ciclo de observabilidade deve ser bem estruturado, não apenas para identificar erros, mas para receber alertas e analisar traces distribuídos. Se um alerta indicar que o tempo de resposta excedeu 500 milissegundos, queremos ver o trace desse período para entender o caminho percorrido pela requisição e os serviços ou microserviços envolvidos, além de obter métricas de rede e atributos relevantes.
O que são atributos?
Atributos são informações sobre o nosso sistema, como onde ocorreu um evento e qual evento foi disparado. Queremos identificar qual serviço estava lento e acabou impactando para que uma requisição extrapolasse mais de 500 milissegundos. Analisando a latência, começamos a determinar a causa que impactou o usuário. Assim, já temos o problema, o caminho percorrido, os microserviços relacionados e os limites que foram extrapolados, permitindo que comecemos a implementar uma solução.
Essa é a forma adequada de chamar um time para uma sala de crise: quando já temos dados e entregamos informações úteis para que as pessoas possam ajustar seus serviços, esteiras e aplicações. No final, temos uma resolução. Um limite extrapolado de mais de 500 milissegundos é um problema, então, a partir de 400 ou 450 milissegundos, talvez já seja um gatilho adequado para ser alertado.
Trabalhando com eventos e métricas
Podemos trabalhar com nomes de eventos usando Regex (expressões regulares) para buscar nos logs e nos traces, trazendo uma contagem de quantos eventos temos. Se é uma métrica desconhecida, devemos começar a monitorar, colocando uma contagem para analisar em dias normais e em dias de pico quantos problemas ocorrem. Se a solução implementada já resolveu boa parte disso, ótimo. Mas devemos deixar a métrica para validar que as próximas implementações não passem despercebidas. Isso porque, ao sentir que já resolvemos, podemos remover o monitoramento e não perceber que a próxima implementação pode ter o mesmo problema ou um problema ainda mais grave.
O ciclo do threshold (limite) envolve criar, observar, passar um tempo e validar novamente se faz sentido continuar com aquela métrica. Se em algum ponto acharmos que só ela não é suficiente, podemos trazer outra métrica para complementar e agrupar. Esses são insights para pensarmos no dia a dia e nos inspirarmos quando nos depararmos com um problema em uma sala de crise de observabilidade ou em qualquer outro problema, pois tudo envolve observabilidade. Se temos observabilidade, é um problema se não conseguimos encontrar um erro com ela; se não a temos, é um problema ainda maior, indicando que não temos visibilidade sobre nada, o que representa um grande risco.
Exemplo de monitoramento e observabilidade
Chegamos ao exemplo de monitoramento de painel e observabilidade como scanner (escâner), trazendo uma analogia automotiva. No painel do motorista, temos informações em tempo real, uma informação estática que acompanhamos com o olhar, mas não conseguimos guardar bem um histórico. Observamos que estamos a 60 quilômetros por hora e que o limite é 80, então nos controlamos. Já com um scanner, temos dados mais detalhados e técnicos, que é o que a observabilidade também nos entrega.
Pilares da observabilidade
Os pilares da observabilidade são traces (rastreamentos), métricas e logs. A união desses três elementos forma os pilares mais importantes da observabilidade. Apenas ter traces, logs ou métricas isoladamente não constitui observabilidade. Podemos ter monitoramento, mas a observabilidade só funciona quando temos o rastreamento de ponta a ponta das requisições e os três métodos integrados. Quando conseguimos visualizar as coletas de métricas, traces e logs, temos observabilidade. No entanto, ainda não temos maturidade. Apenas coletar não significa que teremos tudo.
O monitoramento começa na base, padronizando o monitoramento e tendo o parque de máquinas monitorado. Se já temos alertas, ótimo. Na observabilidade, instrumentamos todas as aplicações, temos métricas, traces e logs em abundância. Isso é muito bom, mas sem método e processo, podemos nos perder em informações e continuar sem visibilidade. Devemos ter cuidado com isso.
Traces e logs
Os traces são uma forma de monitorar todas as requisições que a aplicação recebe e faz, desde o primeiro clique no aplicativo até a finalização de uma compra. Observamos quantas vezes o banco de dados foi acessado, quantos selects e updates foram feitos, entre outros. É um rastreamento minucioso da requisição, incluindo tempo de resposta e latência. Os traces são poderosos porque podem ser correlacionados com os logs. Além de ver a requisição de ponta a ponta, conseguimos ver todos os logs gerados por ela e as métricas de sistema e infraestrutura. Por exemplo, podemos perceber que no meio de uma requisição a rede caiu.
Os logs são registros de sistema e infraestrutura escritos em um arquivo de texto, que podem ser enviados para a stack de observabilidade e anexados aos traces.
Tomada de decisão
A partir de tudo isso, podemos tomar decisões, que são o ponto-chave para acertar. Decisões precisam ser baseadas em dados. Em questões de FNOPs, por exemplo, se queremos diminuir custos, precisamos de visibilidade. A partir da tomada de decisões, vem a otimização de processos. Temos insights a partir dos dados, tomamos decisões e otimizamos processos, que são alinhados com as regras de negócio e monitorados com observabilidade.
A observabilidade abraça o monitoramento e, estando fora, fica mais próxima do usuário. A tomada de decisão interna impacta diretamente quem está na ponta, observado pela observabilidade. Dessa forma, a explicação fica mais clara.
Critérios de monitoramento e observabilidade
Quando falamos de critérios, foco principal de monitoramento e observabilidade, escopo e objetivo, chegamos a um ponto importante. O foco principal do monitoramento é a saúde e o desempenho do sistema com métricas pré-definidas e conhecidas, como o tempo de atividade do servidor, funcionamento de agentes, ping e processos que não podem parar. A observabilidade, por sua vez, investiga hipóteses desconhecidas a partir das saídas de dados, métricas, logs e traces.
O escopo do monitoramento envolve componentes individuais e infraestrutura tradicional, enquanto a observabilidade trabalha com sistemas distribuídos, microserviços, ambientes e nuvens, que são infraestruturas de aplicações modernas. O objetivo do monitoramento é informar que algo não está funcionando, enquanto a observabilidade busca entender a causa e efeito de um componente ou falha.
Se houver dúvidas ou interesse, estamos disponíveis para conversar.