Dashboard

What goes in an application monitoring dashboard in Metabase?

An application monitoring dashboard puts throughput, errors, latency, and availability for every application on one page, so engineering and the business read the same numbers. It's built from hourly or daily rollups exported from Datadog, New Relic, Sentry, or Prometheus — not from raw traces.

For: application owners, SREs, and engineering leadership. Grain: one row per application per environment per hour or day. Refresh: hourly.

What does an application monitoring dashboard look like?

Here’s the layout this guide builds. The top row answers “is anything outside its target right now?”; the middle section carries the traffic, error, and latency trends you read together; the bottom section is where you go once you know something is wrong.

Application monitoring dashboard in Metabase showing request rate, error rate, latency, Apdex, availability, and top error types.

An example application monitoring dashboard in Metabase, built from Datadog, Sentry, and Prometheus rollups. Figures are illustrative.

Which cards belong on an application monitoring dashboard?

The eight below are the classic set — the first four answer “is it healthy right now?”, the rest give the context that makes the answer actionable.

  • Request rate by application and environment (line)
  • Error rate by application, against target (table + line)
  • Average and p95 response time by application (line)
  • Apdex against a published target response time (trend)
  • Application availability over the trailing 28 days (table)
  • Running instance count per application, versus expected (bar)
  • CPU and memory utilization for application hosts and containers (line)
  • Top error types and their volume trend, from Sentry issues (table)

What data does the dashboard need?

  • app_health_rollups — per application, environment, and window: total requests, failed requests, pre-aggregated latency percentiles, and Apdex bucket counts.
  • applications with owner, team, tier, and target response time, so a tier-1 API isn’t judged against the same bar as an internal tool.
  • instances or container counts per application, if you want the capacity cards.
  • Optional deployments and incidents to annotate the trends with what changed.

How do you build it?

  1. Define “failed” once — HTTP status 5xx, or 5xx plus timeouts — and apply it in the rollup job so no two cards disagree.
  2. Export aggregates on a schedule from your APM tool into a database Metabase can query (see the Datadog and Prometheus guides for routes).
  3. Pre-aggregate latency percentiles and Apdex buckets at the source — neither can be reconstructed from averages later.
  4. Build the per-application table against targets first, then add trends and drill-throughs to the noisiest applications.
  5. Add dashboard filters for application, environment, team, and date range, and show the last refresh time on the page.

Example card SQL

Error rate, p95 latency, and Apdex by application by hour PostgreSQL
WITH windows AS (
SELECT
  a.app_name,
  a.environment,
  date_trunc('hour', r.window_start) AS hour,
  SUM(r.total_requests)                       AS requests,
  SUM(r.failed_requests)                      AS failures,
  MAX(r.latency_p95_ms)                       AS latency_p95_ms,
  SUM(r.satisfied_requests)                   AS satisfied,
  SUM(r.tolerated_requests)                   AS tolerated
FROM app_health_rollups r
JOIN applications a ON a.app_id = r.app_id
WHERE r.window_start >= now() - interval '30 days'
GROUP BY 1, 2, 3
)
SELECT
app_name,
environment,
hour,
requests,
ROUND(100.0 * failures / NULLIF(requests, 0), 3)          AS error_rate_pct,
latency_p95_ms,
ROUND((satisfied + tolerated / 2.0) / NULLIF(requests, 0), 3) AS apdex
FROM windows
ORDER BY app_name, hour;

Metrics

Integrations

Dashboards

FAQ

What is an application monitoring dashboard?
An application monitoring dashboard reports the health of each application your team runs — throughput, error rate, response time, and availability — on one page, at a grain a weekly review can read. It is deliberately not a live triage screen: those live in Datadog, New Relic, or Grafana and are tuned for a 3 a.m. page. This one works on hourly or daily rollups in a database, so you can compare applications, join in deploys and incidents, and answer "is this getting better or worse?"
How is this different from a service availability dashboard?
Grain and audience. A service availability dashboard judges each service against an explicit reliability target — availability and error budget, one row per service, for SREs. This one is the portfolio view an application owner reads: traffic, errors, latency, saturation, and capacity for the applications they run, with error types and instance counts alongside. Build both from the same rollups; they answer different questions.
What data sources feed an application monitoring dashboard?
APM and error tooling, exported as aggregates rather than raw spans: Datadog metric queries, New Relic NRQL results, Prometheus recording rules, or Sentry issue and event counts. Land them as an app_health_rollups table — one row per application, environment, and time window — plus an applications table with owner, tier, and platform. See the observability and infrastructure pillar for the connection routes.
How do I compute Apdex in SQL?
Apdex needs a target response time T. Every request under T counts as satisfied, every request between T and 4T counts as tolerated at half weight, and anything slower (or failed) counts as zero. So the formula is (satisfied + tolerated / 2) / total. Bucket the counts in the rollup job rather than at query time — once you have averaged response times, you can no longer recover the buckets. Pick one T per application tier and publish it next to the card, because an Apdex without its T is uninterpretable.
Why do my averaged latency percentiles look wrong?
Because percentiles cannot be averaged. Taking the mean of twenty-four hourly p95 values does not give you the daily p95 — it usually understates it badly, and the busier the hour, the worse the error. Either pre-aggregate the percentile at the grain you intend to report, or export histogram buckets and compute the percentile from those. If a card needs both hourly and daily p95, produce both in the rollup job.
Which application should be at the top of the dashboard?
None of them, individually. Lead with a single count — applications currently outside their target — and put the per-application table directly underneath it. Averaging error rate or availability across a portfolio hides the one application that is failing, which is the only thing the reader needed to see. Set targets per tier, so a tier-1 API is not judged against the same bar as an internal tool.
How do I connect degradations to releases?
Join a deployments table — service, environment, timestamp, version — onto the same time axis and annotate the trend charts with it. Most regressions are release-shaped, and having the deploy markers on the error-rate chart turns "something broke on Tuesday" into a version number. The same table feeds change failure rate on your DORA dashboard.