Structured logging
Log custom events from the server using thelog() function:
source and type. Beyond that, you can include any fields you want — these become available for log filtering and metric dimensioning. Logs are searchable in the monitoring dashboard at /admin/monitoring/logs.
Client-side logging
Log events from the frontend using thelogs.ingest tRPC procedure:
The framework automatically sets
source: "app" and attaches the authenticated user’s ID.
metrics.json schema
Defined at the app root. Configures how metrics are derived from log entries and how charts are rendered on the monitoring dashboard. Validated at build time.Metrics
Each metric definition derives a metric from matching log entries:Dimensions
Dimensions define how metric values are grouped. Each dimension maps a log field to a set of labeled buckets:Charts
Each chart definition renders a chart on the monitoring dashboard:Stat types
Built-in metrics
The framework ships with default metrics that require no configuration:
Default charts are included for request count by status, error rate, latency percentiles, workflow job status, and infrastructure metrics (CPU, memory, task count).
Default metrics.json
Every scaffolded app includes the followingmetrics.json:
Monitoring
The dashboard at/admin/monitoring/dashboard displays all configured charts organized by tab. Logs are searchable at /admin/monitoring/logs with filtering by source, type, user, and trace ID.
For more information on viewing metrics and logs for deployed apps, see the Monitoring documentation. Metrics and logs are also available through the observability API for external monitoring integrations.
