What Should an Application Monitoring Dashboard Track?

A monitoring dashboard can contain dozens of graphs and still fail at its most important job.

Imagine opening one during a production incident. CPU looks normal. Memory is green. Request volume is steady. Several service-specific charts show nothing obviously unusual.

Yet customers cannot complete checkout.

The dashboard contains plenty of data, but it does not answer the question everyone actually cares about:

Is the application working properly for users right now?

That should be the starting point for application monitoring dashboard design.

A useful dashboard is not an inventory of every metric your technology stack can produce. It is a deliberately selected view of the signals that tell you whether important application outcomes are succeeding, whether service behaviour is deteriorating and where to investigate when something changes.

AWS describes dashboards as a human-centric view into workload telemetry and recommends balancing technical metrics with business KPIs rather than overloading dashboards with every available measurement. AWS Well-Architected: Create Dashboards

For Levelworks, a good monitoring dashboard supports the Observable dimension of App Health. It should give the people responsible for an application a useful answer to three questions:

Is the application healthy now? What is changing? Where should we look next?

Start the dashboard with user and business outcomes

The top of the dashboard should answer whether the application is delivering the function it exists to provide.

For an ecommerce application, that might include:

  • successful checkouts;
  • payment success rate;
  • order-processing success;
  • login success.

For a SaaS product, it could include:

  • successful user sessions;
  • completed core workflows;
  • file-processing success;
  • report-generation success;
  • API operations completed successfully.

These are more meaningful than beginning with infrastructure.

AWS recommends defining workload KPIs around business outcomes because technical metrics alone can show apparently normal system behaviour while the workload is failing to achieve its actual purpose. It gives examples such as orders successfully processed as indicators that may expose workload problems faster than infrastructure measures such as CPU utilisation. AWS Well-Architected: Establish KPIs

A useful dashboard hierarchy therefore begins:

User outcome → application behaviour → dependencies → infrastructure

rather than:

Infrastructure → more infrastructure → perhaps the user eventually

That ordering also helps during incidents. If checkout success is normal, a temporary infrastructure spike may not deserve immediate attention. If checkout success has fallen sharply, the team immediately knows that the problem has crossed from technical abnormality into user impact.

[Internal Link: “Application Monitoring: What Should You Monitor in a Production App?”]

Track the four signals that describe production behaviour

Once the dashboard establishes whether important workflows are succeeding, the next layer should describe how the application is behaving.

Google SRE's four golden signals remain a useful framework:

  • Latency
  • Traffic
  • Errors
  • Saturation

Google recommends these four because together they describe how long work takes, how much demand the application is receiving, what proportion is failing and how close the system is to its limits. Google SRE: Monitoring Distributed Systems

Latency: how long are users waiting?

Show latency for the operations users actually care about.

Avoid displaying only an overall average.

A service where 95% of requests complete in 250 ms and 5% take five seconds may still show an acceptable-looking average while a significant group of users experiences poor performance.

For important APIs and workflows, useful dashboard values might include:

  • median or p50 latency;
  • p95 latency;
  • p99 latency where traffic volume makes it meaningful;
  • latency split by successful and failed requests;
  • latency by important operation.

Google SRE specifically recommends distinguishing successful-request latency from failed-request latency because combining them can produce misleading results.

A top-level dashboard does not need latency for every endpoint. Show the workflows whose deterioration would matter, then link to service-level dashboards for deeper inspection.

Traffic: how much demand is reaching the application?

Traffic gives other signals context.

An error rate of 1% means something different at 50 requests per minute than at 50,000.

Track whichever measure represents demand accurately for your application:

  • requests per second;
  • active users;
  • transactions;
  • jobs submitted;
  • events processed;
  • concurrent sessions.

Traffic is especially useful when viewed alongside latency and errors. A sharp increase in latency during a large traffic increase points the investigation in a different direction from latency deterioration while demand remains unchanged.

Errors: what proportion of work is failing?

A useful dashboard shows errors as rates, not merely totals.

Track failure around business-relevant operations rather than merging everything into one global error number.

