Data Observability Metrics: The Reference Catalog
|
0
min read

You're staring at a dashboard that looks normal, but one upstream table renamed a column yesterday afternoon and nobody noticed until the revenue report stayed frozen on Monday's number. The pipeline didn't scream, the charts didn't break, and the model kept producing NULLs. That's the kind of failure data observability metrics are supposed to catch, but only if your team can name the signal, calculate it the same way, and agree on what happens when it crosses a line.
Teams already have fragments of the answer. They've got freshness checks in one tool, row-count alerts in another, schema logs in a third, and a few tribal rules written into on-call notes. What they usually don't have is a navigation-ready reference catalog, a shared map of the metrics themselves, how each one is calculated, and which threshold is worth waking somebody up for. A clear catalog turns messy monitoring into something people can use during an incident, not just admire in a demo. For a practical starting point, digna's data observability overview is a useful example of how teams think about the problem in production.
Table of Contents
Why Data Observability Metrics Need a Shared Catalog
Shared vocabulary prevents incident drift
What Data Observability Metrics Are
Metrics are continuous, checks are point-in-time
The Five Core Categories at a Glance
Freshness, volume, schema, distribution, lineage
Freshness and Timeliness Metrics in Detail
Four metrics that make freshness actionable
Set the window by asset class
Anomaly Scores and Drift or Volatility Measures
Three ways to detect unusual behavior
Schema Change Counts and Structural Drift Signals
Four metrics that make structure visible
Business KPI Monitors as a Decision Grade Layer
Build the KPI from the underlying assets
Quick Reference Matrix for the Catalog
Cross-References Between Metric Categories
Freshness-to-volume, schema-to-distribution, lineage-to-drift
Choosing the Smallest Set of Metrics That Matters
Why Data Observability Metrics Need a Shared Catalog
The worst part of a quiet schema drift is not the drift itself. It is the half day your team loses arguing over what to call it. One engineer says the table was stale, another says the extract failed, and a third points out that the model output was wrong because an input column had been renamed. The dashboard still rendered, so the failure looked harmless until someone used it for a decision.
A catalog changes that conversation. Instead of a loose pile of checks, you get named observability metrics, each with a known formula, a clear owner, and an alert posture that can be reviewed after the fact. That matters because the same condition can be described three different ways if nobody has agreed whether they are talking about freshness lag, schema conformity, or downstream volume loss.
Shared vocabulary prevents incident drift
When a data lead, an analyst, and an engineer all mean the same thing by “late data,” they stop wasting time translating. A metric catalog gives them one definition for each signal, one calculation path, and one escalation rule. That is especially useful when a table behaves differently during business hours than it does overnight, because the same word can describe very different failure modes.
A catalog also reduces threshold sprawl. Without it, every on-call engineer invents a new cutoff for every asset, and the result is inconsistent paging, inconsistent severity, and inconsistent trust. With it, the team can review whether a signal belongs in the warning tier, the paging tier, or the “monitor but do not wake anyone” tier.
Practical rule: if two people can disagree about whether the issue is freshness, volume, or schema, your catalog is not specific enough yet.
The value becomes clearer in a real incident. A dashboard may show revenue flat at 9 a.m., but the freshness metric can show the orders table stopped updating at 2:14 a.m. That is the first broken link, and it is the thing to fix before anyone argues about downstream reports. For a practical starting point, digna's data observability overview shows how teams think about the problem in production.
What Data Observability Metrics Are
Data observability metrics are time-series measurements taken from data assets and the pipelines that move them. They include row counts, null rates, schema fingerprints, distribution summaries, lineage gaps, and derived indicators such as anomaly scores or drift scores. In practice, they are the signals you trend over time so you can tell when a table stops behaving like itself.
A useful catalog makes those signals readable at a glance. A metric named null_rate_email_hourly tells an analyst far more than check_7 because the name already carries the subject, the measure, and the cadence. Structured naming conventions, like the data tags for ai content creation pattern, work the same way, labels should help people recognize what they are looking at before they open the definition.
Metrics are continuous, checks are point-in-time
A basic data quality check usually answers a yes or no question. Is this column null? Is this ID unique? Does the value fall in range? Those checks are useful, but they only verify a known rule at one moment.
Observability metrics work differently. They are measured continuously, compared against a baseline for that specific asset, and alert on deviation rather than just rule failure. A null-rate check on an email field is a static quality test. An hourly null-rate series with a rolling baseline is an observability metric, because it can surface a slow upstream extraction issue long before someone notices broken campaigns.
That distinction matters for how teams document the catalog. Each entry should answer three things, consistently and without guesswork.
Definition: what the metric means in plain language.
Calculation method: the formula or aggregation behind it.
Alerting posture: whether it warns, pages, or only feeds analysis.
Useful distinction: if the team only runs the check when someone suspects a problem, it is a test. If the metric is trended, baselined, and alertable, it is observability.
The cleanest way to think about the catalog is as a layer between raw telemetry and human action. Raw counts and timestamps become metrics. Metrics become thresholds. Thresholds become runbook decisions.
The Five Core Categories at a Glance
The field usually organizes around five measurement buckets, and each bucket catches a different class of failure. They're not competing taxonomies, they're overlapping views of the same asset. A healthy catalog names all five so teams don't overfit to the one signal they already know how to collect.

