Skip to content
Noite
Esc
↑↓navigate↵open⌘Jpreview
On this page

Observe

Logs, metrics with spans, errors, product-analytics events, and idle sleep for one app.

Logs

The Deployments tab shows the app’s runtime logs, live over SSE, and follows the tail while pinned; scroll up to hold still. It holds the last 24 hours of logs ingested from celld’s telemetry (up to 500 lines, about 40 s behind live traffic) followed by the fleet’s live stdout/stderr, which lives in memory and resets when the runner restarts. Each deploy’s build log is on its own row in the same tab.

Metrics and spans

The Metrics tab covers the last 24 hours, 7 days or 30 days (the range picker; ?r= keeps it across reloads): charts for requests, errors, latency and CPU, plus stat tiles. Requests count celld.fetch spans; errors, latency, and queue wait come from the same spans; CPU is sampled from the celld process tree. The Overview tab shows the same numbers in a smaller card.

Below the charts, the spans table lists recent slow or failed requests, and the analytics tables break traffic down by browser and OS, path and referrer.

Errors

The Errors tab collects exceptions without an SDK. Noite reads them from the same telemetry as Metrics, so they show up about a minute after they happen.

  • What counts: anything a handler throws or rejects (fetch, Durable Objects, alarms, queues, cron), a rejected ctx.waitUntil(), and console.error(err) when err carries a stack. A console.error("text") without a stack stays a log line.
  • Grouping: occurrences group into one error by type plus the functions in your code on the stack. Line numbers are ignored, so a redeploy doesn’t split an error in two. Errors without a stack group by message, with numbers and ids masked.
  • Each occurrence keeps the stack trace (runtime frames dimmed), the request’s method, path (never the query string), status and browser, the log lines from the same request, and the commit that was live. The last 20 occurrences are kept per error.
  • Triage: anyone with push access can resolve, ignore or reopen an error. A resolved error that happens again reopens and is marked Regressed. An ignored one keeps counting but never reopens.
  • Retention follows telemetry retention (RUNNER_TELEMETRY_RETENTION_DAYS, 30 days by default).

Events, insights, devices, paths, refs

The Events tab is tenant-facing product analytics, separate from metrics. The app emits events into named channels; the UI offers channel filter, text search, paging, per-event tags and user properties, and insight widgets over the feed.

Before the first event lands, the tab shows an ingest snippet for that app. Identified users carry properties that appear with their events.

Sleep

An app with no requests for a day stops costing anything; the next request wakes it.

  • Asleep is not stopped. Desired state stays running; status reads sleeping. A stopped app never sleeps or wakes.
  • Idle window: 24 h of no requests by default. A fresh deploy or manual start gets a full window before it can sleep.
  • Wake is invisible. The edge holds the request — body included — while the fleet cold-starts, typically a few seconds, then proxies it as if the app had never slept. Concurrent requests wait on the same wake, and only a few apps start at once host-wide (RUNNER_WAKE_CONCURRENCY); only a failed wake answers 503.
  • Deploy wakes. A push, rollback, or web commit to a sleeping app starts the fleet first.

Was this page helpful?