Configure Observe

3 min read

Configure Observe

The full environment variable reference lives in the repository README. These are the ones most installs touch.

Core

Variable Default Description
OBSERVE_ADDR :3000 Listen address. Keep on localhost or tailnet when publishing ingest.
OBSERVE_INGEST_ADDR (unset) Optional second bind serving ONLY telemetry-write endpoints. This is the port to expose publicly; the dashboard does not listen on it.
OBSERVE_NUCLEUS_URL postgres://localhost:5432/observe Database engine connection.
OBSERVE_JWT_SECRET (random) Set in production to persist sessions across restarts.
OBSERVE_SECRET_KEY (unset) Master key for encrypting stored secrets at rest; required for LLM keys and S3/R2 credentials.
OBSERVE_ADMIN_PASSWORD (unset) Unset means no default — the /setup wizard creates the account on first visit.
OBSERVE_PUBLIC_URL (unset) External base URL used for SSO metadata and generated links. Set it whenever the instance is reachable by a name.
OBSERVE_RATE_LIMIT 1000 Default per-site events/sec; per-site overrides via API.
OBSERVE_TRUSTED_PROXIES (unset) CIDRs whose X-Forwarded-For are trusted. Empty trusts none, so clients can't spoof their IP to evade per-IP rate limiting.

Ingest durability

Variable Default Description
OBSERVE_WAL_MAX_TOTAL_BYTES 512 MB Disk high-water across WAL segments. Durable mode refuses new events with a retryable 503 until the checkpoint advances; lossy mode deletes instead.
OBSERVE_WAL_GROUP_COMMIT_MAX_DELAY 25 ms Bound of the group-commit window — ingest 200s share one fsync per window instead of one per event.
OBSERVE_WAL_LOSSY (unset) true opts into lossy mode: acknowledgments return without an fsync, with a declared loss budget. Default is durable mode.
OBSERVE_REQUIRE_WAL (unset) true refuses to start when WAL-backed durability is unavailable, instead of degrading to memory-only.

Retention

Raw events 30 days (OBSERVE_RAW_RETENTION_DAYS), hourly rollups 365, LLM traces 30, OTLP metric points 30, uptime results 90. Cleanup runs daily.

OTLP

HTTP ingest for traces, metrics and logs accepts both wire formats on the main listener. OTLP/gRPC is opt-in via OBSERVE_OTLP_GRPC_ADDR (e.g. 127.0.0.1:4317; plaintext unless TLS is configured, so keep it behind a proxy or tailnet).

Single sign-on (OIDC)

Optional. Set OBSERVE_OIDC_ISSUER and OBSERVE_OIDC_CLIENT_ID and the login page offers an SSO button (authorization-code flow with PKCE). Password login stays available as the break-glass path. Register https://<your-observe-host>/api/v1/auth/oidc/callback as the redirect URI with your provider.

Roles resolve from a teploy_role claim if present, otherwise from groups (OBSERVE_OIDC_ADMIN_GROUP, ..._EDITOR_GROUP, ..._VIEWER_GROUP), otherwise OBSERVE_OIDC_DEFAULT_ROLE (least privilege: viewer).

Forgejo works as the identity provider if you already run one — register an OAuth2 application, request the groups scope explicitly, and map roles by group. Group comparison is exact and case-sensitive, so copy names as Forgejo spells them.