Freshness, volume, schema, distribution, lineage
Freshness asks whether data is current enough for the business use case. It catches late-arriving partitions and stalled ELT jobs, the kind that leave a dashboard stale.
Volume checks whether the quantity of records is roughly what you expected. It's the first line of defense against empty drops, truncated loads, and duplicated ingestion.
Schema watches for structural changes such as new columns, missing fields, renamed fields, and type changes. It catches the breakages that make downstream models start returning NULLs even when the table still loads.
Distribution looks at value behavior, not just counts. Shifts in null rates, cardinality, ranges, or the shape of the data often show up before a business user notices the wrong answer.
Lineage maps dependency paths. It tells you which dashboard, model, or downstream table depends on the asset that changed, and it's the category that keeps a single broken source from turning into an hour of blind searching.
The useful part of grouping these as buckets is that each one has a different failure signature. A late job often looks like freshness first, then volume. A vendor API migration often shows up as schema drift and null spikes together. A source outage can ripple through lineage and eventually appear as distribution drift downstream.
Use the bucket that matches the symptom you can measure first, then confirm the others before you escalate.
Freshness and Timeliness Metrics in Detail
Freshness is about lag, not just whether a job ran. A pipeline can succeed and still deliver data too late to matter. For product events, order feeds, and operational dashboards, the delay itself is the incident.
The clean way to express freshness is to measure the gap between expected availability and actual availability. That gives you a metric you can baseline, alert on, and hand to the person who owns the pipeline. digna's timeliness definition and monitoring notes fit this use case well if you want a platform example that treats delivery timing as a first-class signal.
Four metrics that make freshness actionable
max_event_lag_seconds is the simplest lag measure. A practical formula is now() - max(event_time), which tells you how far the freshest event lags behind the present moment.
row_arrival_rate tracks throughput over time, usually as rows ingested per minute. A sudden drop can mean the source stopped sending, a filter got too aggressive, or the upstream job is stuck.
pipeline_completion_lag compares a scheduled finish time with the actual finish time. It captures when the job technically completes, but not before the SLA has already been missed.
sla_breach_minutes measures how long the asset stayed beyond its freshness budget. That's the number that turns a technical lag into an incident duration.
Metric | Formula | Example | Warn | Page |
|---|---|---|---|---|
max_event_lag_seconds |
| Latest event is behind current time | At 50 percent of SLA | At 100 percent of SLA |
row_arrival_rate |
| Ingest rate drops below the expected cadence | At 50 percent of expected throughput | At 100 percent of expected throughput |
pipeline_completion_lag |
| Job ends after the window closes | At 50 percent of freshness budget | At 100 percent of budget |
sla_breach_minutes | Time above the freshness budget | Asset stays late past the SLA window | At 50 percent of allowed lateness | At 100 percent and escalate at 200 percent |
Set the window by asset class
Use different freshness budgets for different data products. Product events usually need sub-minute windows. Transactional marts often tolerate about 5 minutes. Nightly aggregates often sit in the 15 to 60 minute range. Compliance extracts can be measured in 24-hour windows when the business process allows it.
That's why global cutoffs are a bad habit. A single freshness threshold can't serve a high-frequency clickstream and a daily settlement table without creating noise somewhere. Tiered alerting is more stable, warn at 50 percent of the SLA, page at 100 percent, and escalate at 200 percent if the asset is still late.
Operational rule: write the SLA next to the metric name. If the freshness budget isn't obvious in the runbook, the alert won't be actionable.
Anomaly Scores and Drift or Volatility Measures
Not every broken dataset is late or missing. Sometimes the data arrives on time and still behaves in a way that makes no sense. That's where anomaly scores and drift measures earn their keep, because they turn “this looks weird” into a signal you can compare against history.

