Statusseite und Uptime-Monitoring für FastAPI-Anwendungen
FastAPI-Endpoints und async Worker überwachen. JSON-Path-Assertions passen zu FastAPI-Health-Schemas. Gehostet oder headless.
Drei Wege für eine Statusseite für FastAPI
Wähle die Kontrolltiefe — kein Code, Low-Code oder Full Headless.
Gehostet
FastAPI-Endpoint hinzufügen, CNAME auf status.deinedomain.com zeigen, fertig. In 5 Minuten.
Headless
Public API nutzen, eigene UI direkt in der FastAPI-App bauen. Volle Kontrolle über Design und Branding.
API ansehenEingebettete Badges
SVG-Uptime- und -Status-Badges in README oder Landing Page einbauen. Aktualisiert sich alle 5 Minuten.
Diesen Health-Endpoint in deine FastAPI-App einfügen
Kopieren, einfügen, PulseAPI auf die URL richten. 200 gesund, 503 degradiert.
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}Router an die Main-App mounten. Bei Teilausfall 503 zurückgeben für degradiert. JSON-Path arbeitet nativ auf dem Schema.
Was in FastAPI-Apps kaputt geht — und wie man es fängt
Async-Deadlocks
Vergessenes `await` oder Sync-Call in Async-Kontext blockiert den Event Loop. Response-Time-Spikes zeigen es sofort.
Pydantic v1→v2 Migrationsbugs
Geänderte Model-Validation kann Endpoints still brechen. Body-Assertions auf JSON fangen Regressionen.
Upstream-Ausfälle
Externe APIs fallen aus, Endpoints werfen 502er. PulseAPI fängt das ab, bevor Nutzer melden.
Statusseite gefällt dir nicht? Bau sie in FastAPI selbst.
Unsere API liefert dieselben Daten wie unsere gehostete UI. Volle OpenAPI-Spec unter 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()FastAPI-Monitoring — FAQ
Funktioniert mit FastAPI, Starlette und Quart?
Ja. Alle drei sprechen Standard-HTTP und werden gleich überwacht.
Kann ich Background-Worker (Dramatiq, Arq, Celery) überwachen?
Ja. Health-Endpoint bauen, der einen Task durch den Worker round-trippt. 503 bei Fehler oder Timeout.
Wie gehe ich mit Pydantic v1 vs v2 um?
PulseAPI ist das egal — es asserted auf das finale JSON. Schema darf sich ändern, solange asserted Felder bleiben.
Kann ich die Statusseite in FastAPI rendern?
Ja. API holen und mit Jinja2 rendern, oder JSON an ein Frontend zurückgeben. Struktur in der OpenAPI-Spec.
Deine FastAPI-App in 5 Minuten überwachen
Kostenloser Tarif. Keine Kreditkarte. Endpoint hinzufügen, Alerts erhalten.