Você sabe tudo que acontece com a sua aplicação em produção?
Tags: elasticsearch, apm, sysadmin, monitoring
Published: 2020-01-30 01:10:38

**Você sabe tudo que acontece com a sua aplicação em produção?**

Hoje vamos aprender um pouco sobre observalidade e monitoramento com o **[Elastic APM](https://www.elastic.co/apm)** e eu espero que ao final desse texto você esteja tão animada quanto eu para saber tudo sobre o comportamento, ambiente e dependências da sua aplicação. Vamos lá?

Para trazer todos esses conceitos para o mundo real, vamos sugerir um caso de uso em que o **[Elastic Stack](https://www.elastic.co/)** + **[APM](https://www.elastic.co/apm)** são as nossas ferramentas principais na investigação do comportamento de erro em uma aplicação (oi, vida real!?)

>  *“Não se gerencia o que não se mede, não se mede o que não se define,
> não se define o que não se entende, e não há sucesso no que não se
> gerencia”* - Deming, William

**Mas o que é essa tal de Observabilidade?**

  A observabilidade é um conceito matemático da teoria do controle, onde quão bem podemos conhecer o estado de um sistema baseado nas suas saídas externas. Esse conceito é aplicado ao monitoramento de TI onde as saídas externas são os dados da sua aplicação, como por exemplo, um evento no log, latência da resposta da rede, o tracing completo de uma transação.  
A observalidade é uma ferramenta importante em ambientes com microsserviços ou aplicações altamente distribuídas pois ela permite uma maior visualização do que está acontecendo em todas as dependências da aplicação, facilitando não só a operação mas a evolução dos sistema.

Do cenário simples de uma aplicação básica (front, back-end e banco) a ambientes mais complexos como infraestrutura híbrida (cloud e on premisses) e altamente distribuídos (apis, microsserviços, filas, cache), quanto maior informação e correlação entre os eventos maior a agilidade na investigação de incidentes e erros, sendo possível muitas vezes antecipar a quedas de um serviço, desde que sua aplicação gere os insumos corretos. Mas que insumos seriam esses?

  **O 3 pilares da Observabilidade (Logs, Métricas e Tracing)**

 **Logs**: Os logs são registros de ações que ocorrem em qualquer sistema, esses registros podem servir como base para investigar vários tipos de situações, por exemplo, imagine que você seja responsável por um e-commerce de livros e o cenário ideal é que todas as pessoas que visitam o seu site, consigam adquirir os livros desejados. Porém, em algum momento, um incidente aconteceu e durante o processo de compra os seus usuários começam a não conseguir concluir as transações, nesse momento eles estāo recebendo uma mensagem que diz que o site está indisponível.
Nesse cenário, a açāo a ser tomada é investigar para tratar o problema e uma das primeiras coisas que você pode fazer é consultar os logs.
Ao começar a investigar, você se depara com o seguinte código de erro: Status http 500 - Internal Server Error (com timestamp, por favor Dev(a)s).
Esse registro te dá a visão de que existe um problema na sua aplicação, mas não te diz onde é, por isso é importante juntar as informações obtidas nos logs com métricas!

**Métricas**: As métricas são um agrupamento de registros de log. Voltando para o cenário de crise, pense que você ainda está no meio da investigação da indisponibilidade do seu e-commerce e já sabe que o status que os usuários estão recebendo é o http 500, mas ainda não sabe a causa, porém ao observar as métricas de sistema operacional dos seus servidores, você nota que o banco de dados da sua aplicaçāo está instável e por isso a sua aplicaçāo está indisponível para os usuários.

 Ótimo, já evoluímos na investigaçāo, mas ainda podemos ir um pouco mais além, chegou a hora do nosso amigo **Elastic APM**!

 **Elastic  APM (Application Performance Monitoring)** 
 
O **Elastic APM** tem como principal funçāo monitorar sua aplicaçāo de ponta a ponta, trazendo para você métricas de infraestrutura e principalmente de serviços. Essa funçāo é muito útil quando você precisa entender a integração dos serviços e como eles interagem entre si, além de também ter visão da experiência do usuário.

 Voltando para a investigaçāo, você já sabe que o banco de dados do seu e-commerce está comprometendo o fluxo de compras, mas se não houve nenhuma mudança significativa no ambiente de banco como podemos identificar a causa raiz? É aí que o **Elastic APM** pode te ajudar e **muito**. Com o **Elastic APM** é possível ver toda a trilha de uma transação, inclusive com a query que a aplicação faz em cada contexto. Mágico não? 
A utilização do **Elastic APM** parece um bicho de sete cabeças mas só parece, com poucas linhas de código instrumentadas na sua aplicação é possível ver o que está acontecendo com o serviço quase em tempo real.

Hoje o **APM** da **Elastic** suporte as seguintes linguagens de programação: Java, .NET, node.Js, Django, Flask, Rails, RUM-JS e Go.

 Agora que você já sabe quais problemas o Elastic APM pode te ajudar a resolver =)

 No próximo artigo vamos falar um pouco sobre o **Elastic Stack** e aplicabilidade de cada solução.