Three ways to detect unusual behavior
Univariate methods look at one metric at a time. A z-score says how far today's value sits from the mean in standard deviations. A modified z-score uses the median and MAD, which helps when the data has outliers. IQR fences are simple too, because they flag values beyond the middle spread of the distribution.
Distribution-based methods compare the shape of one sample to another. KL divergence, PSI, and the KS test are common choices when you want to know whether a column's histogram has shifted in a meaningful way.
Time-aware baselines handle seasonality. A daily metric can look alarming if you compare Monday morning to Sunday night, so rolling baselines by weekday, hour-of-day, or business calendar are usually safer than one flat threshold.
For a concrete example, take daily_active_users. If you compute a 14-day rolling mean and standard deviation, today's volume can be compared against that moving baseline. A simple alert can fire when the value rises above 3 sigma or falls below the 10th-percentile baseline. That dual-sided setup matters because both spikes and drops can break downstream assumptions.
The biggest mistake here is using one-sided thresholds for seasonal data. A retail traffic series, a settlement batch, and a B2B app login feed don't share the same shape, so one universal rule tends to create alert fatigue instead of clarity. The cost of too many false positives is real, because on-call teams stop trusting the alerts that were supposed to protect them.
The data drift detection guidance is a useful companion if you want to see how drift monitoring gets translated into production patterns. The key idea is the same, measure deviation from the right baseline, not from an abstract idea of normal.
Schema Change Counts and Structural Drift Signals
Schema drift becomes manageable once you stop treating it as a vague compatibility problem and start measuring it. A renamed field, a type change, or a removed column is easier to route when the alert names the exact structural event and points to the owner before deploy.
Four metrics that make structure visible
schema_change_count counts additions, drops, and type changes per pipeline run. If a source starts adding columns every week, the count will show the pattern long before the downstream model breaks.
backward_incompatible_change_rate is the share of schema edits that can break existing consumers. It tells you whether change is happening in a safe way or a dangerous one.
drift_detection_latency_minutes measures the time from an upstream commit or release to the alert. If you don't know how long it takes to notice drift, you don't really know how exposed your consumers are.
orphaned_column_rate tracks fields no longer read by any downstream model or dashboard. Those columns are often a sign of stale dependencies, forgotten logic, or a contract that no one maintains anymore.
Drift Metric | Definition | Calculation | Example | Owner |
|---|---|---|---|---|
schema_change_count | Count of structural edits per run | Additions + drops + type changes | A renamed column appears in the load | Data platform engineer |
backward_incompatible_change_rate | Share of edits that can break consumers | Incompatible changes / total changes | A type change truncates values downstream | Code owner |
drift_detection_latency_minutes | Time from commit to alert | Alert time minus change time | A migration is noticed only after a dashboard fails | Pipeline owner |
orphaned_column_rate | Fields unused by downstream consumers | Unread columns / total columns | A field remains in the table but nothing reads it | Analytics engineer |
Per-table baselines matter here. A high-velocity event table should not be judged against a slowly changing reference table, because one of them will always look noisy if you force them into the same rule. Route breaking changes to the code owner before deploy, not after the dashboard already fails.
Business KPI Monitors as a Decision Grade Layer
Raw observability metrics tell you what broke. Business KPI monitors tell leadership what it means. That layer sits above freshness, volume, schema, distribution, and lineage, and it connects those signals to outcomes like revenue accuracy, refund behavior, churn, and order fulfillment.

