Get started

Your first trace, in two minutes.

Nothing to install and nothing to re-instrument. If your services already emit OpenTelemetry, this is one environment variable.

1 — Account

Create a workspace

The free tier needs no card. You'll land on an empty dashboard with an API key waiting for you in settings.

2 — Point your exporter

Change one endpoint

Whale speaks OTLP natively over HTTP and gRPC, so there's no vendor SDK and no agent to install. Whatever you already use keeps working.

any OTel SDK — environment only
OTEL_EXPORTER_OTLP_ENDPOINT=https://ingest.whale.balajitech.xyz
OTEL_EXPORTER_OTLP_HEADERS=x-api-key=$WHALE_API_KEY
OTEL_SERVICE_NAME=checkout-api
OpenTelemetry Collector
exporters:
  otlphttp/whale:
    endpoint: https://ingest.whale.balajitech.xyz
    headers:
      x-api-key: ${WHALE_API_KEY}

service:
  pipelines:
    logs:
      exporters: [otlphttp/whale]
    metrics:
      exporters: [otlphttp/whale]
    traces:
      exporters: [otlphttp/whale]

3 — Confirm

Prove it's arriving

Not wired up to OTel yet? Send one event by hand and watch it land in the explorer.

one log line
curl -s https://ingest.whale.balajitech.xyz/dev/logs \
  -H "x-api-key: $WHALE_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"service":"checkout-api", "body":"payment timeout"}'

Then open the Logs tab in your dashboard — it should be there within a second, and the live tail will show it stream in.

Reference

Ingest endpoints

PathFormatUse
POST /v1/logs · /v1/metrics · /v1/tracesOTLP/HTTP — protobuf or JSONAny OTel SDK or Collector, no special config
OTLP/gRPC ExportOTLP/gRPC protobufThe default OTLP transport for most SDKs
POST /dev/logs · /dev/metrics · /dev/spansSimple JSONcurl, smoke tests, seeding a demo
WS /v1/logs/tailWebSocketLive tail in the browser
GET /usageJSONYour event count today, against your plan limits

Every path authenticates with your workspace API key — the x-api-key header over HTTP, or gRPC metadata. The websocket tail takes it as a query parameter, since browsers can't set headers on a WebSocket handshake.

Migrating

Already sending OTLP somewhere else?

Then this is a one-line change, not a project. Add Whale as a second exporter first, run both for a week, and cut over when you're satisfied the data matches — OpenTelemetry pipelines fan out to as many destinations as you like.

dual-write while you evaluate
service:
  pipelines:
    traces:
      exporters: [otlphttp/incumbent, otlphttp/whale]

Self-hosting

Need it inside your own perimeter?

Whale runs on your own infrastructure against your own ClickHouse on Enterprise plans — same platform, same UI, your network. Most teams start hosted and only move if compliance requires it.

That's the whole setup.

One endpoint, one API key, and the instrumentation you already have.