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.
Features
- One-call instrumentation --
instrument_fastapi(app),instrument_flask(app),instrument_django() - 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
httpxandopentelemetry-proto
Installation
pip install tracely-sdk
Quick Start
FastAPI
import tracely
from fastapi import FastAPI
tracely.init(api_key="trly_your_key_here")
app = FastAPI()
tracely.instrument_fastapi(app)
@app.get("/")
async def root():
return {"status": "ok"}
Flask
import tracely
from flask import Flask
tracely.init(api_key="trly_your_key_here")
app = Flask(__name__)
tracely.instrument_flask(app)
@app.route("/")
def root():
return {"status": "ok"}
Django
Initialize and instrument in your app startup (e.g., AppConfig.ready()):
import tracely
tracely.init(api_key="trly_your_key_here")
tracely.instrument_django()
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 tracely.sh/docs
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tracely_sdk-0.2.2.tar.gz.
File metadata
- Download URL: tracely_sdk-0.2.2.tar.gz
- Upload date:
- Size: 57.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9a374667f24682d4561e95fccc75cd634b9e60faa03712b32ec66f325447630e
|
|
| MD5 |
42071a6d8114d7458b2ce5fdae7d6a08
|
|
| BLAKE2b-256 |
ef47f3ee981d3b57e260ab196bda5d496b7e5916467a6efc0f0fce502aeb709d
|
File details
Details for the file tracely_sdk-0.2.2-py3-none-any.whl.
File metadata
- Download URL: tracely_sdk-0.2.2-py3-none-any.whl
- Upload date:
- Size: 37.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
473eba7f5f9fb25e4af8f9c78c4e5589692997a0ad25f0184552139f4662f7c0
|
|
| MD5 |
70772dbc0af0f8e11258f53f064a47d1
|
|
| BLAKE2b-256 |
4e5961674bc6c8c72bcff08793f7cc8ec83531de116d8ddb4c1be3d20ba76e7e
|