gen_ai.* attributes can be classified into AI observations. Use the Agent telemetry SDK when you want richer session, generation, cost, and tool-call capture without manually shaping OTel attributes.
AI span conventions
Squasher routes AI spans from/v1/traces into the AI observability dataset when they include one of these markers:
- OpenTelemetry GenAI attributes such as
gen_ai.operation.name,gen_ai.request.model,gen_ai.provider.name,gen_ai.system, andgen_ai.usage.* - Vercel AI SDK telemetry attributes such as
operation.name=ai.streamText.doStream,ai.model.id,ai.model.provider, andai.usage.* - Langfuse-compatible attributes such as
langfuse.observation.type=generation,langfuse.observation.model.name,langfuse.observation.usage_details, andlangfuse.observation.cost_details - OpenInference markers such as
openinference.span.kind=LLMoropeninference.span.kind=TOOL
How It Works
Squasher’s OTLP endpoints accept standard trace, log, and metric payloads. From these, Squasher extracts:- Exception events from trace spans (the
exceptionspan event withexception.type,exception.message, andexception.stacktraceattributes) - Error spans — any span with
status.code = ERROR - Error/fatal log records — log records with severity
ERRORor higher - Metric points — gauges, sums, histograms, and exponential histograms sent to
/v1/metrics
Endpoint Configuration
Authentication
Pass your Squasher API key using either method:- Custom header:
x-squasher-key: sq_pk_your_api_key - Standard auth:
Authorization: Bearer sq_pk_your_api_key
Your API key is available in the Dashboard under Settings > API Keys.
Quick Start with Environment Variables
Most OTel SDKs support configuration via environment variables. Set these and your SDK will send data to Squasher automatically:Language-Specific Setup
- Node.js
- Python
- Go
- Java
- OTel Collector
Install packages:Create Run your app:
tracing.ts:tracing.ts
Resource Attributes
Squasher extracts these standard OTel resource attributes automatically:
All other resource and span attributes are preserved as tags on the error event.
Supported Formats
Both are fully supported. Most OTel SDKs default to protobuf — no configuration needed.
Delivery behavior
A successful OTLP response means Squasher has stored the batch in the active telemetry store or in durable regional recovery storage. If the active store is unavailable, Squasher accepts the batch into recovery storage and replays it without placing the backlog ahead of new telemetry. Replayed data can appear later than live data. The recovery path provides at-least-once delivery. A failure near the storage boundary can produce a duplicate row. Keep stable trace IDs, span IDs, timestamps, and other OpenTelemetry identities so repeated data remains identifiable. Retry5xx and 429 responses with bounded exponential backoff. Do not retry other 4xx responses without correcting the request.
Combining with Squasher SDKs
You can use OpenTelemetry alongside Squasher’s native SDKs. For example, use the Squasher Next.js SDK for your frontend and OpenTelemetry for your backend microservices in Go or Python. All errors appear in the same dashboard.Collector deployment guides
- Prometheus metrics — translate Prometheus scrapes or Remote Write 2.0 to OTLP.
- Jaeger traces — dual-ship OTLP or translate legacy Jaeger protocols.
- Tail sampling — keep error and slow traces while reducing routine trace volume.
- Durable workflow traces — connect retries and resumed work with finite spans and links.
Agent handoff
Limitations
- Error-focused grouping: Only error-level telemetry creates error groups, but non-error OTLP logs can still be stored as context.
- Metric read paths: General OTLP metrics are queryable through the Metrics API. Browser vitals continue to have their own dedicated dashboards and APIs.
- Trace workflows: Distributed traces and waterfalls are available through the Traces API and trace views in the dashboard.