Apresentando os três pilares
No vídeo anterior, dissemos que mostraríamos quais são os pilares da observabilidade, o que são exatamente e como podemos registrá-los. Vamos mostrar na nossa tela, que estamos compartilhando, quais são esses três pilares.
Os três pilares são: métricas, logs (registros) e traces (rastreamentos). Vamos entender cada um deles e como podem nos ajudar a obter uma boa observabilidade.
Detalhando métricas de observabilidade
Em relação a métricas — que é onde vamos trabalhar mais neste curso, porque o Prometheus está muito focado nessa parte e, por isso, é bastante robusto para entregar métricas — que tipos de informação elas fornecem? Exemplos:
- Requisições por segundo;
- CPU;
- Memória;
- Quanto de networking (rede) está sendo utilizado;
- Quanto de I/O (entrada/saída) está sendo utilizado.
Há muitas informações, e falaremos mais sobre isso adiante, incluindo alguns antipadrões que devemos evitar. Este é o primeiro pilar dos três pilares.
Explicando logs com analogia do avião
O próximo pilar são os logs (registros): eles registram eventos da aplicação. Para explicar logs, gostamos de usar a analogia do avião. Quando viajamos de avião, o piloto se comunica com a torre de controle informando: “Estamos indo nesta direção, nesta posição; o avião subirá em 5 minutos e estamos prontos para decolar.” A torre de controle responde: “Autorizado a voar.” Assim, ficam determinados todos os passos que serão executados para efetuar a decolagem.
Da mesma forma, os logs registram os eventos da aplicação. Por exemplo, quando a aplicação realiza uma transação, registramos:
- O horário;
- O ID dessa transação;
- O que ocorreu: se foi uma transação mal realizada, se houve um erro, apenas um aviso, se o ID não existe ou se foi simplesmente uma transação bem-sucedida.
Os logs fornecem sinais e eventos que podem ser negativos ou positivos para a aplicação. São uma base fundamental; sem eles faltará muita informação na observabilidade.
Analisando traces de execução
Quando falamos do terceiro pilar da observabilidade, falamos de traces (rastros de execução). São muito importantes; podemos usar a analogia de um serviço de entregas, no qual rastreamos um pacote. Ao comprar um produto eletrônico para entrega, conseguimos rastreá-lo e ver exatamente para onde vai, onde parou e por que parou. Da mesma forma, a trace (rastro de execução) nos fornece o caminho, o percurso pelo qual a request (requisição) passa até chegar ao seu ponto final, que pode ser a pessoa cliente ou outra aplicação. Obtemos todos esses dados e essas informações cruciais, fundamentais para determinar um problema.
Vamos apresentar um exemplo. Vamos imaginar que, por alguma razão, fazemos uma request (requisição) a um banco de dados. Nesse banco de dados, a request (requisição) começou a demorar muito para responder. Vemos que ela passou pela nossa aplicação, chegou ao banco de dados, demorou a responder e, depois, finalizamos. O processamento da nossa aplicação levou, digamos, alguns milissegundos, mas a resposta do banco de dados levou dois segundos, um tempo enorme. Isso provocou o acúmulo de muitas solicitações.
Correlacionando métricas e traces para diagnosticar problemas
Por alguma razão, devido a esse acúmulo de requests (requisições), o uso de CPU aumentou. Existe uma conexão muito forte entre as métricas e as traces (rastros de execução). Por exemplo, identificamos que esse banco de dados está demorando muito, e começaram a se acumular muitas solicitações na nossa aplicação. Vimos que as métricas de CPU estão aumentando muito e isso coincide exatamente com aquela request (requisição) lenta ao banco de dados. Ao observar e analisar, percebemos que uma coisa coincide com a outra.
Nossa aplicação começa a usar mais CPU, passa a sofrer limitação de taxa (throttling), e as solicitações passam a demorar mais do que o esperado, causando indisponibilidade no serviço ou uma experiência ruim para a pessoa cliente.
Assim, esses três pilares sempre convergem para que possamos identificar o problema o mais rápido possível.