Guide
OpenTelemetry Setup
Send standard OTLP traces, logs, and metrics into Provon.
Provon OpenTelemetry Setup
Provon accepts standard OTLP/HTTP telemetry, so teams that already use OpenTelemetry can keep their existing SDKs and exporters. Route model calls through the Provon Gateway when you want request-time policy, provider routing, cost capture, and guardrails. Use OTLP when your agent or application already emits traces, logs, or metrics that should join the same feedback loop.
Gateway telemetry and OTLP telemetry converge into the same project-scoped trace evidence. Workflows, dashboards, trace search, conversations, and user views can use both sources.
Quick Start
Create a project in the Workspace, copy a project API key, then point your OTLP/HTTP exporter at Provon:
export PROVON_API_KEY=your_project_api_key
export OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:3000
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer $PROVON_API_KEY"
export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
Most OpenTelemetry SDKs append signal paths automatically when OTEL_EXPORTER_OTLP_ENDPOINT is set. For local development, Provon accepts:
POST /v1/traces
POST /v1/logs
POST /v1/metrics
If your SDK requires signal-specific endpoints, configure the trace endpoint directly:
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://127.0.0.1:3000/v1/traces
Python Trace Exporter
from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
provider = TracerProvider()
provider.add_span_processor(
BatchSpanProcessor(
OTLPSpanExporter(
endpoint="http://127.0.0.1:3000/v1/traces",
headers={"Authorization": "Bearer your_project_api_key"},
)
)
)
trace.set_tracer_provider(provider)
Node.js Trace Exporter
import { NodeSDK } from '@opentelemetry/sdk-node';
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';
const sdk = new NodeSDK({
traceExporter: new OTLPTraceExporter({
url: 'http://127.0.0.1:3000/v1/traces',
headers: {
Authorization: `Bearer ${process.env.PROVON_API_KEY}`,
},
}),
});
sdk.start();
What To Send
Provon works best when agent traces include stable identifiers and model-call attributes:
service.namefor the agent or application name.session.id,conversation.id, or another stable conversation key when available.- OpenTelemetry GenAI attributes for model name, prompts, completions, token usage, and errors.
- Tool-call spans as child spans of the agent run.
- Logs or metrics that explain evaluation failures, retries, latency, or cost changes.
Do not send secrets, raw credentials, or unredacted private data unless your deployment and retention settings are configured for that data.
Production Notes
For production deployments, replace http://127.0.0.1:3000 with your Provon runtime URL. Keep using a project API key in the Authorization header, and prefer OTLP/HTTP protobuf unless your existing collector or SDK already emits OTLP JSON.
If your organization already runs an OpenTelemetry Collector, configure an OTLP/HTTP exporter from the collector to Provon. This keeps language SDK configuration stable while letting the collector handle batching, retries, sampling, and redaction.
Troubleshooting
401or403: verify the project API key andAuthorization=Bearer ...header.- No traces appear: confirm the exporter is using OTLP/HTTP, not OTLP/gRPC.
- Only traces appear: add log or metric exporters, or set signal-specific endpoints.
- Payload rejected: check exporter compression, content type, and batch size.
- Missing conversation views: add a stable conversation or session attribute to agent spans.