Se sua aplicação falhar, quem descobre primeiro? Você ou seus usuários?
Se você é programador e possui ao menos uma aplicação em produção sob sua responsabilidade, gostaria que você refletisse por alguns minutos sobre a pergunta do título.
Se você não for o primeiro a saber quando sua aplicação irá falhar, vem comigo que esse artigo é para você, afinal, vamos falar de OBSERVABILIDADE!
Antes de tudo: O que é observabilidade?
Segundo o blog da Softwall, observabilidade é:
Observabilidade é a capacidade de analisar, explorar, coletar métricas de um sistema ou ambiente em produção, descentralizado ou em nuvem, identificando e entendendo seus padrões de comportamento para extrair dados sobre seu funcionamento, emitindo alertas para solucionar e resolver incidentes de performance, disponibilidade e segurança, melhorando a experiência do usuário final.
Como você deve saber, eu gosto de definições mais populares e menos técnicas. Para mim observabilidade é:
A capacidade de não descobrir através dos seus usuários que sua aplicação capotou violentamente.
Brincadeiras à parte, observabilidade é a capacidade de estar consciente do que está acontecendo com sua aplicação em tempo real, prevenindo quaisquer possíveis problemas.
Afinal, imagine que mágico você ser avisado horas antes que provavelmente sua aplicação vai cair? E melhor ainda, ter tempo hábil de pensar em uma solução sem a pressão de milhares de usuários reclamando? Ou pior, seu chefe te cobrando?
Pois é, para isso existe a nossa supracitada observabilidade!
Mas como eu faço isso?
Agora você deve estar se perguntando:
"Beleza Barros, mas basta eu adicionar logs em tudo e já era?"
A resposta é clara: NÃO!
Logs ajudam muito na investigação e na solução de problemas, porém, eles sozinhos não te protegem totalmente de falhas e quedas de sistemas.
Vejamos a seguir.
Os três pilares da observabilidade
Em 2018 a nossa amada e conhecida editora O’Reilly fez uma publicação cujo titulo é: "Distributed Systems Observability".
No quarto capítulo intitulado "The Three Pillars of Observability" eles elencam os três capítulos da observabilidade.
Os apresentarei brevemente aqui.
Logs de eventos
Um log de evento é um registro imutável com carimbo de data/hora de eventos discretos que aconteceram ao longo do tempo. Os logs de eventos em geral vêm em 3 formas, mas são fundamentalmente os mesmos: um carimbo de data/hora e uma carga útil de algum contexto. (Elven Works)
Exemplos: Quando uma função cai no bloco Catch e você loga o erro apresentado com um famoso console.log.
Métricas
As métricas são uma representação numérica de dados medidos em intervalos de tempo. As métricas podem aproveitar o poder da modelagem matemática e da análise preditiva para derivar o conhecimento do comportamento de um sistema em intervalos de tempo no presente e no futuro. (Elven Works)
Exemplos: Latência de uma requisição, tempo de resposta do banco de dados, consumo de memória, uso de CPU e etc.s
Rastreamento (Tracing)
Um rastreamento (trace ou tracing) é uma representação de uma série de eventos distribuídos, causalmente relacionados, que codificam o fluxo de requisição de ponta a ponta através de um sistema distribuído. (Elven Works)
Exemplo: Chamadas de funções, chamadas de sistemas, requisições HTTP, comportamento em conjunto de sistemas e etc…
Em resumo, é o famoso: Esse carinha chama esse sistema, que chama essa peça, que chama esse banco de dados.
Você pode ler essa publicação da O’Reilly gratuitamente através da Humio, basta clicar aqui.
De onde vem esses dados?
Existem dezenas de formas de coletar, armazenar e catalogar dados. Uma das formas mais comuns é através de ferramentas de monitoramento.
Hoje em dia, um dos mais famosos é o Prometheus, uma ferramenta Open Source construida inicialmente pelo Soundcloud, porém temos inúmeras outras como:
- InfluxDB
- Amazon Timestream.
- Apache Druid
- Snowflake
A maioria dessas soluções usam TSDB (Time Serie Database), ou seja, um banco de dados desenvolvido para ordenar e organizar dados através do tempo.
Como fazemos para observar?
A união desses três pilares forma o que chamamos de observabilidade, afinal, você consegue acompanhar as métricas, encontrar e rastrear os logs de uma forma eficiente.
Para unir e gerar conhecimento através dessas informações, você terá que utilizar (ou desenvolver se você for corajoso o suficiente) uma ferramenta para transformar dados em conhecimento.
Listarei a seguir algumas mais famosas do mercado gratuitas e pagas:
- AppDynamics
- Datadog
- Dynatrace
- Grafana
- Lightstep
- New relic
- Splunk
Dessas sete ferramentas, já tive o prazer de trabalhar com quatro delas, mas se você nunca teve o contato com nenhuma, se liga em um dashboard extremamente bem construído no Grafana.
Você consegue em tempo real saber de inúmeras informações sobre a saúde da sua aplicação com poucos cliques.
Imagine que você consegue descobrir que há algo errado com pagamento, pois a taxa de pagamentos recusados subiu drasticamente?
Ou até mesmo descobrir que determinada rota de sua API está levando 80% a mais de tempo para executar uma função?
Ou melhor ainda, descobrir que um disco está quase cheio e poder ter tempo hábil de planejar uma migração de dados?
Tudo isso é OBSERVABILIDADE!
Conclusão
Embora você não perceba, monitoramento é o que dá segurança a sociedade moderna. Monitoramento te informa da velocidade atual do seu carro, de quando você deverá trocar o óleo, ou ate mesmo quando seu pedido no delivery irá atrasar.
Observabilidade é essencial para qualquer aplicação ir para produção, e para isso temos que utiliza-la em conjunto com o monitoramento. Afinal, não faz sentido uma aplicação ser bem desenvolvida, testada e estressada se no dia a dia ninguém sabe o que está acontecendo com ela.
Existem inúmeras ferramentas, cursos, blogs e posts de como implementar observabilidade em seus sistemas em diferentes tipos de linguagens e tecnologias.
Nos próximos artigos, irei mostrar como monitorar sistemas .NET utilizando o Prometheus e o Grafana para isso.
E se no fim das contas você ainda estiver pensando:
"Poxa, será que vale a pena implementar observabilidade no meu sistema? Ele tá funcionando perfeitamente!"
Dou-me ao privilégio de te responder com outra pergunta:
Você entraria em um voo cujo avião não tem nenhum sistema de observabilidade?