Keep your OpenTelemetry. Change one endpoint.
Squasher accepts OTLP over HTTP for traces, logs, and metrics. Point your SDK or Collector at one URL with one header, and each trace opens as a waterfall linked to its logs.
Free plan. No credit card required.
POST /api/checkout
Error- Service
- api-gateway
- Duration
- 2.31 s
- Spans
- 7
- Status
- Error
parseCurrency
checkout-api · Node.js · 14 ms
ERROR · TypeError: Cannot read properties of undefined (reading 'amount')
- service.name
- checkout-api
- deployment.environment.name
- production
- service.version
- a41c
- code.file.path
- src/payments/currency.ts
- code.line.number
- 48
- exception.type
- TypeError
Code location src/payments/currency.ts:48Open in GitHub
Example trace. OpenTelemetry spans from three services.
Works with any OpenTelemetry SDK.
- OpenTelemetry
- Node.js
- Python
- Go
- Java
- .NET
- Ruby
- PHP
- Rust
- Elixir
One endpoint for three signals.
OTLP over HTTP, in protobuf or JSON. The key in the header picks the project, so there is nothing else to set.
- Send the key as x-squasher-key or Authorization: Bearer.
- Compress bodies with gzip if your exporter does.
- gRPC is not accepted. Use the HTTP exporter.
https://ingest.squasher.ai- POST/v1/tracesTraces
- POST/v1/logsLogs
- POST/v1/metricsMetrics
- x-squasher-key
- sq_pk_… (or Authorization: Bearer sq_pk_…)
- Content-Type
- application/x-protobuf or application/json
- Content-Encoding
- gzip, optional
What happens to each signal.
Everything you send stays searchable. Failed spans and error logs are also recorded as errors.
Traces
- Stored as
- Spans with their attributes and events
- Recorded as an error when
- The span status is ERROR
- Where you use it
- Trace search and the waterfall
Logs
- Stored as
- Log records with their attributes
- Recorded as an error when
- Severity is ERROR or higher
- Where you use it
- Log search, patterns, and query monitors
Metrics
- Stored as
- Gauges, sums, and histograms
- Recorded as an error when
- No
- Where you use it
- The Metrics API
Histograms include exponential histograms. Summary metric points are not stored.
Configure it with environment variables.
Most OpenTelemetry SDKs read these standard variables, so you change configuration, not code. Or let your coding agent find every service and set them.
Point the exporter at Squasher
Set the endpoint and the HTTP protocol. Squasher does not accept gRPC.
OTEL_EXPORTER_OTLP_ENDPOINT=https://ingest.squasher.aiOTEL_EXPORTER_OTLP_PROTOCOL=http/protobufAdd your project key
The key picks the project. Read it from your secret store, never from code.
OTEL_EXPORTER_OTLP_HEADERS=x-squasher-key=sq_pk_…Name the service and release
Add deployment.environment.name the same way. All three become filters on traces and logs.
OTEL_SERVICE_NAME=checkout-apiOTEL_RESOURCE_ATTRIBUTES=service.version=a41cSend one error span
Throw inside a traced request, then open Traces and turn on Errors only.
Check your config with the OTLP endpoint tester
Install Squasher for this project. If Squasher skills or MCP are not configured in this agent environment, run `bash <(curl -fsSL https://squasher.ai/install.sh) --agents -y`. Then read https://skills.squasher.ai/squasher-onboard/SKILL.md, map every runnable app/service/worker/frontend/agent in the repo, choose the matching Squasher SDK, log drain, OTLP, or Agent SDK path, initialize with SQUASHER_API_KEY and SQUASHER_PROJECT_ID from environment variables, send one real verification event, and report the files changed plus the verification step. Do not hardcode or reveal real API keys.bash <(curl -fsSL https://squasher.ai/install.sh) --agents -yAlready run a Collector? Add an exporter.
Add Squasher next to the backend you use today, and the same traces, logs, and metrics go to both.
- Tail-sample in your Collector, before data leaves your network.
- Translate Prometheus or Jaeger data to OTLP on the way.
- Your processors, sampling, and other exporters stay as they are.
1exporters:2 otlphttp/squasher:3 endpoint: https://ingest.squasher.ai4 headers:5 x-squasher-key: "${env:SQUASHER_API_KEY}"6 7service:8 pipelines:9 traces:10 exporters: [otlphttp/squasher]11 logs:12 exporters: [otlphttp/squasher]13 metrics:14 exporters: [otlphttp/squasher]Add the exporter to the pipelines you already run. Your other exporters stay as they are.
From an error log to its trace.
Logs and spans that share a trace ID link both ways. A log opens its trace, and a trace lists its logs.
- The Trace tab draws the waterfall for the log's trace ID.
- Related logs lists every log from the same request.
- The API and the MCP server return the same IDs to your agent.
errorcheckout-api14:06:13.246
TypeError: Cannot read properties of undefined (reading 'amount')
trace 8a71b29c4f0e3d15… · 7 spans · 2.31 s
- POST /api/checkout2.31 s
- checkout.create2.27 s
- cart.load180 ms
- SELECT carts42 ms
- GET /prices1.87 s
- SELECT prices96 ms
- parseCurrency14 ms
Example project and data
What Squasher reads from your telemetry.
Standard resource and span attributes turn into filters and context, with no extra configuration.
service.name
Becomes the service you filter traces and logs by.
deployment.environment.name
Becomes the environment filter. Older attribute names still work.
service.version
Becomes the release, so you can compare logs from before and after a deploy.
HTTP attributes
Filter traces by HTTP method, status code, and root span, and by duration.
code.file.path
Span details show the file and line where the span ran.
gen_ai.* attributes
AI spans also land in AI observability, with the model and token counts.
Questions, answered.
Does Squasher support OpenTelemetry?
Yes. Squasher accepts OTLP over HTTP at https://ingest.squasher.ai: traces at /v1/traces, logs at /v1/logs, and metrics at /v1/metrics. Any OpenTelemetry SDK, agent, or Collector can send to it.
Does Squasher accept OTLP over gRPC?
No. Use OTLP over HTTP with protobuf or JSON. If your SDK defaults to gRPC, set OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf. In the Collector, use the otlphttp exporter.
How do I authenticate OTLP requests?
Send your project key in the x-squasher-key header, or as Authorization: Bearer. The key identifies the project, so you do not need a project ID header.
Do I need the OpenTelemetry Collector?
No. SDKs can export straight to Squasher. A Collector helps when you already route telemetry through one, want to send the same data to two backends, or want tail sampling before data leaves your network.
Which OpenTelemetry data becomes an error?
A span that ends with an ERROR status, and a log record at ERROR severity or higher, are recorded as errors. Every other span and log is stored as context you can search and follow by trace ID.
Which metric types does Squasher store?
Gauges, sums, histograms, and exponential histograms. Summary points are not stored. Query metrics through the Metrics API.
How long does Squasher keep traces and metrics?
Traces are kept for 7 days to 30 days, and metrics for 30 days to 13 months, depending on your plan. The log monitoring page lists every plan.
What happens when a request is rejected?
Squasher answers 429 when a project goes over its per-minute limit, and 5xx when it cannot accept data. Retry both with backoff; OpenTelemetry exporters do this by default. Delivery is at least once, so keep stable trace and span IDs.
Go squash some bugs.
Point one exporter at Squasher and watch your first trace arrive.
Free plan. No credit card required.



