M
Observability

Metrics

Counters, gauges, histograms — anything you can `:telemetry.execute`. OTLP-native.

How it works

Funnel accepts metrics on `POST /v1/metrics` as OTLP/JSON, OTLP/HTTP+Protobuf, or OTLP/gRPC. The pipeline decodes batches, applies WAAP & SDS scans, enforces the project's burst + daily quotas, and writes them into a Postgres table partitioned monthly with BRIN(time) and GIN(attributes). Aggregation happens at query time via `date_trunc` + `width_bucket` — no separate time-series engine needed.

What this lets you do

  • Track latency, throughput, error rate, business KPIs in one place
  • P50/P75/P95/P99 percentiles by service, route, region, anything in attributes
  • Live charts in the dashboard via Phoenix PubSub — no polling, no page refresh
  • Drop in any OpenTelemetry SDK and metrics start flowing within seconds

Get it running

  1. 1 Create an API key in `API keys` (scope: `metrics:write`)
  2. 2 Point your OTel exporter at `https://YOUR-FUNNEL/v1/metrics`
  3. 3 Add the auth header `Authorization: Bearer st_YOUR_KEY`
  4. 4 Watch the metric appear under `Metrics Explorer` within ~250 ms

Code examples

curl -X POST https://funnel.example.com/v1/metrics \
  -H "Authorization: Bearer st_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "metrics": [{
      "name":  "http.server.duration_ms",
      "kind":  "gauge",
      "value": 182.3,
      "attributes": { "service": "api", "route": "/users", "status": 200 }
    }]
  }'
Where to find it
/app/p/:org/:project/metrics
Open in app →