For example:

  • API error rate;
  • failed checkout rate;
  • authentication failure rate;
  • job failure rate;
  • application crash rate;
  • dependency timeout rate.

Google SRE also points out that not every application failure appears as an HTTP 500. A request can technically return successfully while still delivering the wrong result or violating an expected service objective.

Your dashboard should therefore represent failure in terms meaningful to the application, not merely protocol status codes.

Saturation: how close are you to a limit?

Saturation is where the dashboard starts looking forward rather than only describing the present.

Track the resources that can genuinely constrain the workload:

  • database connections;
  • worker capacity;
  • memory;
  • CPU;
  • storage;
  • queue capacity;
  • API quotas;
  • thread pools.

Do not show every resource merely because a metric exists.

Google SRE recommends emphasizing the resources that are actually constrained and notes that systems often begin degrading before reaching 100% utilisation. It also treats impending resource exhaustion—such as a disk predicted to fill soon—as part of saturation monitoring.

The main dashboard should make shrinking headroom obvious.

Show critical workflows separately from overall application health

Aggregates can hide severe local failures.

Suppose an application handles one million requests each day, while only 5,000 involve subscription renewal.

If every renewal request starts failing, the overall application success rate might barely move.

The business impact could still be significant.

Keep a small set of business-critical journeys visible independently.

For example:

Application

Critical journeys worth isolating

Ecommerce

login, search, checkout, payment

SaaS

login, core product action, billing

Fintech

authentication, payment, transfer

Internal platform

login, submission, approval

Data product

ingestion, processing, report generation

The exact journeys should come from the application, not from a generic monitoring template.

This is one reason the same dashboard design should not simply be copied from one product to another.

Track real-user experience where the client matters

For web applications, backend latency alone does not describe what users experience.

A server may respond quickly while customers wait because of frontend JavaScript, rendering, network conditions or device limitations.

Where frontend experience matters, include a concise real-user view.

Google recommends Real User Monitoring for understanding Core Web Vitals because field data captures performance from actual users, devices and network environments rather than controlled conditions alone. Google: Measuring Web Vitals

Depending on the product, the dashboard could show:

  • Core Web Vitals;
  • frontend error rate;
  • page-load or interaction performance;
  • mobile vs desktop differences;
  • browser-specific failures.

Do not turn the main operational dashboard into a frontend analytics platform.

The objective is to show enough real-user information to reveal when backend health looks normal but the actual experience does not.

Make third-party dependencies visible

An application is only as usable as the systems required to complete its important workflows.

A payment processor, identity provider, email service or external API can create substantial user impact while every service you operate remains healthy.

For important dependencies, consider showing:

  • response latency;
  • success/error rate;
  • timeout rate;
  • retry volume;
  • rate-limit usage;
  • circuit-breaker state where relevant.

Dependency information should answer:

Is the application unhealthy because of something inside our system or something it depends on?

That distinction is particularly valuable during an incident.

If checkout latency rises and payment-provider latency rises at exactly the same time, the team immediately has a more useful place to start investigating.

Show background jobs and queues before they become invisible failures

User-facing requests receive plenty of monitoring attention because their failures are immediate.

Background processing can fail much more quietly.

An application may remain responsive while invoices stop generating, data imports stall or emails remain in a queue for hours.

Useful dashboard signals for asynchronous processing include:

  • queue depth;
  • oldest-message age;
  • job failure rate;
  • job processing duration;
  • retry volume;
  • dead-letter queue size;
  • time since last successful scheduled run.

The last one deserves particular attention.

A daily job that has produced no errors today may appear healthy simply because it never started.

Showing time since last success exposes that failure mode immediately.

Include databases at the level that explains application behaviour

Databases can generate hundreds of useful metrics, but the main application dashboard should contain only those most likely to explain application health.

Depending on the system, that might include:

  • query latency;
  • database connections;
  • connection-pool saturation;
  • lock or contention indicators;
  • replication lag;
  • storage growth;
  • database errors.

The dashboard is not the place for every database diagnostic.

Its job is to make a relationship visible.

If API latency is rising while database-query latency and connection waits rise simultaneously, the team knows where to drill down.

