Skip to main content

observra — framework-agnostic agent behavior analytics

observra

Framework-agnostic agent behavior analytics.

License: Apache-2.0 Python 3.10+

Capture every meaningful agent action (token usage, tool calls, cost, errors) with structured context based on the Common Information Model (CIM).

Zero custom instrumentation per-agent. Answer "what happened, how much did it cost, and was it normal?" for any agent on any framework.

Install

pip install observra

With framework extras:

pip install observra[adk]           # Google ADK
pip install observra[claude]        # Claude Agent SDK
pip install observra[openai-agents] # OpenAI Agents SDK
pip install observra[langchain]     # LangChain / LangGraph
pip install observra[pydantic-ai]   # Pydantic AI

With backend extras:

pip install observra[otel]          # OTel span + log export

Install everything:

pip install observra[all]

Quick Start

Attach observra to your agent framework — no manual logging calls. For Google ADK:

import observra
from google.adk.runners import Runner
from google.adk.sessions import InMemorySessionService

observra.initialize(backend="jsonl", path="telemetry.jsonl")  # pip install observra[adk]
plugin = observra.create_plugin("adk")

runner = Runner(
    agent=root_agent,                 # your existing ADK agent, unchanged
    app_name="my-agent",
    session_service=InMemorySessionService(),
    plugins=[plugin],                 # the only change — telemetry is now automatic
)

Every LLM call, tool use, and cost lands in telemetry.jsonl, one event per line (representative model_response; real records also carry event_id, trace_id, and host context):

{"timestamp": 1718115781.882, "event_type": "model_response", "framework": "adk", "agent_name": "research-agent", "model_name": "gemini-2.0-flash", "session_id": "s-a1f6c2e3", "library_version": "1.0.3", "data": {"input_tokens": 1240, "output_tokens": 387, "cost_usd": 0.0019, "action": "call_llm", "result": "success"}}

Other frameworks follow the same two-step pattern — see the getting-started guides for Claude, OpenAI, LangChain, and Pydantic AI.

Supported Frameworks

Framework Install Status Captured Events
Google ADK [adk] Stable LLM calls, tool calls, delegation depth, cost
Claude SDK [claude] Stable Tool calls, model responses, session cost
OpenAI Agents SDK [openai-agents] Stable Spans, tool calls, agent handoffs, cost
LangChain / LangGraph [langchain] Stable Chain runs, tool calls, LLM calls, cost
Pydantic AI [pydantic-ai] Stable Agent runs, tool calls, model calls

Backends

Backend Install Description
JSONL (included) Local JSON Lines file (default)
Webhook (included) Generic HTTP webhook POST delivery
Multi (included) Fan-out to multiple backends simultaneously
OTel Spans [otel] Export events as OTel spans via OTLP HTTP
OTel Logs [otel] Export events as OTel log records via OTLP HTTP

OTel Export (Dynatrace, Grafana, etc.)

from observra.backends.otel import OTelExportBackend
from observra.backends.otel_log import OTelLogBackend
from observra.backends.multi import MultiBackend

# Spans only
span_backend = OTelExportBackend(
    endpoint="https://your-collector/v1/traces",
    headers={"Authorization": "Api-Token ..."},
    service_name="my-agent-svc",
)

# Logs only
log_backend = OTelLogBackend(
    endpoint="https://your-collector/v1/logs",
    headers={"Authorization": "Api-Token ..."},
    service_name="my-agent-svc",
)

# Both spans and logs
backend = MultiBackend([span_backend, log_backend])

Key Features

  • Cost tracking — per-session cost with model-specific pricing catalog and threshold alerts
  • PII redaction — automatic secret/PII masking with configurable patterns
  • Non-blocking — drop-oldest queue guarantees zero latency impact on the host agent
  • CIM-normalized — structured events compatible with SIEM/analytics pipelines
  • Safe regex — ReDoS-proof pattern matching via RE2 (optional: [safe-regex])
  • Encryption at rest — AES field-level encryption for sensitive telemetry (optional: [encryption])
  • Prompt injection detection — built-in heuristics for injection attempt classification
  • Observabilityget_metrics() / get_stats() for pipeline health introspection
  • Deduplication — automatic event dedup across backends
  • Session context — trace/span/session ID propagation with scoped contexts

All Extras

Extra Dependencies
[adk] google-adk>=1.0.0
[claude] claude-agent-sdk>=0.1.37, tiktoken>=0.7.0
[openai-agents] openai-agents>=0.9.0
[langchain] langchain-core>=1.0.0, langgraph>=0.2.0
[pydantic-ai] pydantic-ai<2.0.0, opentelemetry-sdk>=1.0.0
[otel] opentelemetry-sdk>=1.0.0, opentelemetry-exporter-otlp-proto-http>=1.0.0
[exabeam] requests>=2.32.0
[safe-regex] google-re2>=1.1
[encryption] cryptography>=41.0
[all] All of the above

Documentation

Project sponsor

observra is sponsored by Exabeam. Exabeam contributed the initial code and continues to provide ongoing support and contributions to the project as part of its commitment to security in an increasingly agentic world.

License

Apache 2.0 — see LICENSE

Download files

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

Source Distribution

observra-1.0.4.tar.gz (140.8 kB view details)

Uploaded Source

Built Distribution

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

observra-1.0.4-py3-none-any.whl (174.3 kB view details)

Uploaded Python 3

File details

Details for the file observra-1.0.4.tar.gz.

File metadata

  • Download URL: observra-1.0.4.tar.gz
  • Upload date:
  • Size: 140.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for observra-1.0.4.tar.gz
Algorithm Hash digest
SHA256 0c31dc40533217ddb086c35b96917e04abcaae43c0392745871cc6a98aa22a6b
MD5 adbfc1d5061a9a705221fb666420bf33
BLAKE2b-256 ce58f87e5d1d76897bd42c85d0d7417341e9e01a59293766f567cb1dde1cf579

See more details on using hashes here.

Provenance

The following attestation bundles were made for observra-1.0.4.tar.gz:

Publisher: publish.yaml on open-agent-ai-security/observra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file observra-1.0.4-py3-none-any.whl.

File metadata

  • Download URL: observra-1.0.4-py3-none-any.whl
  • Upload date:
  • Size: 174.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for observra-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 81750ff3783c55b0c3af58de4be81351ae0c4e1541c755a75818645f43c9a2d8
MD5 eeff94e9eb86dc6de2dda7eed99fed5d
BLAKE2b-256 48765bc61d04f1d74f338d30cebfb0170870b2d87bed8f74f700e7b63205df47

See more details on using hashes here.

Provenance

The following attestation bundles were made for observra-1.0.4-py3-none-any.whl:

Publisher: publish.yaml on open-agent-ai-security/observra

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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