Production telemetry runs on three legs: Sentry for errors, OpenTelemetry traces for the hot path, Horizon for queue health. The admin Site Health pill (see Site health & failed jobs) summarizes them at a glance.

Sentry

Set SENTRY_DSN and unhandled exceptions across the app flow into Sentry with stack traces, request context, and user/workspace metadata. The breadcrumb trail captures the last 100 log lines for every error. Integrated via sentry-laravel.

Useful filters in Sentry:

OpenTelemetry traces

The OTEL exporter ships traces to OTEL_EXPORTER_OTLP_ENDPOINT — typically Honeycomb or Grafana Cloud Tempo. Spans wrap the hot path:

Each span is tagged with workspace_id, agent_id, conversation_id, provider (cloudflare / openai), and any cache-hit flags. The big one is p95 of rag.llm.first_token — that's your hot-path SLO.

Horizon

/horizon is the queue dashboard. Required for production — without it, you're blind to backlogs. Watch:

Queues to monitor:

QueueWhat's on it
defaultMisc: usage events, gap detection, audit logs, webhook deliveries.
crawlCrawlSourceJob, CrawlPageJob, IngestNotionPageJob, IngestGoogleDocJob. Tends to be the longest queue depth.
indexIndexDocumentJob, IndexTextSourceJob. Embedding-heavy.

Logs

Standard Laravel logging. Default channels:

Tail logs locally with php artisan pail.

Health endpoint

GET /up is the readiness probe — returns 200 with a small JSON body if the app boots. Use it for load balancer health checks. For deeper checks, App\Support\PlatformAdminHeader runs the multi-step health check and exposes the result via the Inertia shared prop on every admin page.

Metrics to watch

The handful of metrics that matter most:

Alerts

Recommended PagerDuty / Slack alerts:

Site Health pill

The header pill in the admin panel is a quick visual check that everything is configured. Green is the steady state; if it goes amber, the dropdown tells you exactly which check failed and links to the settings page to fix it. See Site health & failed jobs.