One tree, both worlds
The HTTP request, the agent that handled it, every tool it called and every model call inside them - one waterfall, parent to child. Not an app dashboard beside an LLM dashboard.
OPEN-TELEMETRY NATIVE · SELF-HOSTED OR MANAGED
Traces, logs, metrics, model tokens and cost - stitched into a single timeline. Three lines to instrument. Your logs are already in.
from indratrace import init_observability init_observability(api_key="it_live_…") # that's it - HTTP spans, model tokens and your logs are now in one trace tree
Plain OTLP over HTTP, and the SDK is Apache-2.0. The whole configuration is one API key - no endpoint, no product name, nothing else to set. The key says which product, which environment, and whose.
The HTTP request, the agent that handled it, every tool it called and every model call inside them - one waterfall, parent to child. Not an app dashboard beside an LLM dashboard.
Token counts come from the provider, not an estimator. Cost is computed server-side, so it rolls up per model, per product, per environment - and down to the single span that spent it.
If your app uses Python's logging (or loguru), your logs are already in - nothing to install, nothing to configure. A line logged inside a span carries that span's trace context.