DASHBOARDING
Last reviewed: 2026-09-17
Purpose: Dashboard design and data visualisation β dashboard types, panel and chart selection, layout and refresh strategy, alerting, and the tools used for operational and analytical dashboards.
Table of Contents
- Overview
- Dashboard Types
- Design Principles
- Choosing a Visualisation
- Layout, Refresh & Performance
- Alerting from Dashboards
- Tooling
- Operational Checklist
- Topics Covered
Overview
A dashboard answers a specific question for a specific audience quickly. Two failure modes dominate: dashboards that show everything (and therefore answer nothing), and dashboards built for monitoring that are used for analysis. Decide up front which question is being answered, how often it is asked, and what action the viewer should take when a number looks wrong.
Dashboard Types
| Type | Audience | Characteristics |
|---|---|---|
| Operational / monitoring | On-call engineers | Real-time, high refresh rate, thresholds and alerts, few panels, obvious pass/fail state |
| Technical / diagnostic | Engineers debugging | Fine-grained per-host or per-service breakdowns, links to logs and traces |
| Analytical / business | Analysts and managers | Historical trends, comparisons, filters over long time ranges, slower refresh |
| Executive | Leadership | KPIs and scorecards, month-over-month context, minimal detail, drill-through to detail dashboards |
A monitoring dashboard that grows past roughly one screen stops being useful during an incident β split detail into a second, linked dashboard instead.
Design Principles
- One question per dashboard. A title like "API availability" beats "Platform overview".
- Show state, not just data. Colour-coded thresholds (green/amber/red) let a viewer assess a panel in under a second.
- Left-to-right, most-important-first. Golden signals (traffic, errors, latency, saturation) go top-left.
- Label units and time zones. Milliseconds versus seconds, and UTC versus local, cause more misreadings than any visual choice.
- Annotate deployments and incidents on time series so a step change is explainable.
- Default to a meaningful time range (last hour for operations, last 30 days for business) rather than "last 5 minutes".
- Version dashboards as code β provision them from JSON/YAML in the repository so changes are reviewable and restorable.
Choosing a Visualisation
| Intent | Chart |
|---|---|
| Trend over time | Time series (line/area); multiple series only when compared directly |
| Current value against a target | Stat/gauge with thresholds and a delta indicator |
| Distribution across categories | Bar chart, sorted by value |
| Share of a whole | Pie or donut β only with a handful of slices, otherwise use a bar |
| Distribution of many samples | Histogram or heatmap |
| Correlation between two metrics | Scatter plot |
| Raw detail with context | Table, with cell formatting and drill-through links |
| Flow or state change | State timeline / status history |
Avoid dual axes on a single chart, 3D effects, and truncated Y-axes on bar charts β all three routinely mislead.
Layout, Refresh & Performance
- Prefer a small number of wide panels over many narrow ones; a dashboard should be readable at 1280 px wide.
- Group related panels into collapsible rows (overview row expanded, detail rows collapsed).
- Use template variables (instance, job, environment) so one dashboard serves every environment instead of one dashboard per environment.
- Choose a refresh interval matched to the data's granularity; refreshing a 15-second scrape every second wastes resources and produces noisy charts.
- Push expensive aggregation to the query layer: record rules or continuous aggregates instead of
rate()over a 30-day range on every load. - Test dashboards against the largest time range users commonly pick β that is where slow queries surface.
Alerting from Dashboards
Threshold lines make a dashboard readable; alerts make it actionable. Rules of thumb:
- Alert on symptoms users feel (error rate, latency, saturation) rather than on every underlying cause metric.
- Require a sustained breach (
for: 5m) to avoid paging on a single spike. - Keep alert severity meaningful: one page-worthy tier, everything else a ticket or a channel notification.
- Include a link to the relevant dashboard and runbook in the alert payload.
- Review alert noise monthly β alerts that are routinely ignored train people to ignore real ones.
# Prometheus-style alert rule referenced by a dashboard panel
groups:
- name: api-availability
rules:
- alert: HighErrorRate
expr: |
sum(rate(http_requests_total{status=~"5.."}[5m]))
/ sum(rate(http_requests_total[5m])) > 0.05
for: 5m
labels: { severity: page }
annotations:
summary: "API error rate above 5% for 5 minutes"
dashboard: "https://grafana.example.com/d/api-availability"
Tooling
| Tool | Best for | Notes |
|---|---|---|
| Grafana | Operational dashboards over time-series and log data | Native Prometheus/Loki/Tempo/SQL data sources, provisioning as code, unified alerting |
| Kibana | Log and search-heavy visualisation | Strong on Elasticsearch aggregations |
| Streamlit | Internal Python dashboards, quick analytics apps | Fast to build, less control over layout and refresh |
| Plotly Dash | Interactive analytical web apps | Callback model, good for drill-down and custom interaction |
| Apache Superset | SQL-first BI, self-service exploration | Rich chart library over warehouse SQL |
| Power BI / Tableau | Business reporting with governed semantic layers | Licensed, strong for scheduled distribution |
For streaming metrics, the serving layer matters as much as the chart: dashboards query a metrics store (Prometheus) or a real-time OLAP engine (Apache Pinot) with SQL, and the dashboard's refresh interval can never be faster than data actually lands in that store.
Operational Checklist
- [ ] Dashboard title states the question it answers
- [ ] Units, time zone and data source are visible
- [ ] Thresholds or comparison baselines are set on key panels
- [ ] Loading time under a few seconds at the widest supported range
- [ ] Defined as code, reviewed in a pull request, stored in version control
- [ ] Linked from the relevant runbook or alert, and reachable without a VPN surprise
- [ ] Owner named, and panels that nobody reads removed
Topics Covered
- Dashboard categories: operational, technical, analytical and executive
- Design principles for readability and fast incident triage
- Selecting the right chart type for a given question
- Layout, template variables and refresh performance
- Alerting from dashboards versus alerting in the monitoring backend
- Tool selection across Grafana, Kibana, Streamlit, Dash, Superset and BI platforms