Skip to main content

Lightweight observability SDK for Python web frameworks. Auto-instruments FastAPI, Flask, and Django with real-time tracing via OTLP/HTTP.

Project description

tracely-sdk

Lightweight observability SDK for Python web frameworks. Auto-instruments FastAPI, Flask, and Django with real-time distributed tracing via OTLP/HTTP.

PyPI version Python License: MIT

Features

  • Zero-config auto-instrumentation -- detects FastAPI, Flask, and Django automatically
  • Real-time pending spans -- see requests the moment they start, not just when they finish
  • Full request/response capture -- headers, body, query params with smart redaction
  • OTLP/HTTP protobuf export -- standard OpenTelemetry wire format
  • Batch export with backoff -- 1s flush interval, exponential retry on failure
  • Fail-silent design -- SDK never crashes or degrades your application
  • Minimal dependencies -- only httpx and opentelemetry-proto

Installation

pip install tracely-sdk

Quick Start

FastAPI

import tracely
from tracely.instrumentation.fastapi_inst import TracelyASGIMiddleware

tracely.init(api_key="trly_your_key_here")

from fastapi import FastAPI
app = FastAPI()
app.add_middleware(TracelyASGIMiddleware)

@app.get("/")
async def root():
    return {"status": "ok"}

Flask

import tracely
from tracely.instrumentation.flask_inst import FlaskInstrumentor

tracely.init(api_key="trly_your_key_here")

from flask import Flask
app = Flask(__name__)
app.wsgi_app = FlaskInstrumentor.wrap_app(app.wsgi_app)

@app.route("/")
def root():
    return {"status": "ok"}

Django

Add the middleware to your MIDDLEWARE setting:

# settings.py
MIDDLEWARE = [
    "tracely.instrumentation.django_inst.TracelyDjangoMiddleware",
    # ... other middleware
]

Then initialize in your app startup (e.g., AppConfig.ready()):

import tracely
tracely.init(api_key="trly_your_key_here")

Configuration

Environment Variables

Variable Description Default
TRACELY_API_KEY API key for authentication (required)
TRACELY_ENDPOINT Ingestion API endpoint https://i.tracely.sh
ENVIRONMENT Deployment environment (e.g., production) None
TRACELY_REDACT_FIELDS Comma-separated header/field names to redact None

Programmatic Init

import tracely

tracely.init(
    api_key="trly_your_key_here",
    environment="production",
    service_name="my-api",
    service_version="1.0.0",
)

Custom Spans

Create manual spans for custom operations:

import tracely

with tracely.span("db-query", kind="CLIENT") as s:
    s.set_attribute("db.system", "postgres")
    s.set_attribute("db.statement", "SELECT * FROM users")
    result = db.execute("SELECT * FROM users")

Span Events (Structured Logging)

Attach structured log events to the active span:

import tracely

with tracely.span("process-order") as s:
    tracely.info("Order received", order_id="123")
    # ... process
    tracely.debug("Validation passed")
    tracely.warning("Inventory low", sku="WIDGET-42")

Graceful Shutdown

Flush buffered spans before exit:

import tracely

tracely.init(api_key="trly_your_key_here")
# ... application runs ...
tracely.shutdown()  # flushes remaining spans

How It Works

Your App
  |
  v
Middleware (FastAPI/Flask/Django)
  |-- on_start --> SpanProcessor --> SpanBuffer (pending_span)
  |-- on_end ----> SpanProcessor --> SpanBuffer (final span)
                                        |
                                        v
                                  BatchSpanExporter (1s interval / 50 span threshold)
                                        |
                                        v
                                  OTLP Protobuf Serialization
                                        |
                                        v
                                  HttpTransport --> TRACELY API
                                  (retry with exponential backoff)

Documentation

Full docs at docs.tracely.sh

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

tracely_sdk-0.1.0.tar.gz (54.6 kB view details)

Uploaded Source

Built Distribution

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

tracely_sdk-0.1.0-py3-none-any.whl (35.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: tracely_sdk-0.1.0.tar.gz
  • Upload date:
  • Size: 54.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for tracely_sdk-0.1.0.tar.gz
Algorithm Hash digest
SHA256 be48fbafffb4a4c9b343f7c1dee84eed889a005a636eb61ba3150ad865fb9436
MD5 f2e1e81333ab9fe8c2c9a85ef5c13715
BLAKE2b-256 ad29574791416d3753bb44a1772b40ccbb37d0e28fa02925ad2d67e5e20c77b9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: tracely_sdk-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 35.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for tracely_sdk-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5b44f988fd008cde1155de7846e1463b2aa3266e831c55a7c6d01278346befdf
MD5 38f10f89a55a44e8a0e5af14fd34720f
BLAKE2b-256 e14a0658b79b113314ddb8cbe8078dbb63a9360cce82c5238d0f24e7a0be9e64

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