Skip to content

Observe

Grafana

Dashboards and alert rules are files that vanilla Grafana loads through provisioning. No community plugins are needed. Every panel and variable query was executed against the migrations in an ephemeral PostgreSQL before it landed in the repository.

Variables

Every dashboard starts with project and environment, listed from the devices the server has seen. Time ranges apply to the event, session or crash time, never to the receive time.

Dashboards

Dashboard What it shows Extra variables
Overview Events, active users, sessions, crash-free rate, open issues and new people for the range, with trends and the top events and issues none
Event segmentation Trends of the chosen events, a breakdown by the value of one property key, and splits by event, platform and app version event, platform, app_version, property, cohort
Funnel People who reached each step in order within the conversion window, with overall and step-to-step conversion steps (event names in order, comma separated), window
Retention A cohort matrix of the share of people who did the return event N periods after first doing the birth event, plus cohort sizes and the average curve birth, return, period, periods
People A searchable profile list and a drilldown for one user id: properties, devices, sessions, events and crashes search, user
Crashes Crash-free sessions and users over time, fatal and non-fatal crashes, the issue list, and splits by app version and platform none
Issue One issue: its history, crashes by build and platform, the latest crash with frames, custom keys, log lines and raw stack trace, and the events of the crashed session as breadcrumbs issue
Consent Grants and withdrawals over time by purpose, the state currently in force per device, policy versions, and erasures none

Issue ids and user ids in tables link to the issue and people dashboards. The funnel and retention panels of the shared dashboards call the SQL functions reporting.funnel and reporting.retention installed by the server's migrations; the declared ones call reporting.funnel_steps and reporting.retention_matching, which also match on property values. A declared metric with a measure plots the aggregate, with the event count on the right axis.

Actions

Dashboard Panel Actions
Issue Issue Resolve, Ignore and Reopen the issue shown
Crashes Issues, on each row Resolve, Ignore and Reopen the issue of that row
People The selected user, at the top Erase the person, after confirming

Only a Grafana Admin can act; the server checks the identity Grafana signs for the signed-in user and refuses everyone else. What each action does is described in Operations.

Project folders

An environment that declares funnels, retention, metrics or cohorts gets a dashboard of its own, generated from the declaration and provisioned into the folder Insights · <slug> / <environment> with the title <slug> / <environment>. It holds one bar chart with conversion stats per funnel, one cohort matrix with the average curve per retention analysis, one time series of daily events and people per metric, and a table of cohort sizes when cohorts exist. Every panel follows Grafana's time range. The eight shared dashboards stay in the "Peculiar Insights" folder and keep working for every environment.

The declarations are described in Deploying with NixOS. The same declarations produce reporting views over a fixed lookback, reporting.funnel_<slug>_<environment>_<name> and its siblings, for Explore and for tools other than Grafana.

Alerts

Rules are provisioned into the folder "Peculiar Insights" and evaluate every five minutes. Every rule groups by project and environment.

Rule Fires when
New crash issue An issue was first seen in the last 15 minutes
Crash issue regressed A resolved issue reappeared on a newer build in the last 15 minutes
Crash-free sessions below 95 percent Over the last hour, with at least 20 sessions, fewer than 95 percent were crash-free, sustained for 10 minutes
Ingest silence An environment that had events in the last 24 hours received none in the last 30 minutes

Writing your own panels

The reporting schema is the public surface: reporting.event, reporting.person, reporting.device, reporting.session, reporting.issue, reporting.crash, reporting.consent, reporting.erasure, reporting.crash_free_daily, the cohort views, the declared funnel, retention and metric views, and the funnel and retention functions. Properties are jsonb; extract with properties->>'key'. Raw tables are not visible to the reader role. Explore is for a one-off question; anything worth keeping belongs in a declaration.