Página de status e monitoramento de uptime para apps FastAPI
Monitore endpoints FastAPI e workers async. Asserções JSON-path mapeiam nos health schemas do FastAPI. Hospedada ou headless.
Três formas de lançar uma página de status para FastAPI
Escolha o nível de controle — sem código, low-code ou headless completo.
Hospedado
Adicione seu endpoint FastAPI, aponte um CNAME para status.seudominio.com, pronto. Em 5 minutos.
Headless
Use nossa API pública para construir sua própria UI dentro do app FastAPI. Controle total sobre design e marca.
Ver a APIBadges embutidos
Coloque badges SVG de uptime e status no seu README ou landing page. Atualizam a cada 5 minutos.
Cole este health endpoint no seu app FastAPI
Copie, cole, aponte o PulseAPI para a URL. Retorna 200 saudável, 503 degradado.
from fastapi import APIRouter, Response
from sqlalchemy import text
from .db import engine
from .redis import redis
router = APIRouter()
@router.get("/health")
async def health(response: Response) -> dict:
checks: dict[str, str] = {}
try:
async with engine.connect() as conn:
await conn.execute(text("SELECT 1"))
checks["database"] = "ok"
except Exception:
checks["database"] = "fail"
try:
pong = await redis.ping()
checks["cache"] = "ok" if pong else "fail"
except Exception:
checks["cache"] = "fail"
healthy = all(v == "ok" for v in checks.values())
response.status_code = 200 if healthy else 503
return {"status": "healthy" if healthy else "degraded", **checks}Monte o router no app principal. Retorne 503 em falha parcial para marcar degradado. JSON-path roda nativamente no schema.
O que quebra em apps FastAPI — e como detectar
Deadlocks async
Um `await` esquecido ou sync em contexto async trava o event loop. Picos de tempo de resposta mostram na hora.
Bugs de migração Pydantic v1→v2
Mudanças de validação quebram endpoints em silêncio. Asserções sobre body JSON pegam regressões.
Quedas upstream
Dependências caem e endpoints retornam 502. O PulseAPI pega isso antes dos usuários.
Não gostou da nossa página de status? Construa a sua em FastAPI.
Nossa API retorna os mesmos dados que nossa UI hospedada consome. Spec OpenAPI completa em api.pulseapi.tech/docs.
import httpx
from fastapi import APIRouter
router = APIRouter()
@router.get("/status")
async def status():
async with httpx.AsyncClient(timeout=5) as client:
r = await client.get("https://api.pulseapi.tech/status/acme")
r.raise_for_status()
return r.json()Monitoramento FastAPI — FAQ
Funciona com FastAPI, Starlette e Quart?
Sim. Os três expõem HTTP padrão e são monitorados do mesmo jeito.
Posso monitorar workers de background (Dramatiq, Arq, Celery)?
Sim. Exponha um endpoint que faz round-trip de tarefa pelo worker. Retorne 503 se falhar ou timeout.
Como lido com respostas Pydantic v1 vs v2?
O PulseAPI não liga — ele asserta no JSON final. Seu schema pode mudar desde que os campos assertados permaneçam.
Posso renderizar a página de status dentro do FastAPI?
Sim. Consuma a API e renderize com Jinja2, ou retorne JSON para um frontend. Formato na nossa spec OpenAPI.
Comece a monitorar seu app FastAPI em 5 minutos
Plano grátis. Sem cartão. Adicione seu endpoint e receba alertas quando quebrar.