OpenTelemetry-native · no re-instrumentation

Observability without
the invoice shock.

Logs, metrics and traces in one hosted platform — priced so you can afford to keep the data you actually need when something breaks at 3am.

Free tier, no card required. Point an OTLP exporter at us and you're done.

3 signals
logs, metrics, traces — correlated
2 minutes
from signup to first trace
1 endpoint
change one exporter URL, keep your SDKs

The problem

You're sampling away the data you need.

Ingest-priced observability quietly turns every debug log into a line item, so teams turn logging down — and then an incident arrives and the evidence isn't there.

The bill grows with your traffic

A good quarter becomes a budget conversation. Per-gigabyte pricing means success is indistinguishable from cost overrun, and the only lever anyone reaches for is retention.

So you sample, and lose the tail

Head-based sampling drops exactly the rare request you'll be asked about. The p99 you need to explain is the one that got discarded on the way in.

Or you self-host and pay in people

Running Loki, Mimir and Tempo yourself is cheap on paper and expensive in on-call. Three stateful systems is three things to shard, upgrade and get paged about.

Whale is built on one columnar store instead of several specialised ones, which is structurally cheaper to operate — and we price accordingly rather than to what the market will bear. Keep full-fidelity data and stop rationing it.

Getting started

Change one endpoint. Keep everything else.

Whale speaks OTLP natively over HTTP and gRPC. If you already emit OpenTelemetry, this is a config change — not a re-instrumentation project.

OpenTelemetry Collector
exporters:
  otlphttp/whale:
    endpoint: https://ingest.whale.balajitech.xyz
    headers:
      x-api-key: ${WHALE_API_KEY}
or any OTel SDK
# environment variables, nothing else changes
OTEL_EXPORTER_OTLP_ENDPOINT=https://ingest.whale.balajitech.xyz
OTEL_EXPORTER_OTLP_HEADERS=x-api-key=$WHALE_API_KEY

What you get

A whole platform, on day one.

Not a log viewer with a roadmap. These ship today, on every paid plan.

The one-request view

The reason the three signals share a store. Follow a trace into a span waterfall with its correlated logs and the service metrics around it — one click, not three tabs.

Search that reads like a sentence

service:api severity>=ERROR body:"timeout" | last 1h — with a severity histogram and a live tail that streams as it happens.

Golden signals & Apdex

Throughput, error rate, p50/p95/p99 and Apdex per service, plus a dependency map built from your trace topology rather than a config file you have to maintain.

Error tracking

Errors grouped into issues with counts, first and last seen, and the traces behind them. The Sentry-shaped view, over telemetry you're already sending.

Service levels

SLOs with error budgets and burn rate, so you can answer "are we still allowed to ship?" with a number instead of a feeling.

Alerts & uptime

Threshold rules to Slack and webhooks with firing/resolved dedup, HTTP and TCP uptime checks, and a public status page you can point customers at.

Dashboards that stay fast

Rollups are selected automatically by query range, so a 30-day chart doesn't scan thirty days of raw points and time out on you.

AI where it helps

Ask in plain English, get the query. Explain an error against its correlated context. Surface metric anomalies you didn't think to alert on.

Projects and teams

Scope data by project, invite your team, and keep staging noise out of the view you use during an incident.

Under the hood

Why we can charge less.

One columnar store holds every signal. That's not a detail — it's the entire reason the economics work differently, and it's why correlation is a join rather than an integration.

Your servicesOTel SDK / CollectorIngestOTLP HTTP + gRPC:4318 · :4317ClickHouselogs · metrics · spansone store, all signalsthe only shared stateQuerysearch · correlate:4001Alertingrules · uptime:4002Web UI:3000the only writerreads the query API

Pricing

Priced on events, not surprises.

You're metered on events — one log line, one metric point, or one span. Watch the count live in your dashboard before you commit to anything.

Free
$0forever
5M events / month · 3-day retention
Scale
$199per month
500M events / month · 30-day retention

Overage is billed per million events, and you can set a hard cap instead if you'd rather be throttled than charged.

The fine print

Things you'll ask before you send us data.

Your data is yoursExport it over the query API at any time. OTLP in, JSON out — no proprietary format holding it hostage.
Tenant isolationEvery row carries a tenant and every query is scoped to it. Multi-tenancy was in the schema from the first migration, not bolted on.
No lock-inYou're sending standard OpenTelemetry. Leaving is the same config change as arriving.
Self-host if you mustOn Enterprise, run the whole platform on your own infrastructure when compliance requires it.

Stop rationing your telemetry.

Free tier, no card, and your existing OpenTelemetry setup works unchanged.