Dashboards¶
Status: draft M0. Six Grafana dashboards (seven since M7-25, the seventh uses the panel plugin of section 5) as files under infra/observability/grafana/dashboards/, loaded through file provisioning (https://grafana.com/docs/grafana/latest/administration/provisioning/, retrieved 2026-10-10) [verified].
1. Overview¶
| File | UID | Title | Content |
|---|---|---|---|
server-overview.json |
bothy-server-overview |
Bothy / Server overview | REST success and latency, processes per role, gateway connections, messages by origin, authorization, rate limits, error logs |
delivery-sync.json |
bothy-delivery-sync |
Bothy / Delivery and sync | Delivery latency, fan-out lag, events per type, waiting at the sequence counter, connecting, catch-up, resync_required, close codes, worker consumers (lag and age of the oldest pending event per bothy_consumer_name) |
agent-runs.json |
bothy-agent-runs |
Bothy / Agent runs | Active runs, start latency, turn duration, failure reasons, steps, tokens, costs per currency (estimate), consumer backlog, heartbeat, rejections (I2), mode mismatches (heartbeat and I3) |
push.json |
bothy-push |
Bothy / Push | Acceptance by the provider, fetch rate, sends by result, send duration, skips |
database.json |
bothy-database |
Bothy / Database and backup | Connections, size, deadlocks, commits and rollbacks, query duration, pool, largest tables, age of the backups, WAL archive, restore test, free space |
slo-overview.json |
bothy-slo-overview |
Bothy / SLO overview | Targets, attainment over 30 days, remaining error budget, burn rate, active alerts |
bothy-live.json |
bothy-live |
Bothy / Live | five panels of the plugin bothy-live-panel (section 5): live topology per agent, backend view, delivery and sync, SLO traffic light, timeline; variable env only |
All dashboards have the variable env (from target_info, label
deployment_environment_name); agent-runs also has agent. Data sources with the fixed UIDs
prometheus, loki, tempo, alertmanager from
datasources.yaml.
2. Checked¶
Locally on 2026-10-10 [verified]:
- All PromQL expressions of the dashboards (after replacing the Grafana variables) with
promtool check rulesfrom Prometheus v3.15.0: valid. - Grafana 13.2.3 started with the provisioning of this repository: four data sources and six
dashboards loaded,
provisioned = true, no errors in the log. - Metric names after the Prometheus translation (see signals.md 1).
Not checked: presentation with real data. The portability test does this as soon as the server delivers telemetry.
3. Maintenance¶
- Dashboards are code. The provider sets
allowUiUpdates: falseanddisableDeletion: true. - Changing: edit in a local Grafana, export the JSON ("Export for sharing externally"
off), replace the file, normalize the formatting with
jq, commit. - Every new query uses only metrics from signals.md; the naming test (17-observability.md 10) checks this.
- Grafonnet is not used: the library calls itself experimental and not intended for production use (https://github.com/grafana/grafonnet, retrieved 2026-10-10) [verified].
- Runtime texts (titles, descriptions) are English (R-OB-09).
4. Other backends¶
The dashboards use PromQL and LogQL. With New Relic, Datadog, Azure Monitor or Sentry, their own views apply; this file provides the list of questions that every backend must answer (section 1, column Content). A ticket per backend can rebuild them there; the product ships only the Grafana version.
5. Panel plugin "Bothy Live"¶
With M7 the own panel plugin bothy-live-panel from plugins/grafana-bothy-live is added
(25-visualization.md, section 8):
- It shows the views of the apps (live topology per agent, backend view, delivery and sync,
SLO traffic light), as far as metrics support them, in the colors and fonts of the design tokens.
Data comes only through the data sources of this repository (
prometheus,tempo). - A seventh dashboard
bothy-live.json(UIDbothy-live, title "Bothy / Live") uses the panel; it follows the rules from section 3. The six dashboards from section 1 stay unchanged. - Queries are in
plugins/grafana-bothy-live/queries.yaml; the naming test (17-observability.md 10) checks them like the dashboards. - Until V1 the plugin is unsigned and is provisioned locally; Grafana loads it only because
allow_loading_unsigned_pluginsnames exactly this ID (ruling T11). Signing later after the owner's decision. - Embedding dashboards in the web console is optional and off by default; in apps it never exists (25-visualization.md, section 9).
As built (M7-25): bothy-live.json has one panel per view (option view), each with the
targets of its view in plugins/grafana-bothy-live/queries.yaml; a unit test of the plugin
holds them equal, and make signal-check checks queries.yaml and the dashboard against the
catalogue. The provider of infra/observability/grafana/provisioning/dashboards/ loads it with
the other six, but Grafana renders its panels only once the plugin build is installed and
allowed unsigned; that provisioning in the Compose stack is M7-26. TV mode is Grafana's kiosk
mode: /d/bothy-live?kiosk (verified for Grafana 13.2,
25-visualization.md section 8.2).