When nobody is on call for it
Every lean team has a second tier of services: the internal reporting job, the nightly export, the admin console, the webhook relay that only three customers use. These services are not critical enough to page someone at 3 a.m., and that is a reasonable decision. Paging a human is expensive, and frequent pages train engineers to skim or ignore alerts, sometimes missing a real one (Google SRE Book, Monitoring Distributed Systems).
The problem is what happens next. If a service is not paged on, it is often not watched at all. It fails quietly, and the first signal is a user asking why last month’s report is empty. The failure was not silent because it was undetectable. It was silent because no one had a place to look.
A silent failure dashboard is a deliberately non-paging view of those services. Its job is to be reviewed on a cadence, not to wake anyone. The discipline is in what you choose to leave off it.
What a dashboard is for, and what it is not
Google’s SRE book defines a dashboard as a summary view of a service’s core metrics, prebuilt to expose the metrics most important to its users. That definition does not say anything about paging. A dashboard and an alert are different instruments with different jobs.
For paging, black-box monitoring has the key benefit of forcing discipline: only nag a human when a problem is already ongoing and contributing to real symptoms. That is the right bar for a page. It is the wrong bar for a silent dashboard, because a non-critical service can be broken for a week before anyone notices a symptom.
The silent dashboard absorbs the checks that are too slow, too fuzzy, or too low-stakes to page on. It is a review surface, not an escalation path. If you treat it as a pager with a UI, you will either fill it with noise or stop reading it.
What belongs on it
Three categories earn a panel on a silent dashboard.
1. A black-box symptom check
Black-box monitoring is symptom-oriented and represents active problems: the system is not working correctly right now. For a non-critical service, one synthetic check that exercises the actual job is usually enough. Not a TCP port check, not a process-alive check. A check that asks the service to do the thing it exists to do and verifies the answer.
AWS Well-Architected guidance calls synthetic transaction testing among the most important testing processes and recommends running canaries constantly against workload endpoints (REL11-BP01). That guidance is written for workloads with reliability coverage, not for a two-person team’s internal export job. The transferable part is the shape of the check: exercise the user-visible behavior, not the infrastructure underneath it.
2. One or two slow trend panels
Saturation is concerned with predictions of impending saturation, such as a database filling its hard drive in a few hours. On a critical service, that prediction is a page. On a non-critical service, it is a review item: the disk will fill in nine days, and someone should file a ticket this week.
Growth-rate panels are the classic silent-dashboard content. Row counts, table sizes, queue depth, backup repository size, certificate expiry. None of these are urgent at 3 a.m. All of them are useful at 10 a.m. on a Tuesday.
3. A freshness check for anything that runs on a schedule
Backups, exports, and batch jobs fail in a specific way: they stop producing output, and nothing errors. A freshness panel asks a simple question: when did this last succeed? For a restic repository, restic snapshots --host <name> filtered by host or path gives you the timestamp of the most recent snapshot for that host (restic documentation, Working with repositories). A panel that shows hours since last snapshot is more useful than a panel that shows backup job exit codes, because exit codes lie when the job never ran.
For PostgreSQL, the cumulative statistics views are a source of slow-moving signals. Note that the displayed totals lag behind actual activity, and that statistics counters reset when starting from an unclean shutdown, such as after a crash or point-in-time recovery (PostgreSQL documentation, The Cumulative Statistics System). A panel built on pg_stat_archiver or pg_stat_bgwriter is useful for spotting a stalled archiver or a background writer that has stopped doing work. It is not useful as a page, because the counters reset and the lag makes short-window thresholds unreliable.
What does not belong on it
Three things should stay off the silent dashboard.
Anything that would page. If a condition is urgent enough to wake someone, it belongs in the pager path, not on a dashboard nobody checks at night. Mixing the two creates a dashboard that looks like it has teeth but does not.
Anything that seems a bit weird. The SRE book is direct: you should never trigger an alert simply because something seems a bit weird. The same applies to a review panel. A panel that shows a metric nobody can interpret produces a weekly ritual of staring and shrugging.
Complex dependency rules. Google SRE has experienced only limited success with complex dependency hierarchies in alerting. A small team has even less capacity to maintain them. If a panel needs a rule that says “alert on A unless B is also true,” it is probably two panels or none.
There is a related anti-pattern on the other side: creating too many monitors. AWS Well-Architected lists both “too many monitors are created” and “only the customer-facing interfaces of the workload are actively monitored” as common anti-patterns. A silent dashboard with forty panels is a monitor-creation exercise, not a review surface.
A review cadence that fits a small team
The dashboard is only as good as the habit around it. For a team of two to fifteen engineers who are their own on-call rotation, the scarce resource is attention, not dashboards.
A workable pattern, offered as a recommendation rather than a sourced finding:
- One named owner. Not the whole team. One person is responsible for the weekly pass and for keeping the dashboard honest.
- A short pass. Ten minutes, same time each week, before the on-call handoff or the team standup. The owner scans each panel and asks one question: is this what I expect?
- Every finding becomes a ticket or a runbook line. A red panel that produces no action is either a broken panel or a missing process. Both are worth fixing.
- Retire panels nobody acts on. If a panel has been green or ignored for a quarter, remove it. The dashboard should shrink as often as it grows.
This is a judgment call, not a research finding. The point is that cadence beats cleverness. A ten-minute weekly pass with a named owner does more for a small team than an anomaly detector nobody reads.
How to keep it honest
A silent dashboard earns its keep in postmortems. After an incident on a non-critical service, ask one question: which panel should have shown the drift earlier? Then add exactly one panel. This keeps the dashboard growing from real misses rather than from a wish list.
The same question works in reverse. After a quiet quarter, ask which panels produced no action. Those are candidates for removal. A dashboard that only grows is a dashboard that will eventually be ignored.
Postmortem culture guidance from Google SRE emphasizes that action items without clear owners are less likely to be resolved, and that a postmortem without subsequent action is indistinguishable from no postmortem. The same logic applies to dashboard panels: a panel without an owner and a review habit is decoration.
Platform features that support the pattern
You do not need a special tool to build a silent dashboard. You need to use the tools you have with the right intent.
CloudWatch. Composite alarms can reduce alarm noise by alerting only when a rule over other alarms is met. That is useful for the pager path, not the silent dashboard. More relevant: CloudWatch alarm actions are invoked only when the alarm changes state, except for Auto Scaling actions. A dashboard built on alarm state will show you transitions, not current values. If you want a freshness panel, build it on the metric itself, not on an alarm.
Cloud Monitoring. Metric-absence conditions fire when a monitored time series has no data for a retest window, with a maximum retest window of 24 hours. Forecasted metric-value conditions fire when the policy predicts a threshold will be violated within the forecast window, which can range from one hour to seven days. Both are useful for the silent dashboard: absence catches the job that stopped reporting, and forecasting catches the disk that will fill next week. Neither needs to page anyone.
PostgreSQL. The cumulative statistics views give you the raw material for trend panels. Build them on slow-moving counters and review them weekly. Do not build short-window thresholds on counters that reset after a crash.
restic. Snapshot listing filtered by host or path is the simplest freshness check available. If you also want to verify repository integrity, restic’s check command is the tool, but note that copying snapshots between repositories downloads and uploads the entire snapshot because source and destination use different encryption keys. That is a bandwidth cost worth knowing before you schedule a copy as part of a drill.
A worked hypothetical: the internal reporting service
Consider a small internal reporting service with no on-call. It runs on a single VM, reads from a PostgreSQL replica, and generates a PDF every Monday morning for a handful of internal users. Nobody pages on it. Last quarter it silently stopped generating reports for three weeks, and the first signal was a support ticket.
A silent dashboard for this service might carry three panels:
- A synthetic check that a known report renders. Not a health endpoint. A check that requests a specific report with a fixed date range and verifies that the response is a non-empty PDF. This is the black-box symptom check.
- A row-count growth panel for the main source table. If the table stops growing, either the upstream writer stopped or the replica stopped replicating. Either way, the report will be stale. This is a slow trend panel, useless as a page, useful as a weekly review item.
- A backup-freshness panel. Hours since the last successful restic snapshot for this host. If the backup job stopped running, the panel shows it before the next restore drill does.
None of these page. All of them are reviewed weekly by a named owner. Any red becomes a ticket. If a panel has been green for a quarter and nobody has looked at it, it gets removed.
This is a hypothetical, not a report of a real deployment. The point is the shape: one symptom check, one trend, one freshness check. Three panels, one owner, ten minutes a week.
What the dashboard is not
A silent failure dashboard is not a substitute for a recovery drill. It tells you that a backup exists and is fresh; it does not tell you that the backup restores. For that, you need a restore lottery or a scheduled restore test, and a written checklist. The Recovery Checklist Before You Need It covers that side of the practice.
It is also not a substitute for a postmortem. The dashboard catches drift; the postmortem explains why the drift happened and what changes. The two practices reinforce each other: the dashboard gives the postmortem something to point at, and the postmortem gives the dashboard its next panel.
The value of a silent failure dashboard is not that it makes non-critical services reliable. It is that it makes their failures visible on a schedule you choose, rather than on a schedule your users choose for you.
Questions readers ask
How is this different from just adding more alerts?
Alerts are for conditions that need a human now. A silent dashboard is for conditions that need a human this week. Mixing them produces either noisy pages or unread dashboards. Keeping them separate lets each instrument do its job.
How many panels should a silent dashboard have?
There is no sourced number. The practical constraint is the review pass: if the owner cannot scan every panel in ten minutes and form a judgment about each one, there are too many. Three to seven panels per service is a common shape for small teams, but that is a recommendation, not a finding.
What if a panel goes red and nobody acts?
That is a signal about the panel, not the service. Either the panel is measuring something nobody cares about, or the team has not agreed on what to do when it fires. Fix one of those, or remove the panel.
Does this work for services on bare metal?
Yes. The pattern is tool-agnostic. A cron job that writes a timestamp file, a synthetic check that runs from a separate host, and a weekly review are enough. The platform features described above are conveniences, not requirements.
Should the dashboard page on anything?
No. If a condition is urgent enough to page, it belongs in the pager path. The silent dashboard’s value comes from being explicitly non-paging: it absorbs the checks that are too slow, too fuzzy, or too low-stakes to wake anyone.