Build the KPI from the underlying assets
A decision-grade monitor starts with a trusted business metric, then traces that metric back to its contributing data assets. Once you know the dependencies, you can attach observability metrics to each asset and let the aggregate KPI inherit those signals. If checkout revenue moves, you don't just stare at the revenue chart. You check order-event freshness, line-item volume anomalies, and product-catalog schema stability together.
That's the difference between a vanity dashboard and a real business monitor. A vanity chart can stay green even while one of the inputs is missing or malformed. A decision-grade monitor looks for the failure path underneath the KPI and routes the issue to the team that owns the business process.
A good ownership model is straightforward. Finance or operations should own the KPI definition, the data platform team should own the raw observability signals, and analytics engineering should maintain the dependency map. That keeps the alert from bouncing between teams that each own only part of the problem.
digna is one platform that combines business monitoring with timeliness, anomaly detection, validation, and schema tracking inside the customer's own environment. The important point isn't the brand, it's the pattern, because the KPI only becomes actionable when the underlying signals are visible and tied to a clear owner.
KPI monitors should be few, because each one needs a human decision attached to it.
Quick Reference Matrix for the Catalog
A reference catalog should fit on one screen when someone is scanning an incident ticket. The goal isn't to show every possible metric, it's to help a lead answer one question fast, what should I alert on for this asset?
The matrix below compresses the common categories into one working view. The thresholds are starting points, not universal truths, and they should be adjusted per asset after you baseline real behavior.
Metric Category | Primary Calculation | Recommended Alert Threshold | Typical Owner | Severity Tier |
|---|---|---|---|---|
Freshness |
| Absolute SLA breach in minutes | Data platform engineer | High |
Volume anomaly | Rolling mean and standard deviation, or z-score | Distribution-based deviation from baseline | Analytics engineer | Medium to High |
Schema change count | Add, drop, type-change count per run | Absolute count of breaking changes | Code owner | High |
Distribution drift | PSI, KS test, or histogram shift | Relative change from baseline distribution | Data quality lead | Medium |
Lineage break | Missing upstream or downstream dependency | Absolute break in dependency graph | Platform engineer | High |
Null-rate | Nulls divided by total records | Relative increase over baseline | Analytics engineer | Medium |
Uniqueness | Distinct count divided by row count | Absolute or relative drop in uniqueness | Data steward | Medium |
Business KPI monitor | KPI derived from multiple signals | Deviation from business tolerance band | Business owner | Critical |
If you want a platform table that reflects this kind of catalog thinking, digna's metrics system table shows how metric families can be organized for operational use. The best matrix is the one your team can maintain during an incident, not the one with the most rows.
Cross-References Between Metric Categories
A delayed pipeline often starts with a freshness miss, then shows up as a volume anomaly because fewer rows arrived than baseline. Treat that pair as one incident path, not two unrelated alerts.

Freshness-to-volume, schema-to-distribution, lineage-to-drift
A schema change and a null-rate spike often arrive together after a vendor API migration. One payload change can create both a missing-field problem and a value-shape problem, so a schema alert should be checked against the distribution monitor before the ticket is closed.
Lineage breaks can also trigger downstream drift alerts when one missing source changes every dependent table. Per-asset baselines keep the comparison honest, because a daily settlement table and a high-frequency event stream can both be healthy while behaving very differently.
Encode these three pairings as follow-up checks in your alerting tool so the second signal is queried automatically when the first fires.
Choosing the Smallest Set of Metrics That Matters
A metric set only helps when it changes a decision. If an alert does not point to an owner or a likely fix, it becomes noise.
Start with a freshness SLA for each critical tier, one anomaly score on revenue-linked volumes, schema-change counts on the tables that can break downstream consumers, and one KPI monitor per major business process. For a payments platform, that starter set might be a freshness SLA on the transactions table, a 3-sigma anomaly score on daily settlement volume, schema-change counts on the customer table, and one KPI monitor on refund rate.
Choose metrics by ownership, incident history, and blast radius. Revisit the list every quarter, because assets change, failure modes change, and the catalog should change with them.



