Como monitorar APIs Python usando Pyctuator e SpringBootAdmin
Os terminais de atuadores ajudam-nos a monitorizar os nossos serviços. Usando atuadores, podemos obter muitas informações sobre o que está acontecendo.
O SpringBoot tem uma série de atuadores embutidos, e também nos permite criar nosso próprio Atuator Endpoint.
Para frameworks escritos em Python como Flask ou FastAPI, podemos incorporar atuadores integrando uma biblioteca chamada Pyctuator.
Neste artigo, vou explicar como monitorar aplicativos escritos em FastAPI usando a biblioteca Pyctuator. Também mostrarei como gerenciar os pontos de extremidade do atuador usando o servidor SpringBootAdmin.
O que são atuadores?
Usamos atuadores para monitorar e gerenciar o uso de aplicações na produção. Estas informações de utilização são-nos expostas através de terminais REST.
Por exemplo, podemos acessar os logs do aplicativo em produção, detalhes do ambiente e rastreamentos HTTP. E se algo deu errado dentro do aplicativo, podemos até acessar os aplicativos "threaddump" para fins de depuração.
Aqui estão alguns exemplos de alguns pontos finais importantes do atuador:
Qual é Pyctuator?
Os atuadores se tornam populares por causa do SpringBoot, mas você pode implementá-los em frameworks como FastAPI ou Flask integrando um módulo chamado Pyctuator.
Pyctuator é um módulo Python, que é uma implementação parcial do SpringBoot Actuators. O Pyctuator é gerenciado pela SolarEdge.
Alguns dos atuadores suportados pela Pyctuators são:
- /health: Este endpoint no Pyctuator tem monitoramento integrado para Redis e MySQL
- /env
- /métricas
- /arquivo de log
- /threaddump
- /httptrace
- /madeireiros
O que é SpringBootAdmin?
Imagine um serviço com todos esses atuadores para verificar métricas, httptrace, threaddump e assim por diante. Seria muito tedioso invocar cada um deles individualmente para verificar o que está acontecendo dentro do serviço. E se temos muitos serviços e cada um deles tem seus próprios pontos finais de atuação, isso torna o monitoramento ainda mais difícil.
É aí que você pode usar o SpringBootAdmin para gerenciar e monitorar aplicativos.
Em poucas palavras, o SpringBootAdmin fornece um bom painel para todos os pontos finais do atuador em um só lugar.
Caso de uso para Pyctuator
O caso de uso é simples: vamos desenvolver um serviço RESTful usando a estrutura FastAPI e configurar os atuadores no serviço usando o módulo Pyctuator.
O serviço tem 3 pontos de extremidade, conforme mostrado no API-Docs (Swagger) abaixo
- GET /users: Retorna todos os usuários que existem no sistema.
- POST /users: Criar usuário
- GET /users/{id}: Retorna um usuário com um determinado id
Pode encontrar o código aqui.
No User-Service, vamos habilitar os atuadores usando o Pyctuator e monitorá-los usando o painel do SpringBootAdmin. Também vamos explorar como podemos melhorar o atuador /health para monitorar Redis.
Para configurar os atuadores, primeiro precisamos instalar o "pyctuator". Você pode fazer isso usando o comando "pip install pyctuator".
Após a instalação, simplesmente instanciar o objeto Pyctuator é o ponto de entrada para ver atuadores embutidos dentro de uma estrutura web.
Antes de instanciar o Pyctuator, se você acessar o ponto de extremidade /pyctuator, receberá a mensagem "Não encontrado":
Após a instanciação, ao acessar o ponto de extremidade /pyctuator você verá todos os atuadores ativados por padrão. Isso ocorre porque definimos "pyactuator_endpoint_url" dentro do Pyctuator.
Eu recomendo fortemente passar pelo objeto Pyctuator, pois ele explica quais são os argumentos obrigatórios e opcionais que precisamos fornecer.
Os parâmetros obrigatórios são:
- app – instância de FastAPI ou Flask
- o nome do aplicativo – exibido na seção de informações no SpringBootAdmin
- "pyctuator_endpoint_url" – o que vimos que retorna todos os pontos finais do atuador
- "registration_url" – você vai entender isso em breve.
Como melhorar o ponto final /health
Você pode aprimorar o ponto de extremidade /health no Pyctuator para monitorar bancos de dados Redis ou MySQL. Digamos que você esteja usando o Redis em seu aplicativo – então precisamos usar RedisHealthProvider e passar a instância do redis para ele.
Como iniciar o servidor SpringBootAdmin
Para executar o servidor SpringBootAdmin no local, temos duas opções: primeiro, podemos fazê-lo criando o SpringBootAdmin manualmente, indo para start.spring.io e adicionando bibliotecas.
Spring Web & Spring Boot Admin (Servidor):
A segunda opção é executar uma imagem do Docker:
docker run --rm --name spring-boot-admin -p 8080:8080 michayaak/spring-boot-admin:2.2.3-1
Uma vez que o servidor de administração está ativo, precisamos fornecer o "registration_url " para o Construtor Pyctuator, conforme discutido anteriormente.
O Admin Server está sendo executado em localhost:8080 e isso deve registrar nosso aplicativo no SpringBootAdmin. Podemos acessar todos os pontos finais do atuador em um só lugar:
Eu executei o ponto de extremidade /users algumas vezes e agora HTTP Traces no lado Admin mostra todos os detalhes da troca Request-Response.
Conclusão
Os atuadores são extremamente úteis no monitoramento e depuração de aplicativos em produção. Ao acessar pontos de extremidade, podemos obter detalhes sobre dumps de thread, despejos de heap, rastreamentos HTTP e assim por diante.
O Pyctuator simplifica em grande medida ter atuadores em APIs Python. Simplesmente importando a biblioteca e definindo um objeto, todos os atuadores estão prontos para nós dentro da nossa aplicação.