This reflects a broader dashboard principle: the overview should identify where the problem probably is; specialist dashboards should help determine exactly what is happening there.

Put releases and configuration changes on the same timeline

A metric without change context forces engineers to perform unnecessary detective work.

Suppose errors begin increasing at 11:04.

If the dashboard also shows that application version 5.7 completed deployment at 11:01, that information matters immediately.

Annotate or otherwise expose significant events such as:

  • deployments;
  • feature rollouts;
  • configuration changes;
  • database migrations;
  • infrastructure changes.

Do not assume every problem following a deployment was caused by it.

The purpose is correlation, not automatic blame.

A release marker simply allows a responder to ask:

Did behaviour change at the same time the application changed?

That can substantially shorten an investigation.

Use trends and baselines, not only current values

A dashboard containing only current numbers can make a deteriorating application look healthy.

Database usage at 70% may appear harmless.

If it was 42% two months ago, the trajectory deserves attention.

Likewise, p95 latency of 800 ms might be acceptable against the application's objective but concerning if it has increased from 350 ms over four releases.

Show enough history to answer:

  • Is this normal?
  • Is it getting better or worse?
  • Did behaviour change after a release?
  • Is a resource approaching a constraint?

AWS recommends analysing workload metrics using both granular current data and historical data for reference, and revisiting KPIs as business requirements change.

For many operational dashboards, the trend is more useful than the current number alone.

[Internal Link: “How to Detect App Problems Before Your Users Report Them”]

Do not turn the main dashboard into a log viewer

Logs and traces are vital diagnostic tools.

They generally belong behind the monitoring dashboard rather than dominating it.

OpenTelemetry describes metrics, traces and logs as complementary signals: metrics capture runtime measurements, traces represent request paths and logs record events. OpenTelemetry: Signals

That suggests a natural workflow:

Dashboard → identify abnormal signal → drill into trace/log/detail

For example:

  1. Dashboard shows checkout error rate rising.
  2. Engineer opens affected service.
  3. Representative failing traces identify the problematic operation.
  4. Correlated logs provide detailed error context.

The main dashboard should help initiate this investigation rather than attempting to contain every piece of telemetry itself.

[Internal Link: “Logs, Metrics and Traces: The Foundations of Application Observability”]

Design the dashboard from general to specific

A strong dashboard should communicate hierarchy.

Grafana's dashboard guidance recommends designing dashboards to answer a clear question, creating a logical progression from general to specific, and using drill-downs rather than placing everything on one screen. It also stresses reducing cognitive load so somebody looking at the dashboard during an incident does not have to work hard simply to understand what each chart means. Grafana: Dashboard Best Practices

A useful application dashboard might therefore be organized like this:

Row 1: Is the application serving users?

  • critical workflow success;
  • availability;
  • transaction/business KPI;
  • active incident or major alert status.

Row 2: Is application behaviour deteriorating?

  • errors;
  • p95 latency;
  • traffic;
  • saturation.

Row 3: Where might the problem sit?

  • database health;
  • important dependencies;
  • queues/background work;
  • frontend/RUM health.

Row 4: What changed?

  • recent deployments;
  • versions;
  • configuration events.

Everything more detailed becomes a drill-down.

This is much easier to use under pressure than forty equally prominent panels.

Avoid averaging away important problems

Aggregated dashboards can create misleading confidence.

Suppose the application runs in three regions:

  • Region A: 99.99% success
  • Region B: 99.98% success
  • Region C: 82% success

An overall number may make the application look reasonably healthy depending on traffic distribution.

The same effect appears when combining:

  • mobile and desktop;
  • free and enterprise accounts;
  • multiple APIs;
  • several application versions;
  • fast and slow endpoints.

Grafana recommends comparing like with like and avoiding aggregates where larger signals can drown out smaller but important ones.

Use segmentation where the distinction changes the operational decision.

Do not segment everything indiscriminately, or the dashboard becomes unreadable.

Put thresholds and objectives into visual context

A number means more when the viewer knows whether it is good.

If p95 latency is 820 ms, should anyone care?

The dashboard should make relevant thresholds, SLOs or expected ranges visible where possible.

