Observabilidade, Monitoramento e troubleshooting
Nesse artigo vamos trazer informações do que é observabilidade, monitoramento, logs e troubleshooting, a importância de um bom acompanhamento das APIs, trazendo suas definições e ideias para uma melhorar a utilização e acompanhamento desses temas.
Para começarmos vamos dar uma breve definição sobre eles.
O que é Log?
É um local onde são feitos os registros dos eventos que foram realizados no sistema, com data, hora e uma mensagem pertinente para o evento.
O que é o componente de Log?
É um componente que ajuda a monitorar e debugar suas aplicações, podendo exibir o que for necessário, como payload (ou parte dele), mensagens de erros, entre outras possibilidades. E utilizá-lo em qualquer lugar do seu flow.
O que é troubleshooting?
É uma investigação de um problema ou comportamento que esteja ocorrendo em uma determinada API, o objetivo é analisar as ações que resultaram em uma determinada resposta e sugerir uma correção com base no que foi analisado.
Construção dos log.
Para nos ajudar no acompanhamento e monitoramento das APIs precisamos ter nos logs informações suficientes para identificar um comportamento previsto, um comportamento não previsto e também retornos não esperados e para isso precisamos pensar no que podemos expor dentro desses logs.
Em APIs MuleSoft você pode configurar logs em DEBUG, ERROR, INFO (Padrão) e WARN e com isso você pode especificar o tipo de log que será exibido em um determinado momento, podendo “ligá-lo” ou “desligá-lo” na aba properties do Cloudhub, mas com isso vem a pergunta qual devo utilizar para cada momento?
Para os que listamos acima, temos:
- INFO (padrão) — Utilizamos de forma que podemos adicionar informações básicas para entender como está o andamento do fluxo das APIs.
- ERROR — São Logs para informar erros ou fluxos alternativos e devemos dar uma atenção rápida, pois deve estar impactando o correto funcionamento da API.
- WARN — Logs de alertas, que devem ser utilizados como alertas e em algum comportamento alternativo mas que não impacta o ao que a API se propõe.
- DEBUG — Você pode ligá-lo para “debugar” e por um momento (durante a análise) trazer informações a mais nos logs para fazer alguma análise mais profunda e ter um melhor diagnóstico.
É importante ter em mente que precisamos tomar cuidado com as informações que serão exibidas no log, até pelas leis de proteção de dados, dados número de documentos, dados pessoais entre outros precisam ser utilizados com muito cuidado para que não corram o risco de vazarem na internet.
Como exemplo recentemente um arquivo com logins e senhas vazaram do Twitter (https://www.cnnbrasil.com.br/economia/hackers-publicam-enderecos-de-e-mail-vinculados-a-200-milhoes-de-contas-do-twitter/), então sempre que vamos exibir de alguma forma dados e informações sensíveis precisamos ter todo o cuidado, mas pensando nisso o que podemos logar? Segue uma lista, de exemplo, com algumas informações:
Lembrando também que qualquer dúvida você pode e deve procurar alguém com conhecimentos na LGPD para que possa ajudar nessa definição.
Mas o mais importante é sempre ter em mente uma forma que seja fácil a identificação do registro sem que ele possa causar problemas para a pessoa dona dos dados.
Debug
Qual a importância de “Debugar” um código? Quando construímos uma API, pensamos no fluxo principal, enriquecimentos, orquestração, coreografia, fluxos alternativos, entre outros, mas as vezes podemos ter comportamentos que não pensamos durante o desenho e construção, porém fazendo o debug, entendendo o passo a passo do andamento da API, conseguiremos ver possíveis erros ou melhorias podendo fazer com que nossas APIs sejam mais eficientes e eficazes ao que se propõe.
No debug conseguiremos ver o payload, as mensagens que colocamos nos fluxos, informações de controle e é possível testar alternativas durante sua execução.
Importante utilizá-lo ao nosso favor, pois com isso teremos um maior conhecimento e domínio sobre a API que construímos e entendimento do processamento que ela realiza durante sua execução.
Observabilidade
Outro tópico importante e que deve ser abordado como uma boa prática é a observabilidade, mas o que é isso?
Observabilidade é a capacidade que uma determinada instituição tem de monitorar, alarmar, entender as métricas e logs de um sistema, com essas informações pode-se criar:
- Alertas: Que avisam aos responsáveis sobre algum problema que pode estar impactando ou até parando as APIs naquele momento.
- Performance: Com a análise dos dados pode criar ações para melhorar performance ou identificar algum “gargalo” nas APIs.
- Melhorias: Analisando os logs e informações estatísticas pode verificar fluxos impactantes que podem ser melhorados e até mesmo evitar um problema futuro.
- Monitoramento: Verificar volume, tamanho das mensagens, periodicidades, logs, quantidade de erros e outras estatísticas pertinentes.
Existem algumas ferramentas que podem fazer esse trabalho como o ELK, recebendo as informações de logs, métricas de desempenho, entre outros, com essas informações pode ser criado dashboards, alarmes, agrupamento dos logs, erros entre outras especificidades para cada projeto, com isso existem algumas formas de dados serem enviados para ele, como a utilização das APIs do Cloudhub, utilização de agentes dentro da APIs, falaremos mais sobre isso em um próximo artigo.
Não podemos esquecer que algumas licenças da MuleSoft tem uma limitação no tamanho dos logs gravados e ficam armazenados por 30 dias, com isso precisamos procurar formas de manter essas informações por mais tempo e com maior quantidade de informações gravadas.
Troubleshooting
Tudo que falamos até o momento pode em algum momento fazer parte de um Troubleshooting que podemos estar realizando durante a investigação de um problema, seja “debugando” o código para entender como um determinado payload passou pela API, seja verificando os Logs para ver o que foi retornado dentro deles e até mesmo a observabilidade para verificar as estatísticas, como foi o andamento do fluxo como um todo.
Como falamos mais acima, essa investigação de um problema precisa, na maioria das vezes, precisa ser rápida e certeira pois pode estar ocorrendo um problema em produção e impactando o funcionamento das APIs, então se cercar de ferramentas e técnicas para uma investigação certeira é crucial.
Conclusão
Com tudo que falamos percebemos que precisamos, desde as primeiras fases de um projeto, pensar em tudo que estaremos construindo, como vamos manter e como vamos investigar possíveis problemas, então precisamos conhecer os pontos fortes e limitações das ferramentas utilizadas e propôr desde o ínicio meios que possam ajudar e facilitar o dia a dia de uma operação e o conhecimento nesses temas ajudam na definição dessa observabilidade.
Para os próximos artigos pretendo trazer informações mais a fundo do Json Logger e integração com o ELK.