Skip to main content

Lightweight FastAPI middleware for centralized API monitoring

Project description

tigzig-api-monitor

Lightweight FastAPI middleware for centralized API monitoring. Automatically captures request/response metrics and sends them to a central monitoring service.

Installation

pip install tigzig-api-monitor

Quick Start

from fastapi import FastAPI
from tigzig_api_monitor import APIMonitorMiddleware

app = FastAPI()

# Add the monitoring middleware
app.add_middleware(
    APIMonitorMiddleware,
    app_name="YOUR_APP_NAME",  # Required: identifies your app in logs
)

Configuration

Set these environment variables:

Variable Required Description
API_MONITOR_URL Yes URL of the monitoring service (e.g., https://logger.tigzig.com/log)
API_MONITOR_KEY Yes API key for authentication

Features

  • Non-blocking: Logs are sent asynchronously, never slowing down your API
  • Automatic capture: Request method, endpoint, status code, response time
  • Privacy-safe: IP addresses are hashed, not stored
  • Lightweight: Minimal dependencies (just httpx and starlette)
  • Fire-and-forget: Logging failures don't affect your API
  • Noise filtering: Automatically skips health checks, bots, and vulnerability scanners

What Gets Logged

Each request automatically captures:

  • App name (configured)
  • Endpoint path (no query params for privacy)
  • HTTP method (GET, POST, etc.)
  • Response status code
  • Response time in milliseconds
  • Client IP (sent to service, hashed before storage)
  • User-Agent header
  • Origin header
  • Referer path (no query params)

Example

import os
from fastapi import FastAPI
from tigzig_api_monitor import APIMonitorMiddleware

# Set environment variables (or use .env file)
os.environ["API_MONITOR_URL"] = "https://logger.tigzig.com/log"
os.environ["API_MONITOR_KEY"] = "your-api-key"

app = FastAPI()

# Add monitoring - that's it!
app.add_middleware(APIMonitorMiddleware, app_name="MY_BACKEND")

@app.get("/")
def read_root():
    return {"message": "Hello World"}

# Every request to this API will now be monitored automatically

Whitelist Mode (v1.3.0+) - RECOMMENDED

The best way to filter noise is to only log YOUR endpoints. Use include_prefixes to specify which paths to log:

# Only log paths starting with these prefixes
app.add_middleware(
    APIMonitorMiddleware,
    app_name="MY_BACKEND",
    include_prefixes=("/excel/", "/stock/", "/api/", "/mcp/"),
)

This is much cleaner than trying to exclude infinite junk paths. You know your endpoints - just whitelist them.

Blacklist Mode (v1.1.0+)

If you prefer blacklist mode, the middleware automatically skips logging for:

  • Health check endpoints (/, /health, /healthz, /ready)
  • Static files (/favicon.ico, /robots.txt, /sitemap.xml)
  • Vulnerability scanner probes (/.env, /wp-admin, /vendor/phpunit/..., etc.)
  • Common bot paths (/_next/, /js/, /css/, etc.)

Customize Blacklist

# Add additional paths to exclude
app.add_middleware(
    APIMonitorMiddleware,
    app_name="MY_BACKEND",
    exclude_paths={"/internal", "/metrics", "/debug"},
    exclude_prefixes=("/admin/", "/private/"),
)

# Log everything (disable all filtering)
app.add_middleware(
    APIMonitorMiddleware,
    app_name="MY_BACKEND",
    include_noise=True,
)

License

MIT

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

tigzig_api_monitor-1.5.0.tar.gz (6.1 kB view details)

Uploaded Source

Built Distribution

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

tigzig_api_monitor-1.5.0-py3-none-any.whl (6.9 kB view details)

Uploaded Python 3

File details

Details for the file tigzig_api_monitor-1.5.0.tar.gz.

File metadata

  • Download URL: tigzig_api_monitor-1.5.0.tar.gz
  • Upload date:
  • Size: 6.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.6

File hashes

Hashes for tigzig_api_monitor-1.5.0.tar.gz
Algorithm Hash digest
SHA256 03385ebcae6dfe86fa8ca5f47a0987091b5d6af1700cfe58632f4ac9f1c483d8
MD5 e1b5c04b29b76e3f89b74f12b241d8c3
BLAKE2b-256 a0c26c71ba9df434434992a51ee3e1d3d6e4944e0916a3699af82a76421de899

See more details on using hashes here.

File details

Details for the file tigzig_api_monitor-1.5.0-py3-none-any.whl.

File metadata

File hashes

Hashes for tigzig_api_monitor-1.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 87254ef148bcf633d6adbdce50cb4e29f8a647de52c91eef99e9f4274888ced9
MD5 1a18bcc857fa70b84f8022fdcfda7b7d
BLAKE2b-256 3dd6f7162e9250555e112327294ad6dadfbe23e21fdcee3985ef36c031a98ea1

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