That might mean:

  • target lines;
  • error-budget context;
  • threshold markers;
  • expected bands;
  • clear status indicators.

Avoid decorative red/yellow/green colouring without defined meaning.

A metric should become red because it crossed a threshold that represents genuine concern, not because the designer thought 80% “felt high.”

Build different dashboards for different questions

Trying to serve executives, product managers, on-call engineers and database specialists with one dashboard often produces something useful to nobody.

The high-level application dashboard should answer overall health questions.

Separate views can then answer deeper questions:

  • service dashboard;
  • database dashboard;
  • frontend performance dashboard;
  • dependency dashboard;
  • business KPI dashboard.

Grafana recommends designing dashboards for a clear purpose and intended audience rather than allowing uncontrolled dashboard sprawl.

A product manager may care about transaction success and user experience.

An on-call engineer needs that same impact information plus error, latency, dependency and resource signals.

A database specialist may need query plans and lock details that would only distract everyone else.

Hierarchy is better than one enormous dashboard.

A practical application monitoring dashboard blueprint

For many production applications, the following provides a strong starting point:

Dashboard area

What to show

Why

Critical outcomes

workflow success, key transactions

Shows whether the app is fulfilling its purpose

Availability

essential services/workflows

Identifies major interruption

Errors

rates by important service/workflow

Reveals failing behaviour

Latency

p50/p95/p99 where useful

Shows user-facing performance

Traffic

requests, users, transactions

Gives other metrics context

Saturation

constrained resources/headroom

Shows approaching limits

User experience

RUM/frontend health

Reveals client-side degradation

Dependencies

latency, errors, timeouts

Separates internal from external problems

Database

query latency, connections, key constraints

Explains common application bottlenecks

Async processing

queues, job failures, job age

Detects silent background failures

Recent changes

deployments/configuration

Connects behaviour to changes

Navigation

alerts, logs, traces, runbooks

Makes investigation faster

This should be customized rather than copied unchanged.

An application with no asynchronous work does not need queue panels. A payment product may need deeper transaction visibility, while a content application may care much more about frontend performance and delivery.

A dashboard is not an alerting system

Do not assume someone is continuously watching the dashboard.

AWS explicitly recommends dashboards as a complement to alerts, not a replacement for them.

Dashboards are excellent for:

  • understanding current condition;
  • investigating incidents;
  • comparing trends;
  • reviewing releases;
  • capacity planning;
  • operational reviews.

Alerts are what should bring important changes to someone's attention when nobody is looking.

The dashboard then becomes the place they go for context.

That separation prevents teams from building a beautiful operational view and assuming visibility alone guarantees timely detection.

Remove metrics that nobody uses

Monitoring dashboards naturally expand.

Every incident produces another panel. Every new component adds more telemetry. Eventually the dashboard becomes an archaeological record of everything the team has ever worried about.

Review it periodically.

For each panel, ask:

What question does this answer?

Who uses it?

What decision would change if this metric changed?

Does it belong on this dashboard or in a drill-down view?

Grafana recommends actively reducing dashboard sprawl and periodically removing dashboards or panels that no longer serve a useful purpose.

This is not cosmetic cleanup.

Every unnecessary graph competes for attention with the information that actually matters during an incident.

A good dashboard should be understandable in seconds

The real test of an application monitoring dashboard is not how impressive it looks on a large office screen.

Imagine an engineer opening it during an incident at 2 a.m.

Within a short time, they should be able to determine:

  • whether users are affected;
  • which important workflow is failing;
  • whether errors or latency are unusual;
  • whether traffic changed;
  • whether the application is approaching a resource limit;
  • whether a dependency or database appears involved;
  • whether a recent change correlates with the problem;
  • where to drill down next.

That is what an Observable application should make possible.

The dashboard does not need to explain the entire system.

It needs to turn a large amount of production telemetry into a small number of useful signals, organized around the application outcomes that matter.

If every metric is visible but the person looking at the screen still has to ask “So—is the app actually healthy?”, the dashboard is tracking too much of the wrong thing.

‍

Continue Reading