Docs

Logs and log drains

Request, function, database and audit logs in the console, and log drains that forward request and function logs to Datadog, Grafana Loki or your own HTTPS endpoint.

Updated Oct 16, 2026Open in console

Where to look

LogConsoleWhat it shows
API requestsAPI logsEvery request to your project: method, path, status, latency, service.
Edge functionsEdge logs and each function's logsEach run: status, duration, error, output preview.
PostgresPostgres logsYour database's own log: errors, slow statements, connections.
Audit trailAudit TrailSign-ins, key and policy changes, deploys, migrations — tamper-evident.
sov logs requests
sov logs api

Metrics and the live request log

Observability shows, for the chosen time range, requests, 4xx/5xx errors and error rate, response time (average, p50, p95, p99) and data transferred — for the whole project and per product (Data API, Auth, Storage, Edge Functions, Realtime). API Gateway breaks it down per service, so a slow or failing service stands out.

Observability → Request logs lists the latest 1,000 requests (method, path, status, service, duration) and updates live. Only the path is stored, never the query string, so tokens in URLs don't end up in logs.

FreeProUltraTeamEnterprise
Metrics history1 day7 days14 days28 days90 days
Request log history30 minutes7 days14 days28 days90 days

Log drains

A log drain forwards your project's logs to a tool you already use: every API request and every function run. Each line has a source of request or function. New lines are sent in batches within about 10 seconds, oldest first, and never twice. Add drains under Observability → Log drains.

DestinationYou provideNotes
HTTPS endpointURL, optional auth headerBody { "project_id", "drain_id", "logs": [...] }, signed with X-Sovaria-Signature: sha256=<hex>
DatadogSite and API keyFunction runs arrive as service sovaria-functions
Grafana LokiURL, user and tokenOne stream per source (log_type)

Destinations must be public HTTPS hosts. After repeated failed deliveries (about 20 minutes) a drain pauses itself; fix the destination and resume it. Send test delivers one sample line.

import crypto from 'node:crypto'

export function verify(rawBody: Buffer, header: string | undefined, secret: string): boolean {
  const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex')
  return !!header && header.length === expected.length && crypto.timingSafeEqual(Buffer.from(header), Buffer.from(expected))
}

Plans

FreeProUltraTeamEnterprise
Log drains per project—131050

Every limit is in Plan limits.

Something unclear or missing on this page?Tell us