Skip to main content
Metrics type: Key MetricsCategory: Jobs & Workflows

At a glance

The count of Databricks job runs that finished in a failure state over the last 24 hours, surfaced as a triage queue. A “failed job” here means a scheduled or triggered run whose terminal result_state is FAILED or TIMEDOUT. For a data platform team this is the single most operationally urgent number on the Databricks board: every failed run is a table that did not refresh, a feature that did not build, or a report that will show stale data this morning. The card is both the count and the worklist of exactly which runs to investigate first.

Calculation

Vortex IQ polls the Jobs runs list and counts every run that meets all three conditions:
Each surviving run is enriched with the job name, the failing task, the run page deep-link, the duration, and the cluster it ran on, so the card is a clickable worklist rather than a bare number. Three points of nuance:
  1. Runs, not jobs, are counted. If one nightly job retries and fails three times, that is three failed runs but one broken pipeline. The count reflects runs; the worklist groups by job so a flapping job is visible as one entry with a retry count, not three separate alarms.
  2. TIMEDOUT is treated as a failure on purpose. A run that hits its timeout produced no usable output and usually signals either a data-volume spike or a stuck stage. Folding it into the same count keeps the triage queue honest: from a downstream consumer’s point of view, a timed-out table is just as missing as an errored one.
  3. CANCELED is excluded deliberately. A cancelled run is an intentional act (a human killed it, or an upstream task short-circuited the workflow). Counting cancellations as failures would inflate the queue with non-incidents and erode trust in the alert.

Worked example

A data engineering team owns the lakehouse that powers a brand’s overnight reporting and its product-recommendation feature store. Snapshot taken 16 Apr 26 at 07:15 (workspace time zone), covering the previous 24 hours. The headline reads 5 failed runs across 4 jobs, with the two critical jobs outlined in red. The on-call engineer reads the queue top-down:
  1. prod_orders_ingest failed and its retry failed too (critical). This is the page-worthy event: the table feeding every downstream report did not refresh, and the automatic retry did not save it, so the failure is deterministic (bad input or a code regression), not transient. The run detail shows a schema-mismatch error: an upstream source added a column. The fix is a quick schema evolution change. While it is broken, Pipeline Lag (since last success) on the orders table is climbing and any morning report built on it will be stale.
  2. feature_store_build timed out at the 120-minute limit (critical). Not a code error but a duration blowout. The likely cause is a data-volume spike or a skewed join. The engineer checks Long-Running Jobs (>1h) to confirm it was genuinely stuck rather than slow, then either raises the timeout for tonight and investigates skew, or fixes the join before the next scheduled run.
  3. marketing_attribution and adhoc_export_csv are standard / low tier. These did not page anyone and can wait until the two criticals are resolved. The attribution job is worth a same-day fix because a stakeholder relies on it; the ad-hoc export is genuinely low priority.
The teaching point: the raw count (5) matters far less than the tier breakdown. Five low-tier failures is a quiet morning; one critical failure with a failed retry is an incident. Always read the queue, not just the number.

Sibling cards to read alongside

Reconciling against the source

Where to look in Databricks:
Workflows → Job runs lists every run with its result state and a 24-hour filter; set the status filter to “Failed” to match the card’s core count (then add timed-out runs). System tables: system.lakeflow.job_run_timeline (and system.lakeflow.jobs) hold run-level history you can query in SQL for an exact reconcile. Each run page shows the failing task, the stack trace, the cluster, and the retry chain for root-cause work.
A reconciling query you can run in a Databricks SQL editor:
Why our number may legitimately differ from the Workflows UI: Cross-connector reconciliation:

Known limitations / FAQs

Why are timed-out runs counted as failures? Because a timed-out run produced no usable output. From the perspective of the report or feature table waiting on it, a run killed at its timeout is exactly as missing as one that errored. Folding TIMEDOUT into the count keeps the triage queue honest; pair with Long-Running Jobs (>1h) to catch the duration problem before it times out. A job retried three times and the count shows three. I think of that as one broken job. Both views are valid, which is why the card carries both. The headline counts runs (three attempts), while the worklist groups by job and shows a retry count so you see one entry. Counting runs makes a flapping job’s cost visible; grouping in the list keeps the queue readable. Why are cancelled runs not counted? A CANCELED result is intentional: a human killed the run, or an upstream task short-circuited the workflow on purpose. Counting deliberate cancellations as failures would fill the queue with non-incidents and train the team to ignore the alert. Only FAILED and TIMEDOUT count. The card pages me for a “critical” failure but the job is not actually business-critical. Tier comes from the job’s tag (criticality / tier). If a job is tagged critical but is not, retag it in the job settings and the alert behaviour follows. Conversely, a genuinely critical job with no tag will not page; tagging it is the fix. Get the tags right once and the paging logic does the rest. A task inside a multi-task job was skipped. Does that count? No. SKIPPED tasks within an otherwise-successful run are excluded; they usually reflect conditional branches that were not meant to execute. Only the run-level terminal state of FAILED or TIMEDOUT counts. If a skipped task should have run, that is a logic issue to investigate, but it is not a failure for this card. Does this include Delta Live Tables (DLT) pipeline failures? No. This card covers the Jobs / Workflows runs API. DLT pipelines have their own lifecycle and are tracked on DLT Pipeline Status Distribution. If your breakage spans both, read the two cards together for the full picture. Why did the count drop to zero mid-morning when nothing was fixed? Because the window is a rolling 24 hours. Overnight failures roll off the back of the window as time passes, even before anyone resolves them. That is expected: the card answers “what failed in the last 24h”, not “what is still broken”. For unresolved breakage, follow the lag and DLT status cards, which reflect current state rather than a trailing window.

Tracked live in Vortex IQ Nerve Centre

Failed Jobs (24h) is one of hundreds of KPI pulses Vortex IQ tracks across Databricks and 70+ other ecommerce connectors. Nerve Centre runs the detection layer; Vortex Mind investigates the cause when something moves; Ask Viq lets you interrogate any number in plain English. Start for free or book a demo to see this metric running on your own data.