Uplink Docs
Observability
Documentation

Observability

Uplink’s observability is local-first: request capture, access logs, and agent diagnostics all live on your device. Anything an edge reports to a control plane is metadata only — headers and bodies never leave the request path.

Traffic inspector

Capture is enabled per service, two ways:

  • uplink.yaml — set inspect: off | metadata | full on a service and run uplink up. The default is off; a config-declared service opts into capture explicitly.
  • Interactively — toggle capture per tunnel in the desktop app or the uplink ui inspector.

A plain uplink serve never enables capture. The modes:

  • metadata records the request line, status, timing, sizes, and client IP — no headers or bodies.
  • full also records headers and bounded payloads.

Captures land in the device-local inspector store; browse them in the desktop app or uplink ui — both read the same local state.

Access logs

uplink logs api           # local access log for one served app

uplink logs <app> prints the local access log for a served app; use uplink status to list known app names.

Agent diagnostics

When the CLI and desktop app seem to disagree, inspect the local serving daemon without starting it:

uplink agent status
uplink agent status --output=json

This reports the state directory, socket path, log path, sidecar path, protocol version, and a live snapshot when the agent is running.

Edge metering

When an edge is connected to a control plane, it pushes metadata-only telemetry: request counts, byte totals, status-class buckets, auth failures, and security events (route misses, disallowed source IPs, policy rejects, firewall monitor/enforce matches, rate limits, saturation). The control plane is observe-only and never sits on the visitor request path. Request headers and bodies stay on the local inspector path and are never exported.

A self-hosted edge does not report into Uplink’s hosted dashboard. Its operator can set OTEL_EXPORTER_OTLP_ENDPOINT to export the same bounded edge telemetry to an OTLP collector they control; leaving it unset keeps export inert.

For a self-hosted Compose edge, add the endpoint to the bundle’s .env and recreate the edge container:

OTEL_EXPORTER_OTLP_ENDPOINT=https://otel.example.com:4317
${EDITOR:-vi} .env
docker compose up -d uplink-edge
Search across 15 pages.
↑↓ navigate openEsc close