Skip to main content

Production-ready actuator endpoints for FastAPI (health, metrics, info)

Project description

Fastuator

CI Coverage PyPI Python License

GitHub stars

Production-ready monitoring toolkit for FastAPI applications.
Kubernetes probes, Prometheus metrics, and health checks in one line.

✨ Features

  • 🏥 Health Checks: Aggregated health status with customizable checks
  • 🔍 K8s Probes: Built-in liveness and readiness endpoints
  • 📊 Prometheus Metrics: Auto-instrumented HTTP metrics
  • ℹ️ System Info: Build version and platform details
  • 🎯 Zero Config: Works out of the box with sensible defaults
  • 100% Test Coverage: Battle-tested and production-ready

📦 Installation

pip install fastuator

🚀 Quick Start

from fastapi import FastAPI
from fastuator import Fastuator

app = FastAPI()
Fastuator(app)  # That's it!

Available Endpoints:

Endpoint Description
GET /fastuator/health Aggregated health status with optional details
GET /fastuator/liveness Kubernetes liveness probe (critical checks only)
GET /fastuator/readiness Kubernetes readiness probe (all dependencies)
GET /fastuator/metrics Prometheus-compatible metrics
GET /fastuator/info Application and system information

📖 Usage

Basic Setup

from fastapi import FastAPI
from fastuator import Fastuator

app = FastAPI()

# Use default configuration
Fastuator(app)

# Custom prefix
Fastuator(app, prefix="/monitoring")

Custom Health Checks

from fastuator import Fastuator

app = FastAPI()

# Define custom health checks
async def database_health():
    try:
        # Check database connection
        await db.execute("SELECT 1")
        return {"status": "UP", "database": "connected"}
    except Exception as e:
        return {"status": "DOWN", "database": str(e)}

async def redis_health():
    try:
        await redis.ping()
        return {"status": "UP", "redis": "connected"}
    except Exception:
        return {"status": "DOWN", "redis": "unreachable"}

# Register custom checks
Fastuator(
    app,
    health_checks=[database_health, redis_health],
    readiness_checks=[database_health, redis_health],
    liveness_checks=[],  # No external dependencies for liveness
)

Health Check Response

Without details:

curl http://localhost:8000/fastuator/health
{"status": "UP"}

With details:

curl http://localhost:8000/fastuator/health?show_details=true
{
  "status": "UP",
  "components": {
    "check_0": {
      "status": "UP",
      "cpu_percent": 45.2
    },
    "check_1": {
      "status": "UP",
      "memory_percent": 62.1,
      "memory_available_mb": 4096
    }
  }
}

☸️ Kubernetes Integration

Deployment Example

apiVersion: apps/v1
kind: Deployment
metadata:
  name: fastapi-app
spec:
  template:
    spec:
      containers:
      - name: app
        image: myapp:latest
        ports:
        - containerPort: 8000
        livenessProbe:
          httpGet:
            path: /fastuator/liveness
            port: 8000
          initialDelaySeconds: 10
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /fastuator/readiness
            port: 8000
          initialDelaySeconds: 5
          periodSeconds: 5

📊 Prometheus Metrics

Fastuator automatically collects the following metrics:

  • http_requests_total: Total HTTP requests (counter)
  • http_request_duration_seconds: Request duration histogram
  • app_health_status: Health status gauge (1=UP, 0=DOWN)

Scrape configuration:

scrape_configs:
  - job_name: 'fastapi'
    static_configs:
      - targets: ['localhost:8000']
    metrics_path: '/fastuator/metrics'

⚙️ Configuration

Fastuator(
    app,
    prefix="/fastuator",              # URL prefix for all endpoints
    health_checks=[...],               # List of health check functions
    liveness_checks=[...],             # Checks for liveness probe
    readiness_checks=[...],            # Checks for readiness probe
    enable_metrics=True,               # Enable Prometheus metrics
)

🧪 Built-in Health Checks

Fastuator includes these health checks by default:

  • CPU Usage: Reports DOWN if CPU > 90%
  • Memory Usage: Reports DOWN if memory > 90%
  • Disk Usage: Reports DOWN if disk > 90%

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Run tests (pytest --cov=fastuator)
  4. Commit your changes (git commit -m 'Add amazing feature')
  5. Push to the branch (git push origin feature/amazing-feature)
  6. Open a Pull Request

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

🙏 Acknowledgments

Inspired by Spring Boot Actuator.

📚 Related Projects

⭐ Loved this library? Star us to support!

Star History Chart

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fastuator-0.1.0.tar.gz (10.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fastuator-0.1.0-py3-none-any.whl (8.1 kB view details)

Uploaded Python 3

File details

Details for the file fastuator-0.1.0.tar.gz.

File metadata

  • Download URL: fastuator-0.1.0.tar.gz
  • Upload date:
  • Size: 10.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for fastuator-0.1.0.tar.gz
Algorithm Hash digest
SHA256 473564fb0c0fa9cf816d273cdcb62f7a397493e54257db14d2f77c4ac5c51867
MD5 bf7bdafb04101ff32b6f6564cfc6c0ff
BLAKE2b-256 2d03082fc654d37642df93aa12293eda6d7cb6513a70544ee702d70d614582d3

See more details on using hashes here.

File details

Details for the file fastuator-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: fastuator-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 8.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for fastuator-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 79d04a53fa3d620c6e5bff47af4c8169dddd064faac5bd83be5d6626d631034e
MD5 f53d8a27e0f8d23e7b7e3c3a8b10310d
BLAKE2b-256 3de08013fec2f266b77bb6b742615266ef3e354c86502ebba0d34e2157b0cf47

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page