Monitoramento com Grafana & Prometheus
Hoje, resolvi escrever esse artigo para podermos conversar um pouco sobre monitoramento, de maneira bem prática.
Antes de mais nada, vale conversarmos sobre Arquitetura de Microsserviços.
O que seria essa arquitetura? São pequenos serviços que rodam diferentes partes de uma aplicação. Por exemplo, se pensamos em e-commerce, podemos ter um serviço separado só do Login, outro só para o ato da compra, outro para análise dos produtos e assim, por diante.
Essa arquitetura está sendo cada vez mais utilizada porque cada uma das funcionalidades funcionam como serviços separados e que se comunicam por meio de APIs. Dessa forma, podemos utilizar diferentes linguagens para comunicar com esses serviços, assim como vemos na imagem abaixo ⬇️
O ponto principal disso? Nos permite termos escalabilidade de uma aplicação. Assim, podemos aumentar o número de usuários que acessam simultaneamente a aplicação. Como também, podemos ter mais recursos nas diferentes máquinas que rodam e mantém a aplicação.
Agora que pensamos em recursos, maior quantidade de acessos e várias requisições, nossa aplicação começa a se tornar complexa para encontrarmos os erros e as possíveis melhorias, também.
Assim, vem o ponto principal: Monitoramento!
Para o que serve Monitoramento? Aqui estão alguns pontos:
- Saber se tem algo errado
- Entender onde/como realizar o debug
- Gerar insights
- Entender o gargalo/latência da aplicação
- Encontrar problemas voltados inclusive a segurança 💜
Acredito que a imagem abaixo possa exemplificar como que a visibilidade torna-se limitada numa arquitetura de microsserviço:
Dessa forma, precisamos de uma ferramenta que nos permita monitorar, gerar insights e melhorias para o ciclo de um software.
O Prometheus pode ser essa solução, principalmente, por ajudar a monitorar e gerar logs que podem ajudar numa possível solução!
É uma ferramenta opensource, mas muito poderosa. Principalmente quando o assunto é integração com Dashboards! E nesse caso? O Grafana faz muito bem esse papel e gera ótimos gráficos para o nosso monitoramento.
Trouxe aqui um exemplo, que disponibilizei no Github, para vermos uma aplicação funcionando e os logs gerados por alguns desses endpoints.
Para rodar a aplicação, instale o Docker na máquina de vocês e utilize esse comando:
docker-compose up -d
- Grafana http://localhost:3000/
- Prometheus http://localhost:9090/graph
- Flask-app → metrics http://localhost:8080/metrics
- Flask-app → App http://localhost:8080/
Subindo esses serviços, conseguimos testar nossa aplicação feita em Flask 😊
Aqui, no Prometheus podemos criar umas visualizações também, mas utilizaremos a integração do mesmo com o Grafana para criarmos alguns Dashboards. Aqui na imagem, podemos observar no Grafana, o banco de dados do Prometheus. Um outro ponto interessante do Grafana é que você pode adicionar diferentes tipos de fontes de dados.
Um outro ponto bem interessante, com as bibliotecas existentes com Flask para integrar com Prometheus, podemos analisar o log aqui, no endpoint /metrics
Na aba principal, temos um arquivo json que disponibilizei para utilizar o Flask.
Podemos analisar aqui as respostas ✨
Vocês podem acessar a requisição manualmente ou podem digitar um comando que possa acelerar isso, como:
ab -m POST -n 10000 -c 100 http://localhost:8080/
Lembre-se, a criatividade é o limite para o que se deseja monitorar.
Espero que tenham gostado 💜