<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Chen Debra</title>
    <description>The latest articles on DEV Community by Chen Debra (@chen_debra_3060b21d12b1b0).</description>
    <link>https://dev.to/chen_debra_3060b21d12b1b0</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1533306%2Fc0ea3a94-ba17-47c8-9304-4571fb1adaf9.png</url>
      <title>DEV Community: Chen Debra</title>
      <link>https://dev.to/chen_debra_3060b21d12b1b0</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chen_debra_3060b21d12b1b0"/>
    <language>en</language>
    <item>
      <title>Modern Data Stack was built for humans 🚀 Harness Engineering makes agent‑driven data work production‑safe.

#DataEngineering #AgenticAI #HarnessEngineering</title>
      <dc:creator>Chen Debra</dc:creator>
      <pubDate>Fri, 11 Sep 2026 09:25:39 +0000</pubDate>
      <link>https://dev.to/chen_debra_3060b21d12b1b0/modern-data-stack-was-built-for-humans-harness-engineering-makes-agent-driven-data-work-2fpj</link>
      <guid>https://dev.to/chen_debra_3060b21d12b1b0/modern-data-stack-was-built-for-humans-harness-engineering-makes-agent-driven-data-work-2fpj</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/chen_debra_3060b21d12b1b0/rebuilding-data-engineering-with-harness-engineering-a-new-paradigm-for-the-agent-era-enm" class="crayons-story__hidden-navigation-link"&gt;Rebuilding Data Engineering with Harness Engineering: A New Paradigm for the Agent Era&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/chen_debra_3060b21d12b1b0" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1533306%2Fc0ea3a94-ba17-47c8-9304-4571fb1adaf9.png" alt="chen_debra_3060b21d12b1b0 profile" class="crayons-avatar__image" width="260" height="231"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/chen_debra_3060b21d12b1b0" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Chen Debra
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Chen Debra
                
                
              
              &lt;div id="story-author-preview-content-4630651" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/chen_debra_3060b21d12b1b0" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1533306%2Fc0ea3a94-ba17-47c8-9304-4571fb1adaf9.png" class="crayons-avatar__image" alt="" width="260" height="231"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Chen Debra&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/chen_debra_3060b21d12b1b0/rebuilding-data-engineering-with-harness-engineering-a-new-paradigm-for-the-agent-era-enm" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Sep 11&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/chen_debra_3060b21d12b1b0/rebuilding-data-engineering-with-harness-engineering-a-new-paradigm-for-the-agent-era-enm" id="article-link-4630651"&gt;
          Rebuilding Data Engineering with Harness Engineering: A New Paradigm for the Agent Era
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/dataengineering"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;dataengineering&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/harnessengineering"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;harnessengineering&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/agents"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;agents&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/chen_debra_3060b21d12b1b0/rebuilding-data-engineering-with-harness-engineering-a-new-paradigm-for-the-agent-era-enm#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            21 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Rebuilding Data Engineering with Harness Engineering: A New Paradigm for the Agent Era</title>
      <dc:creator>Chen Debra</dc:creator>
      <pubDate>Fri, 11 Sep 2026 09:23:45 +0000</pubDate>
      <link>https://dev.to/chen_debra_3060b21d12b1b0/rebuilding-data-engineering-with-harness-engineering-a-new-paradigm-for-the-agent-era-enm</link>
      <guid>https://dev.to/chen_debra_3060b21d12b1b0/rebuilding-data-engineering-with-harness-engineering-a-new-paradigm-for-the-agent-era-enm</guid>
      <description>&lt;p&gt;As data platforms evolve from serving primarily human users to serving AI agents, the biggest change may not be the tools themselves, but the way data engineering is organized and delivered.&lt;/p&gt;

&lt;p&gt;Over the past decade, data engineering has gone through a major wave of specialization. Large, monolithic data platforms have gradually evolved into what is now commonly known as the Modern Data Stack, a composable ecosystem of databases, compute engines, data integration and transformation tools, governance platforms, orchestration systems, and BI solutions. This specialization has dramatically improved engineering efficiency and shifted the industry from building massive, tightly coupled systems toward assembling flexible, modular capabilities.&lt;/p&gt;

&lt;p&gt;But as Agentic AI enters the data engineering workflow, a fundamental limitation is becoming increasingly visible: &lt;strong&gt;the modern data stack was designed for people, not agents.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The next generation of data platforms will need to solve a different problem. It is no longer enough to help people operate increasingly sophisticated tools. The challenge is to enable agents to execute engineering work within the right business context, technical boundaries, security controls, and governance framework.&lt;/p&gt;

&lt;p&gt;This is where &lt;strong&gt;Harness Engineering&lt;/strong&gt; comes in.&lt;/p&gt;

&lt;p&gt;The core idea is simple: AI can generate SQL, code, pipelines, and workflows at unprecedented speed. But generating engineering artifacts is not the same as delivering reliable engineering outcomes. A production-ready system needs to make those outputs &lt;strong&gt;trusted, verifiable, controlled, recoverable, and accountable&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In other words, the real opportunity in the Agentic AI era is not simply to make AI generate more data engineering. It is to build the engineering system that allows AI-generated work to safely reach production.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Data Platforms Are Entering the Agentic Era
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Two Different Paths, One Destination
&lt;/h3&gt;

&lt;p&gt;The evolution of major data platforms points toward the same fundamental shift.&lt;/p&gt;

&lt;p&gt;Snowflake is moving from &lt;strong&gt;Data Warehouse → Data Cloud → AI Work Interface → Enterprise Agent Platform&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Databricks is evolving from &lt;strong&gt;Data Lake → Lakehouse → Data + AI Engineering → Agent-ready Execution Platform&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Although their approaches differ, both are converging around four core capabilities:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context. Capability. Governance. Execution.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The data platform of the future will not simply store and process enterprise data. It will increasingly serve as the infrastructure through which agents understand enterprise context and take action.&lt;/p&gt;

&lt;h3&gt;
  
  
  Snowflake: The Data Platform Becomes an AI Entry Point
&lt;/h3&gt;

&lt;p&gt;Snowflake's evolution is not simply about adding AI features to a data warehouse. It is about reorganizing data, semantics, governance, applications, and agents around AI.&lt;/p&gt;

&lt;p&gt;Its trajectory can be broadly viewed in three stages:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud Data Warehouse&lt;/strong&gt;&lt;br&gt;
Storage, compute, sharing, and governance&lt;/p&gt;

&lt;p&gt;→ &lt;strong&gt;AI + Data Platform&lt;/strong&gt;&lt;br&gt;
AI, data, semantics, and governance&lt;/p&gt;

&lt;p&gt;→ &lt;strong&gt;Agentic Enterprise Infrastructure&lt;/strong&gt;&lt;br&gt;
Coco, CoWork, Skills, and Agents&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FkTmjthEbuk5Yyclf6uBk_lC0y3Mq-oGXOEx0731iM0DznMhEi2cYYHzq9A_oEenyUMwnhXqDsBIX3AAMbezp_JJaoT9qk-ez4wTUIskGwEbYz-K3OqGP99M3XOoBXCBIEsiU3SPW6VvS7bleRBOkcBTNZKsfgXeiLQza8a1uE-dE9lSQA0yWi3dPQUFzOdPl%3Fpurpose%3Dfullsize" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FkTmjthEbuk5Yyclf6uBk_lC0y3Mq-oGXOEx0731iM0DznMhEi2cYYHzq9A_oEenyUMwnhXqDsBIX3AAMbezp_JJaoT9qk-ez4wTUIskGwEbYz-K3OqGP99M3XOoBXCBIEsiU3SPW6VvS7bleRBOkcBTNZKsfgXeiLQza8a1uE-dE9lSQA0yWi3dPQUFzOdPl%3Fpurpose%3Dfullsize" alt="Image" width="1975" height="1609"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This shift has three important implications.&lt;/p&gt;

&lt;p&gt;First, the value of a data platform is expanding from &lt;strong&gt;managing data&lt;/strong&gt; to &lt;strong&gt;enabling agents to act on data&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Second, the enterprise AI interface is moving beyond SQL and BI toward natural language and agent-driven workflows.&lt;/p&gt;

&lt;p&gt;Third, data is increasingly being understood as &lt;strong&gt;AI context&lt;/strong&gt;, rather than simply something to be stored and queried.&lt;/p&gt;

&lt;p&gt;The question is no longer just whether an enterprise can access its data. It is whether its data can provide the context an agent needs to make the right decision and take the right action.&lt;/p&gt;

&lt;h3&gt;
  
  
  Databricks: Turning Data and AI Engineering into an Agent Runtime
&lt;/h3&gt;

&lt;p&gt;Databricks is taking a similar direction from a different starting point.&lt;/p&gt;

&lt;p&gt;The goal is not simply to add AI capabilities to the Lakehouse. Instead, data, models, notebooks, pipelines, governance, and applications are becoming part of an &lt;strong&gt;agent-ready engineering environment&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FU3r1GKIbGK38Ja0FEdBJ87Or0Y1f7so4Gv6Ujl0lS2dvMwOfujhrltjIIsgrso9F3WP7aPg4U5YV7BTh5RLR3kLoD3Ay-qFuzNoE-Sa__O6sG3Xf_58H4mK9cWdpAvm9hrWatrfT6QYOaUtl1QopXuNuPCXndPbC72eSSD2zZzM02E3ntPriEUMBYfGUQcrw%3Fpurpose%3Dfullsize" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FU3r1GKIbGK38Ja0FEdBJ87Or0Y1f7so4Gv6Ujl0lS2dvMwOfujhrltjIIsgrso9F3WP7aPg4U5YV7BTh5RLR3kLoD3Ay-qFuzNoE-Sa__O6sG3Xf_58H4mK9cWdpAvm9hrWatrfT6QYOaUtl1QopXuNuPCXndPbC72eSSD2zZzM02E3ntPriEUMBYfGUQcrw%3Fpurpose%3Dfullsize" alt="Image" width="838" height="559"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For a data platform to be truly agent-ready, five capabilities matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data must be discoverable.&lt;/li&gt;
&lt;li&gt;Schemas must be understandable.&lt;/li&gt;
&lt;li&gt;Metrics must have clear business definitions.&lt;/li&gt;
&lt;li&gt;Workflows must be executable.&lt;/li&gt;
&lt;li&gt;Actions must be auditable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Being "agent-ready" is therefore much more than allowing a model to access data. It means making &lt;strong&gt;data, semantics, compute, governance, and execution&lt;/strong&gt; work together for agents.&lt;/p&gt;

&lt;h3&gt;
  
  
  The User Is Changing: From Humans to Agents
&lt;/h3&gt;

&lt;p&gt;The more fundamental change is happening on the user side.&lt;/p&gt;

&lt;p&gt;Traditional data platforms were built primarily for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data Engineers&lt;/li&gt;
&lt;li&gt;Data Analysts&lt;/li&gt;
&lt;li&gt;BI Users&lt;/li&gt;
&lt;li&gt;Platform Engineers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The next generation will increasingly serve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Coding Agents&lt;/li&gt;
&lt;li&gt;Data Agents&lt;/li&gt;
&lt;li&gt;Business Agents&lt;/li&gt;
&lt;li&gt;Operations Agents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2Fl_JS1c0RnpNLiZ2rWMSDe1r_dlnAZKV-n1fBZcKLDxq6ps7OFooeaX9X_ecc5Gp4kCRGUgyz05iNDHTusq7cEhNxcn2hGwcOQ_-9FJG19EDU8wZUpTTBQ-AWofP4H-ppBg_ZPzNQhS9eANUkV1UNAkRq1a4dQZYNptLnxcPZoZHmszgHFxx2m8ke3iOD2jsB%3Fpurpose%3Dfullsize" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2Fl_JS1c0RnpNLiZ2rWMSDe1r_dlnAZKV-n1fBZcKLDxq6ps7OFooeaX9X_ecc5Gp4kCRGUgyz05iNDHTusq7cEhNxcn2hGwcOQ_-9FJG19EDU8wZUpTTBQ-AWofP4H-ppBg_ZPzNQhS9eANUkV1UNAkRq1a4dQZYNptLnxcPZoZHmszgHFxx2m8ke3iOD2jsB%3Fpurpose%3Dfullsize" alt="Image" width="3000" height="1687"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These users have fundamentally different needs.&lt;/p&gt;

&lt;p&gt;Human users need &lt;strong&gt;UIs, documentation, and guided workflows&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Agents need &lt;strong&gt;APIs, Skills, Context, Policies, and structured Feedback&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That difference has architectural consequences. A platform designed around human interaction cannot simply expose more APIs and expect to become agent-native. The underlying engineering model needs to change.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Core Question Is Changing
&lt;/h3&gt;

&lt;p&gt;The contrast between the past decade and the next one is becoming increasingly clear.&lt;/p&gt;

&lt;p&gt;Over the past ten years, we built data platforms that helped people operate tools: write SQL, configure pipelines, build DAGs, inspect logs, and troubleshoot failed jobs.&lt;/p&gt;

&lt;p&gt;Over the next decade, the goal will be to build data engineering platforms where &lt;strong&gt;people define the outcome and agents orchestrate the work&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The workflow shifts from:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Write SQL → Build Pipeline → Configure DAG → Monitor → Fix&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understand Intent → Plan → Invoke Capabilities → Execute → Validate → Learn&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The central question for data platforms is therefore changing from:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How do we make tools easier for people to operate?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How do we enable agents to execute engineering work within the right context and security boundaries?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FylysFMA2-_20KQyVuKbGFfk1aH7sBS0Wr_P29pjzbypQ71Aa2HZZLReUyyGRFtCv4QWcw9CMbBaYKS5BKVAo_R-iiwJhiY9MWZV3ZE-02nS_t0hovGqPUp4GY_6WVCg9GTdcTJJW9SjgAW77NtPnrCnnyBLTpaqWoyJBSGRMi8rCcLMSj4We9RA5If4gcSJT%3Fpurpose%3Dfullsize" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FylysFMA2-_20KQyVuKbGFfk1aH7sBS0Wr_P29pjzbypQ71Aa2HZZLReUyyGRFtCv4QWcw9CMbBaYKS5BKVAo_R-iiwJhiY9MWZV3ZE-02nS_t0hovGqPUp4GY_6WVCg9GTdcTJJW9SjgAW77NtPnrCnnyBLTpaqWoyJBSGRMi8rCcLMSj4We9RA5If4gcSJT%3Fpurpose%3Dfullsize" alt="Image" width="2752" height="1536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Looking back, this shift follows a familiar pattern.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Database Era&lt;/strong&gt; focused on storage, queries, and transactions.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Big Data Platform Era&lt;/strong&gt; focused on scale, distributed computing, and large-scale data processing.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Modern Data Stack Era&lt;/strong&gt; introduced cloud infrastructure, modular architectures, and standardized tools.&lt;/p&gt;

&lt;p&gt;Now, with agents becoming a new class of data platform user, we are entering the &lt;strong&gt;Agentic Data Stack Era&lt;/strong&gt;, where Context, Skills, Control, and Harness become first-class engineering concerns.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FOFNNHEqr29dEpsTr3NYXy1qUdl0nDFGD8k_Tkz5b-NN9SZGt1I18hkt2nC1Co5nJB7uxijy-84lWlTOGk7vxuLOHsEsuwmwoTpPGuH3lu4jpOFJxxiHxyHuSMfOcUDgQWAOwQSblO8PtWo5q1pxckBsO6Z2gMAaYKlDuQ8Y2oe-yaNefVFszCRNcs81XZWJD%3Fpurpose%3Dfullsize" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FOFNNHEqr29dEpsTr3NYXy1qUdl0nDFGD8k_Tkz5b-NN9SZGt1I18hkt2nC1Co5nJB7uxijy-84lWlTOGk7vxuLOHsEsuwmwoTpPGuH3lu4jpOFJxxiHxyHuSMfOcUDgQWAOwQSblO8PtWo5q1pxckBsO6Z2gMAaYKlDuQ8Y2oe-yaNefVFszCRNcs81XZWJD%3Fpurpose%3Dfullsize" alt="Image" width="1024" height="1024"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The Limits of the Modern Data Stack
&lt;/h2&gt;

&lt;h3&gt;
  
  
  First, Recognize What It Got Right
&lt;/h3&gt;

&lt;p&gt;Before talking about what comes next, it is important to recognize how successful the Modern Data Stack has been.&lt;/p&gt;

&lt;p&gt;Over the past decade, it addressed many of the biggest challenges in enterprise data infrastructure.&lt;/p&gt;

&lt;p&gt;The old model relied on heavy projects, specialized hardware, extensive customization, long delivery cycles, and tightly coupled systems.&lt;/p&gt;

&lt;p&gt;The Modern Data Stack introduced modular engineering, cloud resources, standardized tools, and composability.&lt;/p&gt;

&lt;p&gt;It transformed data engineering from building one large system into &lt;strong&gt;assembling a set of specialized capabilities&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FGBDyAA-Obh9r2V9svuGKW00j25xvVjBKFRD2eIvxPHPZUQsXWU--7aIU12np76A7o3ghUxEfOViM3We-TcABnMXargLBirKQIW5o58wUorYJ1kJO3KKyKHVw6BkgaqLWacFz1eI79CkKg_z_VT8ttv_WoXPT9Ioagjuana_HLvT6R_soCZrUewm38pvNRezF%3Fpurpose%3Dfullsize" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FGBDyAA-Obh9r2V9svuGKW00j25xvVjBKFRD2eIvxPHPZUQsXWU--7aIU12np76A7o3ghUxEfOViM3We-TcABnMXargLBirKQIW5o58wUorYJ1kJO3KKyKHVw6BkgaqLWacFz1eI79CkKg_z_VT8ttv_WoXPT9Ioagjuana_HLvT6R_soCZrUewm38pvNRezF%3Fpurpose%3Dfullsize" alt="Image" width="1200" height="675"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead of procurement, deployment, customization, and tightly coupled integration, teams could combine &lt;strong&gt;Cloud, Open Source, SaaS, and Standard APIs&lt;/strong&gt; like building blocks.&lt;/p&gt;

&lt;p&gt;That brought something the traditional data platform could not offer at the same scale: freedom to choose, evolve, replace, and recombine individual components.&lt;/p&gt;

&lt;p&gt;Its most important contribution was arguably &lt;strong&gt;tool standardization&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Data engineering was decomposed into a professional toolchain:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Source&lt;/strong&gt;&lt;br&gt;
Business systems, SaaS, APIs&lt;/p&gt;

&lt;p&gt;→ &lt;strong&gt;Ingestion&lt;/strong&gt;&lt;br&gt;
Synchronization, CDC, files&lt;/p&gt;

&lt;p&gt;→ &lt;strong&gt;Storage&lt;/strong&gt;&lt;br&gt;
Warehouses, lakehouses, compute&lt;/p&gt;

&lt;p&gt;→ &lt;strong&gt;Transformation&lt;/strong&gt;&lt;br&gt;
SQL, models, testing&lt;/p&gt;

&lt;p&gt;→ &lt;strong&gt;Orchestration&lt;/strong&gt;&lt;br&gt;
DAGs, scheduling, retries&lt;/p&gt;

&lt;p&gt;→ &lt;strong&gt;Governance&lt;/strong&gt;&lt;br&gt;
Catalog, lineage, permissions&lt;/p&gt;

&lt;p&gt;→ &lt;strong&gt;BI&lt;/strong&gt;&lt;br&gt;
Dashboards and self-service analytics&lt;/p&gt;

&lt;p&gt;Each layer became more specialized, and that specialization dramatically improved engineering productivity.&lt;/p&gt;

&lt;h3&gt;
  
  
  But There Is a Fundamental Limitation
&lt;/h3&gt;

&lt;p&gt;The problem is also hidden in that success:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Modern Data Stack was designed for humans, not agents.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FsEtulkfDorVf9z-5m3zV5mHtkhm78NaoKLgoPMQxEZQRjmtHnxLfO4zwWHoU0Fon9bXGprpw-itNrU54QJ7w2YCL7dUlWpq3sYpMZp8ey12j39XROksG8GB7__oeF1ir7DXfZZ0icphsZD1mJ90KFew636B-P9kU-2EW1dP9n8LV9WKRs-gqm1xcu9AByCMN%3Fpurpose%3Dfullsize" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FsEtulkfDorVf9z-5m3zV5mHtkhm78NaoKLgoPMQxEZQRjmtHnxLfO4zwWHoU0Fon9bXGprpw-itNrU54QJ7w2YCL7dUlWpq3sYpMZp8ey12j39XROksG8GB7__oeF1ir7DXfZZ0icphsZD1mJ90KFew636B-P9kU-2EW1dP9n8LV9WKRs-gqm1xcu9AByCMN%3Fpurpose%3Dfullsize" alt="Image" width="1200" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When humans use data tools, they fill in missing context almost automatically.&lt;/p&gt;

&lt;p&gt;They read documentation. They understand business terminology. They resolve ambiguity. They recognize risk. They know when something looks suspicious. And, critically, they understand who is accountable for the outcome.&lt;/p&gt;

&lt;p&gt;Agents do not automatically have that context.&lt;/p&gt;

&lt;p&gt;When an agent encounters SQL, documentation, DAGs, logs, business rules, and data catalogs, it cannot simply assume that the missing information is obvious.&lt;/p&gt;

&lt;p&gt;This reveals an uncomfortable truth about today's supposedly automated data platforms:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Much of their "automation" still depends on humans silently filling in the gaps.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Is Amplifying the Problem
&lt;/h3&gt;

&lt;p&gt;Generative AI is changing the economics of software generation.&lt;/p&gt;

&lt;p&gt;The cost of producing SQL, code, DAGs, and configuration is rapidly approaching zero.&lt;/p&gt;

&lt;p&gt;As a result, the scarce part of data engineering is shifting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQL, code, DAGs, and configuration are becoming commodities.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What remains scarce is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context. Verification. Governance. Controlled Execution. Accountability.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The old scarce skills were:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Write SQL → Build Pipelines → Configure DAGs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The emerging scarce skills are:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Provide Context → Verify Results → Govern Actions → Control Execution&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FpwzFBRKbE4PCkVLPPy1RcCdiIhPpkyK5XLM2P0lvuzmaIo0bGruK3yulnMO_Cp6XcRPlcT5NCrh8askqfxqRe_gYuWdLBruxhsFCqYNC_kU609Ss3JIKvY1q2-bwkyICUAdgbKTkIs-J5oWTAAIKwCZ7j5jj-WugQ7JkwWnmDSEVbLlmRlfbqsp4ucjzgn-E%3Fpurpose%3Dfullsize" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FpwzFBRKbE4PCkVLPPy1RcCdiIhPpkyK5XLM2P0lvuzmaIo0bGruK3yulnMO_Cp6XcRPlcT5NCrh8askqfxqRe_gYuWdLBruxhsFCqYNC_kU609Ss3JIKvY1q2-bwkyICUAdgbKTkIs-J5oWTAAIKwCZ7j5jj-WugQ7JkwWnmDSEVbLlmRlfbqsp4ucjzgn-E%3Fpurpose%3Dfullsize" alt="Image" width="1024" height="1024"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The real challenge in the AI era is therefore not generating data engineering artifacts.&lt;/p&gt;

&lt;p&gt;It is &lt;strong&gt;safely delivering those artifacts into production&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is why the conversation is shifting.&lt;/p&gt;

&lt;p&gt;The question is no longer simply:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can AI generate code?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is increasingly:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How does AI-generated work become production-ready?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For engineering teams, the real concern is not that AI can write SQL. It is what happens after the SQL has been written.&lt;/p&gt;

&lt;p&gt;Who verifies it?&lt;/p&gt;

&lt;p&gt;Who approves it?&lt;/p&gt;

&lt;p&gt;Who owns the outcome?&lt;/p&gt;

&lt;p&gt;Who is responsible if it is wrong?&lt;/p&gt;

&lt;p&gt;Three problems become particularly important.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Complexity.&lt;/strong&gt; There are already enough tools. Will agents create even more hidden dependencies, one-off scripts, and temporary workflows?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Accountability.&lt;/strong&gt; If an agent generates SQL, ETL, or a DAG, who confirms that it is correct? Who approves it? Who owns the result?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Production risk.&lt;/strong&gt; The most dangerous scenario is not necessarily that an agent writes incorrect SQL. It is that the incorrect SQL &lt;strong&gt;runs successfully&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And beneath these concerns are six additional engineering requirements:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Validation, Ownership, Lineage, Security, Rollback, and Audit.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI can dramatically reduce the cost of generation. But without engineering controls, it can also dramatically increase operational complexity.&lt;/p&gt;

&lt;p&gt;Data engineering has no meaningful concept of "close enough."&lt;/p&gt;

&lt;p&gt;In many AI applications, an inaccurate answer may simply result in a poor user experience.&lt;/p&gt;

&lt;p&gt;In data engineering, an incorrect result can flow directly into financial reports, business operations, customer decisions, and automated systems.&lt;/p&gt;

&lt;p&gt;A missed CDC event, incorrect metric definition, incomplete dataset, or untraceable transformation can propagate through an entire chain:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wrong Data → Wrong Decision → Wrong Action&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The most dangerous failure is therefore not an agent that fails to execute.&lt;/p&gt;

&lt;p&gt;It is an agent that produces the wrong result and &lt;strong&gt;successfully executes it in production&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Harness Engineering: Turning Generation into Delivery
&lt;/h2&gt;

&lt;p&gt;The answer is an engineering layer between agents and the underlying tools: &lt;strong&gt;the Harness&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A Harness provides the controls, context, verification, and recovery mechanisms required to turn AI-generated work into production engineering.&lt;/p&gt;

&lt;h3&gt;
  
  
  Three Types of Evidence for Production Delivery
&lt;/h3&gt;

&lt;p&gt;A production-grade Harness should provide three types of evidence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Outcome Evidence&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;First, prove that the system actually improves delivery rather than simply adding another AI interface.&lt;/p&gt;

&lt;p&gt;Does it reduce delivery time rather than simply moving work from execution to review?&lt;/p&gt;

&lt;p&gt;Are errors discovered earlier?&lt;/p&gt;

&lt;p&gt;Are rework, context switching, and waiting reduced?&lt;/p&gt;

&lt;p&gt;Does the team actually complete engineering work faster?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Process Evidence&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Next, every step should be explainable, traceable, and recoverable.&lt;/p&gt;

&lt;p&gt;Can the boundaries between input, generation, approval, and execution be traced?&lt;/p&gt;

&lt;p&gt;When something goes wrong, can the team determine whether the problem originated in Context, Skill, Runtime, or Policy?&lt;/p&gt;

&lt;p&gt;Can the system retry, roll back, or hand control back to a human without forcing the team to start over?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Governance Evidence&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Finally, high-risk actions must be explicitly constrained rather than implicitly delegated to the model.&lt;/p&gt;

&lt;p&gt;Which actions can run automatically?&lt;/p&gt;

&lt;p&gt;Which require approval?&lt;/p&gt;

&lt;p&gt;Are those rules defined by Policy?&lt;/p&gt;

&lt;p&gt;Does human intervention happen only at meaningful decision points?&lt;/p&gt;

&lt;p&gt;Can the audit trail answer:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who did what, when, why, and what happened as a result?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FEcUFHnM8RoAlJcIXYpXENHsLV_Am5FYTk1D1DHk5olXJJ4_BQve_fF6ZYbIpRk7zHFv4yPYW7JNPbQ7b21LxGoEcBZW5Gflo0KaCrwHdvWfZHguZHbGfZpi1FC_LStH6wG8sgNj-T-LcN6oFAZ9eYobGK0i-eKIrhzo-yuI7CaLKwSauyqLKKe0FnX0Mv9Kl%3Fpurpose%3Dfullsize" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FEcUFHnM8RoAlJcIXYpXENHsLV_Am5FYTk1D1DHk5olXJJ4_BQve_fF6ZYbIpRk7zHFv4yPYW7JNPbQ7b21LxGoEcBZW5Gflo0KaCrwHdvWfZHguZHbGfZpi1FC_LStH6wG8sgNj-T-LcN6oFAZ9eYobGK0i-eKIrhzo-yuI7CaLKwSauyqLKKe0FnX0Mv9Kl%3Fpurpose%3Dfullsize" alt="Image" width="1536" height="1024"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Without these three types of evidence, an agent simply generates content faster.&lt;/p&gt;

&lt;p&gt;With them, the agent begins to &lt;strong&gt;deliver engineering outcomes&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Seven Sign-off Gates for Production
&lt;/h3&gt;

&lt;p&gt;Before an agent-driven workflow reaches production, organizations should be able to verify seven critical sign-off gates.&lt;/p&gt;

&lt;p&gt;These are not product features. They are production-readiness checkpoints.&lt;/p&gt;

&lt;p&gt;Missing even one of them can turn a promising demo into an operational risk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Intent can be verified&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Goals, boundaries, and acceptance criteria must be captured as structured inputs rather than relying on informal instructions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Context is complete&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Business, data, permission, and execution context must be available. The model should not be expected to guess what the enterprise means.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The plan can be reviewed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SQL, DAGs, and task steps should be readable by humans, verifiable by systems, and reviewable from a risk perspective.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Execution is controlled&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Permissions, target environments, execution paths, and Skill selection must operate within defined Policies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Results can be validated&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Results should pass data-quality checks, business-definition checks, reconciliation, or lineage validation rather than being accepted simply because execution succeeded.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Failures can be recovered&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The system must know whether to retry, roll back, or escalate to a human. Failures cannot simply remain unresolved.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Actions are auditable&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Plans, approvals, executions, results, and version changes should be recorded across the full lifecycle.&lt;/p&gt;

&lt;p&gt;These seven gates are not designed to make agents smarter.&lt;/p&gt;

&lt;p&gt;They are designed to give organizations a clear answer to a more important question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When is it safe to delegate?&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Three Foundations: Correctness, Capability, and Context
&lt;/h3&gt;

&lt;p&gt;A Harness is only as effective as the three foundations underneath it.&lt;/p&gt;

&lt;h4&gt;
  
  
  SQL That Runs Is Not Necessarily Business-Correct
&lt;/h4&gt;

&lt;p&gt;In data engineering, successful execution is only the lowest bar.&lt;/p&gt;

&lt;p&gt;There are at least four levels of correctness:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Syntactic correctness → Execution correctness → Data correctness → Business correctness&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A query can be technically correct and still produce the wrong business result.&lt;/p&gt;

&lt;p&gt;Consider revenue.&lt;/p&gt;

&lt;p&gt;Should "Revenue" mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Order Amount?&lt;/li&gt;
&lt;li&gt;Paid Amount?&lt;/li&gt;
&lt;li&gt;Recognized Revenue?&lt;/li&gt;
&lt;li&gt;Net Revenue?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The query engine can determine whether the SQL is valid.&lt;/p&gt;

&lt;p&gt;Only enterprise context can determine whether the calculation is &lt;strong&gt;business-correct&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Common failure modes include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choosing the wrong data source&lt;/li&gt;
&lt;li&gt;Using the wrong metric definition&lt;/li&gt;
&lt;li&gt;Applying the wrong time window&lt;/li&gt;
&lt;li&gt;Creating duplicates through joins&lt;/li&gt;
&lt;li&gt;Ignoring business rules&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Without Capability, Agents Generate More Temporary Scripts
&lt;/h4&gt;

&lt;p&gt;There is another risk.&lt;/p&gt;

&lt;p&gt;If agents can only interact with raw SQL, Python, Shell, or low-level APIs, they may simply generate more one-off scripts.&lt;/p&gt;

&lt;p&gt;Temporary scripts are typically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One-time implementations&lt;/li&gt;
&lt;li&gt;Difficult to standardize&lt;/li&gt;
&lt;li&gt;Difficult to audit&lt;/li&gt;
&lt;li&gt;Difficult to roll back&lt;/li&gt;
&lt;li&gt;Poor at providing structured feedback&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Engineering Capabilities are different.&lt;/p&gt;

&lt;p&gt;A Capability is a reusable, structured Skill with defined inputs, outputs, policies, validation, and recovery behavior.&lt;/p&gt;

&lt;p&gt;The difference is fundamental:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Without Capability, AI simply upgrades "humans writing temporary scripts" into "AI generating temporary scripts."&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Without Context, Agents Guess What the Enterprise Means
&lt;/h4&gt;

&lt;p&gt;Enterprise data is not simply a collection of tables and columns.&lt;/p&gt;

&lt;p&gt;It is a context system containing business semantics, technical relationships, historical rules, and organizational ownership.&lt;/p&gt;

&lt;p&gt;Consider a seemingly simple request:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Calculate revenue from high-value customers over the last 30 days.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;An agent needs to know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How are high-value customers defined?&lt;/li&gt;
&lt;li&gt;What revenue definition should be used?&lt;/li&gt;
&lt;li&gt;What exactly counts as the last 30 days?&lt;/li&gt;
&lt;li&gt;Which data source is authoritative?&lt;/li&gt;
&lt;li&gt;How should refunds be handled?&lt;/li&gt;
&lt;li&gt;Who owns and approves the result?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These questions correspond to four types of context:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Business Context&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Data Context&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Execution Context&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Organizational Context&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Without Context, an agent is not understanding the enterprise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It is guessing.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Software Itself Needs to Be Rebuilt for Agents
&lt;/h3&gt;

&lt;p&gt;AI is also forcing software companies to answer a broader question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does software look like when agents, rather than humans, are its primary users?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FB8dM0SK1R_fPlBm-5QV1tXUV5OyRGXrTzvVP0UxDvTZcxz_SBlskwY5T73DgaPNyzCREeLC0IES3I18zA8db6W4DTkNkJgtrk1X6KbGdHq2IVVlNqK_zhfAympbqN0SZa55iz0sNj8PiyTN6TeGFzojuNSlDpmBp80k6DwVD12KqEch0KRq5Lk_mY69CUJvO%3Fpurpose%3Dfullsize" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FB8dM0SK1R_fPlBm-5QV1tXUV5OyRGXrTzvVP0UxDvTZcxz_SBlskwY5T73DgaPNyzCREeLC0IES3I18zA8db6W4DTkNkJgtrk1X6KbGdHq2IVVlNqK_zhfAympbqN0SZa55iz0sNj8PiyTN6TeGFzojuNSlDpmBp80k6DwVD12KqEch0KRq5Lk_mY69CUJvO%3Fpurpose%3Dfullsize" alt="Image" width="1024" height="1024"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Traditional software is &lt;strong&gt;UI-first&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A person opens an interface, finds a feature, fills in configuration, clicks Run, and handles exceptions.&lt;/p&gt;

&lt;p&gt;Agent-native software needs to become &lt;strong&gt;Skill-first&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Skills are discoverable&lt;/li&gt;
&lt;li&gt;Context can be injected&lt;/li&gt;
&lt;li&gt;Policies can constrain actions&lt;/li&gt;
&lt;li&gt;Feedback can be consumed programmatically&lt;/li&gt;
&lt;li&gt;Results can be verified&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Established vendors have significant legacy systems to work with. New companies have more freedom to rethink their architectures.&lt;/p&gt;

&lt;p&gt;In this environment, the speed at which organizations recognize and respond to the shift may become a major competitive advantage.&lt;/p&gt;

&lt;p&gt;Every piece of software that matters to data engineering will need to reconsider how an agent interacts with it.&lt;/p&gt;

&lt;p&gt;The conclusion is straightforward:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agents do not primarily lack intelligence. They lack the engineering system required to turn intelligence into reliable outcomes.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Today's models can already work with:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQL, ETL, DAGs, Logs, Fixes, and Plans.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But they cannot independently take responsibility for:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context, Permissions, Validation, Impact, Rollback, and Accountability.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Between &lt;strong&gt;Generation Capability&lt;/strong&gt; and &lt;strong&gt;Production Capability&lt;/strong&gt; sits an entire Engineering System.&lt;/p&gt;

&lt;p&gt;The limiting factor for agents is therefore no longer intelligence alone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It is engineering.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. The Five-Layer Agentic Data Stack
&lt;/h2&gt;

&lt;p&gt;A next-generation data platform can be organized into five layers:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/media%2F17890945545003%2F17890958110893.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/media%2F17890945545003%2F17890958110893.jpg" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The architectural principle is critical:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agents should not directly call underlying tools.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead, they should access those capabilities through the Harness, while Context from L3 and Controls from L4 define what the agent is allowed to do.&lt;/p&gt;

&lt;h3&gt;
  
  
  Breaking Down the Five Layers
&lt;/h3&gt;

&lt;h4&gt;
  
  
  L1: Deterministic Execution
&lt;/h4&gt;

&lt;p&gt;Intelligence should not be responsible for determinism.&lt;/p&gt;

&lt;p&gt;The Runtime is.&lt;/p&gt;

&lt;p&gt;It executes SQL, synchronizes data, runs batch and CDC workloads, schedules jobs, and produces logs and status information.&lt;/p&gt;

&lt;p&gt;Typical components include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Databases and warehouses&lt;/li&gt;
&lt;li&gt;Lakehouses and Iceberg&lt;/li&gt;
&lt;li&gt;Apache Spark&lt;/li&gt;
&lt;li&gt;Apache Flink&lt;/li&gt;
&lt;li&gt;Apache SeaTunnel&lt;/li&gt;
&lt;li&gt;Apache DolphinScheduler&lt;/li&gt;
&lt;li&gt;SQL engines&lt;/li&gt;
&lt;li&gt;Data quality engines&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  L2: The Data Engineering Harness
&lt;/h4&gt;

&lt;p&gt;After an agent understands the goal, generates a plan, and initiates a request, that request should pass through a controlled engineering layer.&lt;/p&gt;

&lt;p&gt;A typical Harness includes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skill Definition → Permission Check → Context Injection → Validation → Observability → Rollback&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Only then should the request become a controlled Skill that can interact with databases, operating systems, development platforms, and cloud services.&lt;/p&gt;

&lt;p&gt;Without a Harness, the pattern is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Direct Scripts → Direct APIs → Difficult Verification → Difficult Auditing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With a Harness, it becomes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Standardized Skills → Clear Boundaries → Structured Feedback → Human Takeover&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The value of the Harness is therefore to transform an agent's ability to generate content into an enterprise's ability to &lt;strong&gt;reliably deliver engineering work&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  L3: Semantic &amp;amp; Knowledge Layer
&lt;/h4&gt;

&lt;p&gt;The Semantic Layer answers questions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which table is trusted?&lt;/li&gt;
&lt;li&gt;What does this metric actually mean?&lt;/li&gt;
&lt;li&gt;Is this field sensitive?&lt;/li&gt;
&lt;li&gt;Where did this data come from?&lt;/li&gt;
&lt;li&gt;Who will be affected downstream?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It combines:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Business Rules, Metadata, Lineage, Metrics, Glossary, Ontology, Data Contracts, and Execution Memory.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the BI era, the Semantic Layer primarily helped people understand data.&lt;/p&gt;

&lt;p&gt;In the Agentic era, it becomes a &lt;strong&gt;context layer that agents must consult before taking action&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Without a Semantic Layer, an agent may understand column names.&lt;/p&gt;

&lt;p&gt;It will not necessarily understand the enterprise behind them.&lt;/p&gt;

&lt;h4&gt;
  
  
  L4: Agentic Orchestration Control Plane
&lt;/h4&gt;

&lt;p&gt;The orchestration layer must evolve beyond simply running DAGs.&lt;/p&gt;

&lt;p&gt;Traditional orchestration looks like:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Human defines DAG → Scheduler executes Tasks&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Agentic orchestration looks like:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Human defines Goal → Agent plans → Control Plane enforces boundaries → Human intervenes when necessary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The control plane introduces checkpoints such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Goal Description&lt;/li&gt;
&lt;li&gt;Skill Checking&lt;/li&gt;
&lt;li&gt;Policy Checking&lt;/li&gt;
&lt;li&gt;Human Gate&lt;/li&gt;
&lt;li&gt;Audit&lt;/li&gt;
&lt;li&gt;Multi-task Configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  L5: Business Intent
&lt;/h4&gt;

&lt;p&gt;The biggest shift happens at the top of the stack.&lt;/p&gt;

&lt;p&gt;The traditional approach asks people to describe &lt;strong&gt;steps&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Synchronize table A to table B.&lt;br&gt;
Write this SQL.&lt;br&gt;
Configure the DAG.&lt;br&gt;
Run it every day at 8 AM.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The Agentic approach asks people to define &lt;strong&gt;outcomes&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Generate a daily dataset containing revenue from high-value customers, use the approved revenue definition, do not overwrite production tables, and require human approval if the result changes by more than 5%.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Business intent should therefore cover eight dimensions:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Goal, Data Scope, Time Window, Quality Requirements, Cost Constraints, Risk Boundaries, Approval Conditions, and Acceptance Criteria.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The future of data engineering is not about people describing every step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It is about people defining goals, boundaries, and acceptance criteria.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2Fe-5JY5ydC7KbtKowiis8heyLFvh8njl3H_IgujduZXWdqCrOF-6bWp90EVte7GduY-IJ-Rzvv3cCccIiDJVtOQvDYaKa0rgiS7926I8DOeONaZfbyRucYxanC2J0OOOATzlbca4XsG0qqH3ebYxwC8Uv1LusjW7bEglEhsjIjxy_L9uMolRnjqBLoDvT-zgG%3Fpurpose%3Dfullsize" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2Fe-5JY5ydC7KbtKowiis8heyLFvh8njl3H_IgujduZXWdqCrOF-6bWp90EVte7GduY-IJ-Rzvv3cCccIiDJVtOQvDYaKa0rgiS7926I8DOeONaZfbyRucYxanC2J0OOOATzlbca4XsG0qqH3ebYxwC8Uv1LusjW7bEglEhsjIjxy_L9uMolRnjqBLoDvT-zgG%3Fpurpose%3Dfullsize" alt="Image" width="1200" height="1500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FUSQnNw1HUJb78_-i6psO8YR2vu_rz-kDuBvjI-3-u2KvYlvmxjMgztLfxkmh1ymQSEZJFF2x59OzFwiwYHy5VDP8YITQ2P9trY6aPWtYQAkGdXJD8tRDxipXeXi1W0m6ADBNurE7Uc9SUaBTsna2m07NLt9J8x_UjzAx-Se9ifDIPI0QLKJNtkrhZSxzSeBH%3Fpurpose%3Dfullsize" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FUSQnNw1HUJb78_-i6psO8YR2vu_rz-kDuBvjI-3-u2KvYlvmxjMgztLfxkmh1ymQSEZJFF2x59OzFwiwYHy5VDP8YITQ2P9trY6aPWtYQAkGdXJD8tRDxipXeXi1W0m6ADBNurE7Uc9SUaBTsna2m07NLt9J8x_UjzAx-Se9ifDIPI0QLKJNtkrhZSxzSeBH%3Fpurpose%3Dfullsize" alt="Image" width="1564" height="882"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Re-Layer the Stack?
&lt;/h3&gt;

&lt;p&gt;The next-generation data platform is not simply the old platform with more plugins.&lt;/p&gt;

&lt;p&gt;It requires a new division of responsibilities.&lt;/p&gt;

&lt;p&gt;The traditional stack is organized around:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Storage → Compute → Orchestration → Governance → BI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Agentic Data Stack is organized around:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Intent → Control → Semantic → Harness → Runtime&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Together, these layers answer four fundamental questions:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where does the agent get its business goals?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does it understand enterprise capabilities and meaning?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which capabilities can it invoke?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who controls execution, validation, and rollback?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Agentic era therefore requires data platforms to rethink the relationship between &lt;strong&gt;intent, context, capability, control, and execution&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Minimum Viable Loop
&lt;/h3&gt;

&lt;p&gt;The five-layer architecture comes together through a simple Harness loop:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Intent → Context → Plan → Skill → Execute → Validate → Review → Feedback&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Intent&lt;/strong&gt; defines the business goal, constraints, and acceptance criteria.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context&lt;/strong&gt; supplies business, data, execution, and organizational information.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plan&lt;/strong&gt; breaks the goal into synchronization, transformation, quality, orchestration, and other tasks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skill&lt;/strong&gt; invokes standardized engineering capabilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Execute&lt;/strong&gt; runs the work deterministically through the Runtime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Validate&lt;/strong&gt; checks data results, quality, and business rules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Review&lt;/strong&gt; brings humans into critical decisions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Feedback&lt;/strong&gt; sends logs, metrics, exceptions, and approval outcomes back to the agent.&lt;/p&gt;

&lt;p&gt;This creates a continuous loop rather than a one-shot generation process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Without the loop, an agent generates content.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With the loop, an agent starts delivering engineering work.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Three Design Principles
&lt;/h3&gt;

&lt;h4&gt;
  
  
  A Skill Is Not a Prompt. It Is a Controlled Execution Unit.
&lt;/h4&gt;

&lt;p&gt;A Prompt is an instruction.&lt;/p&gt;

&lt;p&gt;A Skill is an engineering capability composed of:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input, Context, Policy, Execution, Validation, Rollback, and Output.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A Tool API exposes a low-level operation and defines parameters, leaving failure handling to the caller.&lt;/p&gt;

&lt;p&gt;An Engineering Skill encapsulates an end-to-end engineering intent, defines its Context and Policy, and includes validation and recovery mechanisms.&lt;/p&gt;

&lt;p&gt;The distinction is fundamental:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Prompt determines how an agent responds. A Skill determines whether an agent can execute safely.&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  CLI for Agents, GUI for Humans
&lt;/h4&gt;

&lt;p&gt;The interface model also needs to change.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CLI/API&lt;/strong&gt; should serve execution and feedback:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Structured inputs and outputs&lt;/li&gt;
&lt;li&gt;Easy programmatic invocation&lt;/li&gt;
&lt;li&gt;Testability&lt;/li&gt;
&lt;li&gt;Version control&lt;/li&gt;
&lt;li&gt;Skills&lt;/li&gt;
&lt;li&gt;MCP&lt;/li&gt;
&lt;li&gt;SDKs&lt;/li&gt;
&lt;li&gt;Declarative configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;GUI&lt;/strong&gt; should serve understanding, review, and governance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inspect agent plans and generated artifacts&lt;/li&gt;
&lt;li&gt;Review SQL, DAGs, logs, and results&lt;/li&gt;
&lt;li&gt;Monitor permissions and risk&lt;/li&gt;
&lt;li&gt;Take control when uncertainty or exceptions arise&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A complete workflow looks like this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Human defines the goal through the GUI → Agent invokes Skills through CLI/API → Runtime executes → GUI presents DAGs, SQL, logs, and risk information → Human approves or takes over&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Human-in-the-Loop Should Protect Risk Boundaries, Not Approve Everything
&lt;/h4&gt;

&lt;p&gt;Human-in-the-loop does not mean humans should approve every agent action.&lt;/p&gt;

&lt;p&gt;Every action should first pass through Policy-based automated screening and then be handled according to its risk level.&lt;/p&gt;

&lt;p&gt;A practical model is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Low risk → Automatic execution&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Medium risk → Execute and notify&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;High risk → Human approval&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Critical risk → Block or require dual approval&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This leads to three principles:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Intervene based on risk, not every step.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Approve critical decisions, not mechanical actions.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Humans define the Policy; agents operate within it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Low risk:&lt;/strong&gt; reading metadata, querying development environments, generating documentation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Medium risk:&lt;/strong&gt; creating development tasks, running low-cost validation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;High risk:&lt;/strong&gt; writing to production, changing schemas, modifying critical metrics.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Critical risk:&lt;/strong&gt; deleting core tables, bulk overwrites, or high-risk operations involving sensitive data.&lt;/p&gt;

&lt;p&gt;The goal is not to turn humans into approval bottlenecks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Humans should design the risk boundaries within which agents operate.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Clear Ownership and Feedback-Driven Recovery
&lt;/h3&gt;

&lt;p&gt;Production ownership also needs to be explicit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Business Sign-off:&lt;/strong&gt; Business owners define goals, constraints, and acceptance criteria.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Platform Governance:&lt;/strong&gt; Platform owners define Policies, permissions, approvals, rollback mechanisms, and environment boundaries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Automated Execution:&lt;/strong&gt; Agents and the Harness supply Context, generate Plans, invoke Skills, execute through the Runtime, and return logs, validation results, and exceptions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Audit:&lt;/strong&gt; Reviewers and audit systems step in for high-risk, uncertain, or acceptance-conflicting decisions and maintain records of critical decisions.&lt;/p&gt;

&lt;p&gt;Human intervention should generally be reserved for three situations:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A high-risk action could modify critical data or business state.&lt;/li&gt;
&lt;li&gt;An exception cannot be safely recovered and the retry or rollback boundary is unclear.&lt;/li&gt;
&lt;li&gt;The result conflicts with the acceptance criteria and requires a final business decision.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The product organizations ultimately need is not a demo that can write SQL.&lt;/p&gt;

&lt;p&gt;It is a system where &lt;strong&gt;goals, permissions, execution, and outcomes can be managed as one accountable loop&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A truly Agentic system must also be able to learn from execution feedback.&lt;/p&gt;

&lt;p&gt;A practical Feedback Loop is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plan → Execute → Observe → Diagnose → Repair → Validate → Continue / Rollback / Escalate&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This loop is supported by &lt;strong&gt;Execution Memory&lt;/strong&gt;, which continuously captures context, execution history, and operational experience.&lt;/p&gt;

&lt;p&gt;Feedback can come from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Execution state&lt;/li&gt;
&lt;li&gt;Logs&lt;/li&gt;
&lt;li&gt;Metrics&lt;/li&gt;
&lt;li&gt;Data quality&lt;/li&gt;
&lt;li&gt;Lineage impact&lt;/li&gt;
&lt;li&gt;Human feedback&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent can then:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Automatically repair&lt;/strong&gt; configuration, parameters, SQL, or workflow issues when the root cause is clear.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Adjust the plan&lt;/strong&gt; by changing resources, sequencing, or execution strategies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stop or escalate&lt;/strong&gt; when the system cannot safely resolve the problem.&lt;/p&gt;

&lt;p&gt;The key to Agentic systems is therefore not simply autonomous execution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It is knowing what happened after execution.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. From Concept to Practice
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Case Study: A Complete Data Engineering Loop
&lt;/h3&gt;

&lt;p&gt;A meaningful Agentic data engineering demo should prove more than the ability to generate SQL.&lt;/p&gt;

&lt;p&gt;The real test is whether an agent can complete an end-to-end engineering workflow.&lt;/p&gt;

&lt;p&gt;Starting from a business goal, the agent should be able to:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Discover data → Create an integration task → Execute synchronization → Generate SQL transformations → Build a workflow DAG → Execute the workflow → Read logs and diagnose issues → Repair and retry → Present the result for human review&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this model:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent Planning&lt;/strong&gt; handles planning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Harness Control&lt;/strong&gt; manages permissions, policies, validation, and execution boundaries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Runtime Execution&lt;/strong&gt; performs deterministic engineering work.&lt;/p&gt;

&lt;p&gt;The value of the demo is therefore not proving that a model can generate SQL.&lt;/p&gt;

&lt;p&gt;It is proving that an agent can use a Harness to &lt;strong&gt;orchestrate multiple deterministic engineering systems into a complete delivery workflow&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two Practical Harness Implementations
&lt;/h2&gt;

&lt;p&gt;The theory becomes meaningful when it is reflected in real engineering systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apache SeaTunnel&lt;/strong&gt; and &lt;strong&gt;Apache DolphinScheduler&lt;/strong&gt; provide two complementary examples of how Harness principles can be applied in open source data engineering.&lt;/p&gt;

&lt;p&gt;SeaTunnel represents the &lt;strong&gt;data integration capability&lt;/strong&gt; side: how a foundational data integration engine can evolve into a Skill that agents can discover, invoke, validate, and recover.&lt;/p&gt;

&lt;p&gt;DolphinScheduler represents the &lt;strong&gt;engineering execution and orchestration&lt;/strong&gt; side: how agent-generated work can become a real, executable, observable, and reviewable engineering asset.&lt;/p&gt;

&lt;p&gt;One manages how data moves.&lt;/p&gt;

&lt;p&gt;The other manages how engineering workflows run reliably.&lt;/p&gt;

&lt;p&gt;Together, they illustrate how the &lt;strong&gt;L1 Runtime and L2 Harness&lt;/strong&gt; layers can work together in real-world data engineering.&lt;/p&gt;

&lt;h3&gt;
  
  
  Apache SeaTunnel CLI: Turning Data Integration into a Skill
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FJWRHA2w3_dGMNuOwIYLXOoMqzmzYsoPeLJ6dS50XWaOi62E2AeMkirhmXeIzjbaRTDyQAeHz5BcQwmJDGBFZedwxtA_tKRxyAtzWO7kE9WPFJJ7q0JxmFLwi4ALCXdCzLwUOvm4K3u9o6IMD16skVXlo2L-iLeoUVLkFP4OQj6MRr-HDEj3-RD0-CrqIXRXZ%3Fpurpose%3Dfullsize" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FJWRHA2w3_dGMNuOwIYLXOoMqzmzYsoPeLJ6dS50XWaOi62E2AeMkirhmXeIzjbaRTDyQAeHz5BcQwmJDGBFZedwxtA_tKRxyAtzWO7kE9WPFJJ7q0JxmFLwi4ALCXdCzLwUOvm4K3u9o6IMD16skVXlo2L-iLeoUVLkFP4OQj6MRr-HDEj3-RD0-CrqIXRXZ%3Fpurpose%3Dfullsize" alt="Image" width="1080" height="1811"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FQAFnSPr3qb0Uu61hb-9f6t7OsMqU30LzPD26wKO-Z7L0KZr2ELOK1A50-O-Bh2WTOmfUcXZwL2XcfTkygyI4-ihWmNwpt75sTJX-cAP8Un6NyIpMiABLBCVJrkk_-W1EcIdw8ocggyfRvFUNWJSN6ywmVa0yYwatSgeScgtMeF-yINHLpKNFVYhWf2SoW11K%3Fpurpose%3Dfullsize" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FQAFnSPr3qb0Uu61hb-9f6t7OsMqU30LzPD26wKO-Z7L0KZr2ELOK1A50-O-Bh2WTOmfUcXZwL2XcfTkygyI4-ihWmNwpt75sTJX-cAP8Un6NyIpMiABLBCVJrkk_-W1EcIdw8ocggyfRvFUNWJSN6ywmVa0yYwatSgeScgtMeF-yINHLpKNFVYhWf2SoW11K%3Fpurpose%3Dfullsize" alt="Image" width="1672" height="941"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Apache SeaTunnel CLI&lt;/strong&gt; provides capabilities such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data source discovery, including Source, Schema, Table, and Field&lt;/li&gt;
&lt;li&gt;Automatic SeaTunnel Job generation&lt;/li&gt;
&lt;li&gt;Batch synchronization and CDC execution&lt;/li&gt;
&lt;li&gt;Structured execution feedback, including status, logs, row counts, and errors&lt;/li&gt;
&lt;li&gt;Error-driven repair and retry&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An agent's intent can be translated into a set of SeaTunnel Skills:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DiscoverSource()&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;InspectSchema()&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CreateBatchSync()&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CreateCDC()&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ValidateMapping()&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RunSyncJob()&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Data Integration Runtime then handles the execution loop:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Execute → Logs → Repair → Retry&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is an important architectural shift.&lt;/p&gt;

&lt;p&gt;Instead of asking an agent to generate another temporary data integration script, SeaTunnel exposes reusable, structured capabilities that can be incorporated into an agent-driven engineering workflow.&lt;/p&gt;

&lt;p&gt;The future direction for SeaTunnel CLI includes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context-aware Mapping&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Expanding from Batch and CDC operations into a broader &lt;strong&gt;Data Flow Skill&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Self-healing Data Integration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI-ready Data Pipelines&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The long-term destination of SeaTunnel CLI is therefore not simply a better command-line interface.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It is a Data Integration Skill that agents can reliably discover and use.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Apache DolphinScheduler: Turning Generated Work into Engineering Order
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2F3FI4_ppKZjNe2WryiUBcMsUwMEwCgtRSGlaewCiy8hSSxY4BlBN7057bYvp2Vi4aLk-vRZMW35-jbxPXSjdIjrRUFakh--v9GKIGopxqalQw0sAWnsxvDneDtof9WW7TAEry0p8t2zFPxBxLHr6Ha8kEVCX6QdkaWu4pBemCcCMGoJ14Dz251WEeIP259WHR%3Fpurpose%3Dfullsize" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2F3FI4_ppKZjNe2WryiUBcMsUwMEwCgtRSGlaewCiy8hSSxY4BlBN7057bYvp2Vi4aLk-vRZMW35-jbxPXSjdIjrRUFakh--v9GKIGopxqalQw0sAWnsxvDneDtof9WW7TAEry0p8t2zFPxBxLHr6Ha8kEVCX6QdkaWu4pBemCcCMGoJ14Dz251WEeIP259WHR%3Fpurpose%3Dfullsize" alt="Image" width="1200" height="1203"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Apache DolphinScheduler provides another critical part of the Harness architecture.&lt;/p&gt;

&lt;p&gt;Its capabilities include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generating Workflow DAGs&lt;/li&gt;
&lt;li&gt;Establishing task dependencies automatically&lt;/li&gt;
&lt;li&gt;Creating real engineering assets such as Definitions, Instances, and Versions&lt;/li&gt;
&lt;li&gt;Executing and monitoring workflows through status, timing, retries, and logs&lt;/li&gt;
&lt;li&gt;Repairing failed workflows and rerunning nodes&lt;/li&gt;
&lt;li&gt;Providing a GUI for human review&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The shift can be summarized as:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Traditional Workflow&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Human defines every Task → Human configures dependencies → Scheduler executes DAG&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agentic Workflow&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Human defines business goal → Agent generates execution plan → Policy checks boundaries → DolphinScheduler executes Workflow → Agent repairs issues / Human reviews&lt;/p&gt;

&lt;p&gt;This is where orchestration becomes more than task scheduling.&lt;/p&gt;

&lt;p&gt;DolphinScheduler provides the engineering structure required to turn generated plans into persistent, observable, and manageable workflow assets.&lt;/p&gt;

&lt;p&gt;Its future direction can include:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Policy-aware Orchestration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Human Review Gates&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Self-healing Workflows&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-Agent Coordination&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Data Engineers Are Not Disappearing. Their Role Is Expanding.
&lt;/h3&gt;

&lt;p&gt;The rise of agents does not eliminate data engineering.&lt;/p&gt;

&lt;p&gt;It changes where data engineers create value.&lt;/p&gt;

&lt;p&gt;The role is evolving through five stages:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQL Writer&lt;/strong&gt;&lt;br&gt;
Focused on writing SQL to solve individual problems&lt;/p&gt;

&lt;p&gt;→ &lt;strong&gt;Pipeline Builder&lt;/strong&gt;&lt;br&gt;
Configuring data flows and pipelines&lt;/p&gt;

&lt;p&gt;→ &lt;strong&gt;Workflow Operator&lt;/strong&gt;&lt;br&gt;
Running and monitoring data workflows&lt;/p&gt;

&lt;p&gt;→ &lt;strong&gt;Platform Engineer&lt;/strong&gt;&lt;br&gt;
Building platforms and infrastructure&lt;/p&gt;

&lt;p&gt;→ &lt;strong&gt;Agent Capability Designer&lt;/strong&gt;&lt;br&gt;
Designing agent capabilities and the engineering systems behind them&lt;/p&gt;

&lt;p&gt;Traditional data engineering work includes writing SQL, Python, and Spark code, configuring connectors and ETL jobs, building DAGs, managing schedules, troubleshooting failures, and documenting data.&lt;/p&gt;

&lt;p&gt;The next generation of data engineers will increasingly focus on five types of design:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context Designer&lt;/strong&gt;&lt;br&gt;
Design the business and data context that allows agents to understand the enterprise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skill Designer&lt;/strong&gt;&lt;br&gt;
Create reusable data capabilities that agents can reliably invoke and combine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Policy Designer&lt;/strong&gt;&lt;br&gt;
Define rules and constraints that make agent actions controlled and trustworthy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Evaluation Designer&lt;/strong&gt;&lt;br&gt;
Design evaluation criteria and mechanisms that make agent performance measurable and sustainable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent Engineering Commander&lt;/strong&gt;&lt;br&gt;
Coordinate the broader engineering system and delivery process to amplify the capabilities of data teams.&lt;/p&gt;

&lt;p&gt;Six core capabilities will remain essential:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data modeling, business abstraction, architecture design, data governance, risk judgment, and accountability.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;These are not becoming less important.&lt;/p&gt;

&lt;p&gt;They are becoming the foundation for designing Context, Skills, and Policies that agents can actually use.&lt;/p&gt;

&lt;p&gt;The most valuable data engineers of the future will therefore not necessarily be the people who build the most pipelines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;They will be the people who know how to organize data engineering capabilities so that agents can use them safely and effectively.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Start with High-Frequency, Low-Risk Work
&lt;/h3&gt;

&lt;p&gt;Organizations should not begin Harness adoption by attempting to automate an entire data pipeline.&lt;/p&gt;

&lt;p&gt;The better approach is to start with &lt;strong&gt;high-frequency, low-risk tasks&lt;/strong&gt; where boundaries are clear and outcomes can be verified.&lt;/p&gt;

&lt;p&gt;Prove that the system can deliver reliably within a well-defined scope, then gradually expand its autonomy.&lt;/p&gt;

&lt;p&gt;Four categories are particularly suitable for the first phase:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data discovery, metadata enrichment, and schema understanding&lt;/strong&gt;&lt;br&gt;
These are generally read-heavy tasks with limited write risk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQL drafting, rule validation, and DAG assembly&lt;/strong&gt;&lt;br&gt;
These follow a "generate first, review second" model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Integration task creation, parameter orchestration, and environment checks&lt;/strong&gt;&lt;br&gt;
These are repetitive engineering tasks that can be standardized and templated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Log diagnosis, repair recommendations, and retry orchestration&lt;/strong&gt;&lt;br&gt;
These form operational loops that can be replayed and verified.&lt;/p&gt;

&lt;p&gt;By contrast, organizations should avoid fully autonomous execution for high-risk tasks such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deleting, overwriting, or bulk-modifying production data&lt;/li&gt;
&lt;li&gt;Changing critical metric definitions or restructuring cross-domain master data&lt;/li&gt;
&lt;li&gt;Schema changes or high-cost writes without approval and rollback mechanisms&lt;/li&gt;
&lt;li&gt;Complex cross-team workflows where ownership is unclear or results cannot be automatically verified&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A practical Harness adoption path can be divided into three stages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Collaborative Assistance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Agents discover metadata, generate drafts, and provide recommendations while humans review the results.&lt;/p&gt;

&lt;p&gt;The goal is to teach the system how to operate under verification.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Controlled Execution&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Harness-managed agents execute non-critical, reversible, and verifiable tasks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Governed Autonomy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Only after Policies, auditing, validation, and rollback mechanisms are mature should organizations expand the agent's autonomous authority.&lt;/p&gt;

&lt;p&gt;The principle is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start small. Prove reliability. Expand the boundary of autonomy.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: The Future Is Trusted Agentic Data Engineering
&lt;/h2&gt;

&lt;p&gt;The future of data engineering is not about removing humans from the loop.&lt;/p&gt;

&lt;p&gt;It is about changing what humans do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Humans define the goal.&lt;br&gt;
Agents execute the work.&lt;br&gt;
Harness Engineering governs the delivery.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The model can be summarized as:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Business Intent + Agent Intelligence + Enterprise Context + Engineering Skills + Policy &amp;amp; Control + Human Review = Trusted Agentic Data Engineering&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The fundamental shift is not simply about better prompts, larger context windows, or more capable models.&lt;/p&gt;

&lt;p&gt;It is about building an engineering system around those models that enables agents to operate continuously, safely, and accountably.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The agent generates.&lt;br&gt;
The Runtime executes.&lt;br&gt;
The Harness makes the outcome trustworthy.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That is the deeper transformation taking place in data engineering.&lt;/p&gt;

&lt;p&gt;The next generation of data platforms will not be defined simply by how many tools they integrate or how much code their AI can generate. They will be defined by how effectively they connect &lt;strong&gt;business intent, enterprise context, engineering capabilities, execution controls, verification, and human accountability&lt;/strong&gt; into one continuous delivery loop.&lt;/p&gt;

&lt;p&gt;And that may be the real architecture of data engineering in the Agentic AI era.&lt;/p&gt;

</description>
      <category>dataengineering</category>
      <category>harnessengineering</category>
      <category>agents</category>
      <category>ai</category>
    </item>
    <item>
      <title>🚀 Apache DolphinScheduler’s August updates bring stronger security, smarter missed-fire handling, performance gains, and critical bug fixes. Explore the changes! #DolphinScheduler #Apache #DataOps</title>
      <dc:creator>Chen Debra</dc:creator>
      <pubDate>Fri, 11 Sep 2026 09:13:12 +0000</pubDate>
      <link>https://dev.to/chen_debra_3060b21d12b1b0/apache-dolphinschedulers-august-updates-bring-stronger-security-smarter-missed-fire-handling-140h</link>
      <guid>https://dev.to/chen_debra_3060b21d12b1b0/apache-dolphinschedulers-august-updates-bring-stronger-security-smarter-missed-fire-handling-140h</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/chen_debra_3060b21d12b1b0/whats-new-in-apache-dolphinscheduler-this-august-stronger-security-smarter-scheduling-and-2fle" class="crayons-story__hidden-navigation-link"&gt;What’s New in Apache DolphinScheduler This August: Stronger Security, Smarter Scheduling, and Better Stability&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/chen_debra_3060b21d12b1b0" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1533306%2Fc0ea3a94-ba17-47c8-9304-4571fb1adaf9.png" alt="chen_debra_3060b21d12b1b0 profile" class="crayons-avatar__image" width="260" height="231"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/chen_debra_3060b21d12b1b0" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Chen Debra
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Chen Debra
                
                
              
              &lt;div id="story-author-preview-content-4630561" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/chen_debra_3060b21d12b1b0" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1533306%2Fc0ea3a94-ba17-47c8-9304-4571fb1adaf9.png" class="crayons-avatar__image" alt="" width="260" height="231"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Chen Debra&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/chen_debra_3060b21d12b1b0/whats-new-in-apache-dolphinscheduler-this-august-stronger-security-smarter-scheduling-and-2fle" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Sep 11&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/chen_debra_3060b21d12b1b0/whats-new-in-apache-dolphinscheduler-this-august-stronger-security-smarter-scheduling-and-2fle" id="article-link-4630561"&gt;
          What’s New in Apache DolphinScheduler This August: Stronger Security, Smarter Scheduling, and Better Stability
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/apachedolphinscheduler"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;apachedolphinscheduler&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/datascience"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;datascience&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/dataengineering"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;dataengineering&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/github"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;github&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/chen_debra_3060b21d12b1b0/whats-new-in-apache-dolphinscheduler-this-august-stronger-security-smarter-scheduling-and-2fle#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            10 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>What’s New in Apache DolphinScheduler This August: Stronger Security, Smarter Scheduling, and Better Stability</title>
      <dc:creator>Chen Debra</dc:creator>
      <pubDate>Fri, 11 Sep 2026 09:12:54 +0000</pubDate>
      <link>https://dev.to/chen_debra_3060b21d12b1b0/whats-new-in-apache-dolphinscheduler-this-august-stronger-security-smarter-scheduling-and-2fle</link>
      <guid>https://dev.to/chen_debra_3060b21d12b1b0/whats-new-in-apache-dolphinscheduler-this-august-stronger-security-smarter-scheduling-and-2fle</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1mfpxaxfxbxe0k48jdv2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1mfpxaxfxbxe0k48jdv2.jpg" width="800" height="647"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The Apache DolphinScheduler August Monthly Report is here! Over the past month, the community continued to move the project forward with new improvements across functionality, performance, stability, and ecosystem development. Let’s take a closer look at the updates that stood out in August. And as always, a huge thank-you to everyone who contributed code, shared feedback, and supported the community. Every contribution helps DolphinScheduler continue to evolve!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  📊 August at a Glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🚀 PRs Merged&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;23&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;👥 Contributors&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;➕ Lines Added&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+3,702&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;➖ Lines Deleted&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;-1,327&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔀 Net Lines Changed&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+2,375&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📁 Modules Touched&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;8&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📝 Documentation Files Touched&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧪 Test Files Touched&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;28&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  🏆 Top Contributors
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;GitHub Username&lt;/th&gt;
&lt;th&gt;Primary Contribution Area&lt;/th&gt;
&lt;th&gt;PRs&lt;/th&gt;
&lt;th&gt;+Lines&lt;/th&gt;
&lt;th&gt;-Lines&lt;/th&gt;
&lt;th&gt;Overall Score&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🥇&lt;/td&gt;
&lt;td&gt;@ruanwenjun&lt;/td&gt;
&lt;td&gt;Tests&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;1602&lt;/td&gt;
&lt;td&gt;1001&lt;/td&gt;
&lt;td&gt;88.59&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🥈&lt;/td&gt;
&lt;td&gt;@njnu-seafish&lt;/td&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;818&lt;/td&gt;
&lt;td&gt;288&lt;/td&gt;
&lt;td&gt;29.09&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🥉&lt;/td&gt;
&lt;td&gt;@SEPURI-SAI-KRISHNA&lt;/td&gt;
&lt;td&gt;Debugging &amp;amp; Fixes&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;229&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;18.77&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4.&lt;/td&gt;
&lt;td&gt;@kittimzhe&lt;/td&gt;
&lt;td&gt;Documentation&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;14.02&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5.&lt;/td&gt;
&lt;td&gt;@nikhiln64&lt;/td&gt;
&lt;td&gt;Debugging &amp;amp; Fixes&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;344&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;10.16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6.&lt;/td&gt;
&lt;td&gt;@hellodml&lt;/td&gt;
&lt;td&gt;Debugging &amp;amp; Fixes&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;136&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;9.45&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7.&lt;/td&gt;
&lt;td&gt;@zhang-arvin&lt;/td&gt;
&lt;td&gt;Debugging &amp;amp; Fixes&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;9.04&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8.&lt;/td&gt;
&lt;td&gt;@liang-wenjie&lt;/td&gt;
&lt;td&gt;Tests&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;542&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;7.82&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9.&lt;/td&gt;
&lt;td&gt;@hiSandog&lt;/td&gt;
&lt;td&gt;Tests&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;6.06&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10.&lt;/td&gt;
&lt;td&gt;@SbloodyS&lt;/td&gt;
&lt;td&gt;Architecture &amp;amp; Engineering&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;6.01&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  🔄 Code Changes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Breakdown by Category: Features / Performance / Bug Fixes / Architecture
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;PRs&lt;/th&gt;
&lt;th&gt;Share&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Features&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;26.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance Improvements&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;8.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bug Fixes&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;39.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Architecture Improvements&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;26.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Bug fixes accounted for the largest share of this month’s changes, at 39.1% (9 PRs).&lt;/strong&gt; Combined with 6 feature PRs and 2 performance improvements, the overall development rhythm was clear: &lt;strong&gt;stability first, with a steady stream of new capabilities.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📦 Key Modules
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Ranked by the number of PR touches.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;Module&lt;/th&gt;
&lt;th&gt;PR Touches&lt;/th&gt;
&lt;th&gt;Lines Added&lt;/th&gt;
&lt;th&gt;Lines Deleted&lt;/th&gt;
&lt;th&gt;Net Change&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dolphinscheduler-api&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;82&lt;/td&gt;
&lt;td&gt;+2,132&lt;/td&gt;
&lt;td&gt;-1,016&lt;/td&gt;
&lt;td&gt;+1,116&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dolphinscheduler-dao&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;+307&lt;/td&gt;
&lt;td&gt;-201&lt;/td&gt;
&lt;td&gt;+106&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docs&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;+68&lt;/td&gt;
&lt;td&gt;-48&lt;/td&gt;
&lt;td&gt;+20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dolphinscheduler-ui&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;+74&lt;/td&gt;
&lt;td&gt;-27&lt;/td&gt;
&lt;td&gt;+47&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dolphinscheduler-master&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;+374&lt;/td&gt;
&lt;td&gt;-12&lt;/td&gt;
&lt;td&gt;+362&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dolphinscheduler-common&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;+64&lt;/td&gt;
&lt;td&gt;-6&lt;/td&gt;
&lt;td&gt;+58&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dolphinscheduler-scheduler-plugin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;+229&lt;/td&gt;
&lt;td&gt;-4&lt;/td&gt;
&lt;td&gt;+225&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dolphinscheduler-task-plugin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;+305&lt;/td&gt;
&lt;td&gt;-2&lt;/td&gt;
&lt;td&gt;+303&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;misc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;+149&lt;/td&gt;
&lt;td&gt;-11&lt;/td&gt;
&lt;td&gt;+138&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;What the module breakdown tells us:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🏛️ &lt;strong&gt;API (15 touches)&lt;/strong&gt; was the clear focus of this month’s changes, with 15/23 PRs involving the API module. Most of the work centered on &lt;strong&gt;strengthening authorization and removing obsolete APIs&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;🏗️ &lt;strong&gt;DAO (7 touches)&lt;/strong&gt; mainly supported the API changes, including query optimization by excluding large text fields and updates to authorization query logic.&lt;/li&gt;
&lt;li&gt;🎨 &lt;strong&gt;UI (5 touches)&lt;/strong&gt; saw several touchpoints, but most were relatively small changes (+49 net lines), serving primarily as supporting updates.&lt;/li&gt;
&lt;li&gt;🔧 &lt;strong&gt;Master (4 touches)&lt;/strong&gt; focused on scheduling stability, including task retries and failure recovery.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🎯 8 Changes Users Will Notice Most
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;The following updates are ranked by their potential user impact and focus on the changes that matter most in real-world deployments.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  1. 🔐 Stronger Permissions and Security — 7 PRs
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Representative PR: &lt;a href="https://github.com/apache/dolphinscheduler/pull/18561" rel="noopener noreferrer"&gt;#18561&lt;/a&gt; — [Fix-18559][API] Align workflow mutations with project write permissions (#18561)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Author: @ruanwenjun&lt;/li&gt;
&lt;li&gt;Change size: +426 / -128 lines&lt;/li&gt;
&lt;li&gt;PRs in this category this month: 7&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Tenant isolation is now stricter, sensitive operations are better protected, and the overall security and compliance posture is stronger. Seven PRs this month focused on strengthening the permission model, covering project write-permission checks, cross-project authorization for sub-workflows, datasource and cluster authorization, Actuator endpoint authentication, user-list data masking, and authorization API optimization. These changes are particularly important for enterprise and multi-tenant deployments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key scenarios to verify:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ When creating, updating, or deleting a workflow, does the system strictly verify project-level &lt;strong&gt;write&lt;/strong&gt; permissions?&lt;/li&gt;
&lt;li&gt;✅ When referencing a sub-workflow, can the system verify that the user also has permission to access the &lt;strong&gt;referenced workflow&lt;/strong&gt;, preventing unauthorized access across projects?&lt;/li&gt;
&lt;li&gt;✅ When a task definition references a datasource, does the system verify that the current user has access to that datasource?&lt;/li&gt;
&lt;li&gt;✅ Do cluster query APIs enforce permission checks consistently?&lt;/li&gt;
&lt;li&gt;✅ Are user-list responses properly masked, with permissions appropriately restricted?&lt;/li&gt;
&lt;li&gt;✅ Do sensitive Actuator endpoints require authentication before they can be accessed?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Full list of related PRs:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;PR #&lt;/th&gt;
&lt;th&gt;Title&lt;/th&gt;
&lt;th&gt;Author&lt;/th&gt;
&lt;th&gt;Diff&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/apache/dolphinscheduler/pull/18561" rel="noopener noreferrer"&gt;#18561&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[Fix-18559][API] Align workflow mutations with project write permissions (#18561)&lt;/td&gt;
&lt;td&gt;@ruanwenjun&lt;/td&gt;
&lt;td&gt;+426/-128&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/apache/dolphinscheduler/pull/18597" rel="noopener noreferrer"&gt;#18597&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[Fix-18596][API] Enforce permission checks for sub-workflow references (#18597)&lt;/td&gt;
&lt;td&gt;@ruanwenjun&lt;/td&gt;
&lt;td&gt;+450/-0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/apache/dolphinscheduler/pull/18566" rel="noopener noreferrer"&gt;#18566&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[Fix-18565][API] Validate datasource access for task definitions (#18566)&lt;/td&gt;
&lt;td&gt;@ruanwenjun&lt;/td&gt;
&lt;td&gt;+342/-17&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/apache/dolphinscheduler/pull/18564" rel="noopener noreferrer"&gt;#18564&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[Improvement-18563][API] Refine datasource authorization list APIs (#18564)&lt;/td&gt;
&lt;td&gt;@ruanwenjun&lt;/td&gt;
&lt;td&gt;+102/-62&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/apache/dolphinscheduler/pull/18583" rel="noopener noreferrer"&gt;#18583&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[Fix-18582][Authentication] Align actuator endpoint matching (#18583)&lt;/td&gt;
&lt;td&gt;@ruanwenjun&lt;/td&gt;
&lt;td&gt;+149/-11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/apache/dolphinscheduler/pull/18560" rel="noopener noreferrer"&gt;#18560&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[Improvement-18558][API] Harden user list access and responses (#18560)&lt;/td&gt;
&lt;td&gt;@ruanwenjun&lt;/td&gt;
&lt;td&gt;+65/-28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/apache/dolphinscheduler/pull/18590" rel="noopener noreferrer"&gt;#18590&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[Improvement-18589][API] Align cluster query permissions (#18590)&lt;/td&gt;
&lt;td&gt;@ruanwenjun&lt;/td&gt;
&lt;td&gt;+59/-20&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  2. 🛡️ Stability and Bug Fixes — 4 PRs
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Representative PR: &lt;a href="https://github.com/apache/dolphinscheduler/pull/18573" rel="noopener noreferrer"&gt;#18573&lt;/a&gt; — [Fix-18570][Master] Detect wrapped CommandDuplicateHandleException in bootstrapError (#18570) (#18573)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Author: @hellodml&lt;/li&gt;
&lt;li&gt;Change size: +136 / -1 lines&lt;/li&gt;
&lt;li&gt;PRs in this category this month: 4&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; These fixes address abnormal workflow and task states, directly improving reliability in production. There were 9 bug-fix PRs in total this month, making bug fixing the largest category. The other bug-fix PRs are covered in dedicated sections for permissions, K8s, DataX, and documentation. The four core fixes below focus on issues outside those categories.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key scenarios to verify:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Failed task retries:&lt;/strong&gt; When recreating a failed task instance, is the runtime state correctly reset to prevent stale state from causing retry failures?&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Retry timing:&lt;/strong&gt; Is the retry scheduled based on &lt;code&gt;endTime + retryInterval&lt;/code&gt; rather than &lt;code&gt;startTime&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Master startup failures:&lt;/strong&gt; Can &lt;code&gt;bootstrapError&lt;/code&gt; correctly identify a &lt;code&gt;CommandDuplicateHandleException&lt;/code&gt; after it has been wrapped?&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Log messages:&lt;/strong&gt; Has the typo in &lt;code&gt;DataSourceServiceImpl&lt;/code&gt; log messages been corrected to avoid confusion during troubleshooting?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Full list of related PRs:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;PR #&lt;/th&gt;
&lt;th&gt;Title&lt;/th&gt;
&lt;th&gt;Author&lt;/th&gt;
&lt;th&gt;Diff&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/apache/dolphinscheduler/pull/18573" rel="noopener noreferrer"&gt;#18573&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[Fix-18570][Master] Detect wrapped CommandDuplicateHandleException in bootstrapError (#18570) (#18573)&lt;/td&gt;
&lt;td&gt;@hellodml&lt;/td&gt;
&lt;td&gt;+136/-1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/apache/dolphinscheduler/pull/18541" rel="noopener noreferrer"&gt;#18541&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[Fix-18540][Master] Reset the runtime state when recreating a failed task instance (#18541)&lt;/td&gt;
&lt;td&gt;@SEPURI-SAI-KRISHNA&lt;/td&gt;
&lt;td&gt;+132/-0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/apache/dolphinscheduler/pull/18539" rel="noopener noreferrer"&gt;#18539&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[Fix-18538][Master] Schedule task retry at endTime + retryInterval (#18539)&lt;/td&gt;
&lt;td&gt;@SEPURI-SAI-KRISHNA&lt;/td&gt;
&lt;td&gt;+97/-3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/apache/dolphinscheduler/pull/18581" rel="noopener noreferrer"&gt;#18581&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[Improvement-18580][api] Fix typo in DataSourceServiceImpl log message (#18581)&lt;/td&gt;
&lt;td&gt;@kittimzhe&lt;/td&gt;
&lt;td&gt;+1/-1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  3. ⏰ Scheduling Policies / Missed-Fire Handling — 1 PR
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Representative PR: &lt;a href="https://github.com/apache/dolphinscheduler/pull/18464" rel="noopener noreferrer"&gt;#18464&lt;/a&gt; — [DSIP-18454][Scheduler] Add schedule missed fire policy (#18464)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Author: @liang-wenjie&lt;/li&gt;
&lt;li&gt;Change size: +542 / -7 lines&lt;/li&gt;
&lt;li&gt;PRs in this category this month: 1&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Policy&lt;/th&gt;
&lt;th&gt;Behavior&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Skip&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Skip missed triggers and wait for the next cron trigger&lt;/td&gt;
&lt;td&gt;When missed runs should simply be skipped to avoid putting additional load on the system&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;FireOnceNow&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Trigger only once immediately and discard the remaining missed runs&lt;/td&gt;
&lt;td&gt;When only the most recent missed run needs to be executed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;FireAll&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Execute all missed triggers sequentially according to their original scheduled times&lt;/td&gt;
&lt;td&gt;Financial, reconciliation, and other scenarios where every scheduled run must be executed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; This is &lt;strong&gt;the biggest new feature of the month&lt;/strong&gt;. If the Master is down or the scheduling thread is blocked and cron triggers are missed, you can now configure one of three policies to determine how DolphinScheduler handles those missed triggers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key scenarios to verify:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ When creating or editing a schedule, does the UI display the &lt;strong&gt;Missed Fire Policy&lt;/strong&gt; dropdown?&lt;/li&gt;
&lt;li&gt;✅ Simulate a two-hour Master outage by stopping the Master process and starting it again. Do the different policies behave as expected?&lt;/li&gt;
&lt;li&gt;✅ Does the database upgrade script (&lt;code&gt;3.5.0_schema&lt;/code&gt;) execute correctly, and does the &lt;code&gt;t_ds_schedule&lt;/code&gt; table contain the newly added field?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. ⚡ Performance Improvements — 2 PRs
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Representative PR: &lt;a href="https://github.com/apache/dolphinscheduler/pull/18444" rel="noopener noreferrer"&gt;#18444&lt;/a&gt; — [Improvement-18443][API&amp;amp;DAO] Optimize WorkflowInstanceMapper to exclude large text fields from list queries (#18444)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Author: @njnu-seafish&lt;/li&gt;
&lt;li&gt;Change size: +790 / -268 lines&lt;/li&gt;
&lt;li&gt;PRs in this category this month: 2&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Workflow-instance and task-instance list queries no longer fetch large &lt;code&gt;TEXT&lt;/code&gt; fields such as &lt;code&gt;global_params&lt;/code&gt; and &lt;code&gt;process_instance_json&lt;/code&gt; unnecessarily. This can significantly improve &lt;strong&gt;list-page response times, database I/O, and memory usage&lt;/strong&gt;, with particularly noticeable benefits in large-scale deployments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key scenarios to verify:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Compare workflow-instance list-page response times before and after the optimization, especially with 1,000+ instances.&lt;/li&gt;
&lt;li&gt;✅ Open an individual workflow instance and verify that large fields such as global parameters are still displayed correctly. The detail API continues to retrieve them.&lt;/li&gt;
&lt;li&gt;✅ Verify that list-page export, search, and other functions continue to work as expected.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Full list of related PRs:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;PR #&lt;/th&gt;
&lt;th&gt;Title&lt;/th&gt;
&lt;th&gt;Author&lt;/th&gt;
&lt;th&gt;Diff&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/apache/dolphinscheduler/pull/18444" rel="noopener noreferrer"&gt;#18444&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[Improvement-18443][API&amp;amp;DAO] Optimize WorkflowInstanceMapper to exclude large text fields from list queries (#18444)&lt;/td&gt;
&lt;td&gt;@njnu-seafish&lt;/td&gt;
&lt;td&gt;+790/-268&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/apache/dolphinscheduler/pull/18442" rel="noopener noreferrer"&gt;#18442&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[Improvement-18441][API&amp;amp;DAO] Optimize TaskInstanceMapper to exclude large text fields from list queries (#18442)&lt;/td&gt;
&lt;td&gt;@njnu-seafish&lt;/td&gt;
&lt;td&gt;+17/-5&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  5. 🔌 Task Types and New Data Sources — 1 PR
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Representative PR: &lt;a href="https://github.com/apache/dolphinscheduler/pull/18434" rel="noopener noreferrer"&gt;#18434&lt;/a&gt; — [Fix-18389][DataX] Read job definition from attached resource file when custom json is empty (#18434)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Author: @nikhiln64&lt;/li&gt;
&lt;li&gt;Change size: +344 / -8 lines&lt;/li&gt;
&lt;li&gt;PRs in this category this month: 1&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Previously, DataX users had to paste JSON content into the custom JSON field in the UI and could not reuse files from the Resource Center. The new behavior allows DolphinScheduler to &lt;strong&gt;automatically read the job definition from a resource file when the custom JSON field is empty&lt;/strong&gt;, bringing the experience in line with how SQL tasks load SQL from resource files.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. 🧹 API Cleanup and Engineering Improvements — 5 PRs
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Representative PR: &lt;a href="https://github.com/apache/dolphinscheduler/pull/18569" rel="noopener noreferrer"&gt;#18569&lt;/a&gt; — [Improvement-18568][API] Remove obsolete task update-with-upstream API (#18569)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Author: @ruanwenjun&lt;/li&gt;
&lt;li&gt;Change size: +2 / -507 lines&lt;/li&gt;
&lt;li&gt;PRs in this category this month: 5&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; This month, the community removed three groups of obsolete APIs covering cluster query-by-code, task update-with-upstream, and dynamic sub-workflow functionality, while also updating &lt;code&gt;incompatible.md&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;users upgrading from an earlier version&lt;/strong&gt;, this is an important area to review. If your organization has a custom frontend or automation scripts that rely on any of these legacy APIs, make sure to update them before upgrading.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full list of related PRs:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;PR #&lt;/th&gt;
&lt;th&gt;Title&lt;/th&gt;
&lt;th&gt;Author&lt;/th&gt;
&lt;th&gt;Diff&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/apache/dolphinscheduler/pull/18569" rel="noopener noreferrer"&gt;#18569&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[Improvement-18568][API] Remove obsolete task update-with-upstream API (#18569)&lt;/td&gt;
&lt;td&gt;@ruanwenjun&lt;/td&gt;
&lt;td&gt;+2/-507&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/apache/dolphinscheduler/pull/18557" rel="noopener noreferrer"&gt;#18557&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[Improvement-18556][API] Remove obsolete dynamic sub-workflow API (#18557)&lt;/td&gt;
&lt;td&gt;@ruanwenjun&lt;/td&gt;
&lt;td&gt;+2/-138&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/apache/dolphinscheduler/pull/18584" rel="noopener noreferrer"&gt;#18584&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[Chore][API] Remove obsolete cluster query-by-code API (#18584)&lt;/td&gt;
&lt;td&gt;@ruanwenjun&lt;/td&gt;
&lt;td&gt;+5/-90&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/apache/dolphinscheduler/pull/18408" rel="noopener noreferrer"&gt;#18408&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[Chore][Common] Handle parentless paths in FileUtils (#18408)&lt;/td&gt;
&lt;td&gt;@hiSandog&lt;/td&gt;
&lt;td&gt;+17/-1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/apache/dolphinscheduler/pull/18599" rel="noopener noreferrer"&gt;#18599&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[Chore] Remove unused code- #18599 (#18599)&lt;/td&gt;
&lt;td&gt;@SbloodyS&lt;/td&gt;
&lt;td&gt;+0/-11&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  7. ☸️ K8s and Cloud-Native Deployment — 1 PR
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Representative PR: &lt;a href="https://github.com/apache/dolphinscheduler/pull/18574" rel="noopener noreferrer"&gt;#18574&lt;/a&gt; — [Fix-17883] Fix K8s Alert HTTP test sending failed by using IP for non-StatefulSet pods (#17883) (#18574)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Author: @zhang-arvin&lt;/li&gt;
&lt;li&gt;Change size: +10 / -3 lines&lt;/li&gt;
&lt;li&gt;PRs in this category this month: 1&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; For non-StatefulSet Pods in K8s, such as Pods managed by a Deployment, HTTP alert-instance testing could previously fail because the endpoint was resolved using the hostname. The fix switches to IP-based addressing, improving the reliability of alert channels in K8s deployments.&lt;/p&gt;

&lt;h3&gt;
  
  
  8. 📚 Documentation and Example Improvements — 2 PRs
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Representative PR: &lt;a href="https://github.com/apache/dolphinscheduler/pull/18478" rel="noopener noreferrer"&gt;#18478&lt;/a&gt; — [Doc-18474][Upgrade] Fix zh/en incompatible upgrade docs out of sync (#18478)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Author: @njnu-seafish&lt;/li&gt;
&lt;li&gt;Change size: +11 / -15 lines&lt;/li&gt;
&lt;li&gt;PRs in this category this month: 2&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Broken links in the datasource and configuration documentation were fixed, while the Chinese and English upgrade-incompatibility documentation was brought back into alignment. These updates help reduce confusion and prevent issues caused by outdated or inconsistent documentation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full list of related PRs:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;PR #&lt;/th&gt;
&lt;th&gt;Title&lt;/th&gt;
&lt;th&gt;Author&lt;/th&gt;
&lt;th&gt;Diff&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/apache/dolphinscheduler/pull/18478" rel="noopener noreferrer"&gt;#18478&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[Doc-18474][Upgrade] Fix zh/en incompatible upgrade docs out of sync (#18478)&lt;/td&gt;
&lt;td&gt;@njnu-seafish&lt;/td&gt;
&lt;td&gt;+11/-15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/apache/dolphinscheduler/pull/18578" rel="noopener noreferrer"&gt;#18578&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;[Doc-18579] Fix malformed links in datasource and configuration docs (#18578)&lt;/td&gt;
&lt;td&gt;@kittimzhe&lt;/td&gt;
&lt;td&gt;+3/-3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  ⚠️ Upgrade and Validation Recommendations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Risk Assessment
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Overall Risk Level: 🟠 Medium-High&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Risk Area&lt;/th&gt;
&lt;th&gt;Assessment&lt;/th&gt;
&lt;th&gt;Details&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Core Module Changes&lt;/td&gt;
&lt;td&gt;⚠️ Yes&lt;/td&gt;
&lt;td&gt;The API module was touched by 15/23 PRs; permission-related APIs require particular attention during regression testing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Number of Bug Fixes&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;A relatively high number of bug fixes; pay close attention to task retry and failure-recovery scenarios&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Permission/Security Changes&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;⚠️ Significant changes to the permission model require comprehensive authorization testing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K8s/Deployment Changes&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;⚠️ Deployment-related logic was changed; Helm/Docker deployments should be verified&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UI Changes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;⚠️ Frontend changes require smoke testing of key pages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database Schema&lt;/td&gt;
&lt;td&gt;⚠️ Yes&lt;/td&gt;
&lt;td&gt;DSIP-18464 adds new DDL; verify that the upgrade script is executed correctly&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Before You Upgrade
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;📦 Back up the database:&lt;/strong&gt; Before upgrading, create a full backup of the DolphinScheduler metadata database using &lt;code&gt;mysqldump&lt;/code&gt; or &lt;code&gt;pg_dump&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;📋 Check the DDL scripts:&lt;/strong&gt; Verify that the new scripts under &lt;code&gt;dolphinscheduler-dao/src/main/resources/sql/upgrade/3.5.0_schema/&lt;/code&gt; are included in the upgrade process.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;📝 Review incompatible changes:&lt;/strong&gt; Pay particular attention to the four groups of API removals marked this month in &lt;a href="https://github.com/apache/dolphinscheduler/blob/dev/docs/docs/en/guide/upgrade/incompatible.md" rel="noopener noreferrer"&gt;&lt;code&gt;docs/docs/en/guide/upgrade/incompatible.md&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;🧪 Check custom integrations:&lt;/strong&gt; If you use OpenAPI, search your codebase to make sure none of these three removed APIs are still being called:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cluster/query-by-code&lt;/code&gt; (PR #18584)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;task/update-with-upstream&lt;/code&gt; (PR #18569)&lt;/li&gt;
&lt;li&gt;Dynamic sub-workflow APIs (PR #18557)&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;💾 Back up configuration files:&lt;/strong&gt; Back up all configuration files under the &lt;code&gt;conf/&lt;/code&gt; directory.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Common Issues and Quick Checks
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Symptom&lt;/th&gt;
&lt;th&gt;Possible Cause&lt;/th&gt;
&lt;th&gt;What to Check&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;A sudden 403 when saving a workflow&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PR #18561 introduced stricter permission checks&lt;/td&gt;
&lt;td&gt;Verify that the current user has write permission for the target project and that the upstream workflow referenced by the sub-workflow is also within the user's authorized scope&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;A sub-workflow cannot be referenced&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PR #18597 added cross-project permission checks&lt;/td&gt;
&lt;td&gt;Confirm that the user has the required permissions for the project containing the sub-workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Binding a datasource returns 403&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PR #18566 added datasource authorization checks&lt;/td&gt;
&lt;td&gt;Grant the user access to the corresponding datasource under &lt;strong&gt;Datasource Authorization&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HTTP alert testing fails in a K8s deployment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Logic changed by PR #18574&lt;/td&gt;
&lt;td&gt;Check Pod network policies and verify in the logs whether the connection is being made using a hostname or an IP address&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Missed-fire behavior is not what you expected after upgrading&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;DSIP-18464 defaults to the &lt;strong&gt;Skip&lt;/strong&gt; policy&lt;/td&gt;
&lt;td&gt;Check the value of &lt;code&gt;missed_fire_policy&lt;/code&gt;; switch the policy manually if missed runs need to be executed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Task retries trigger immediately instead of respecting the interval&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PR #18539 changed the calculation to use &lt;code&gt;endTime&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Verify that retry time is calculated as &lt;strong&gt;task end time + retryInterval&lt;/strong&gt;, rather than start time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Workflow-instance lists load slowly or return errors after upgrading&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;VO fields no longer match after large-field exclusions&lt;/td&gt;
&lt;td&gt;Check whether the frontend version was upgraded at the same time, or roll back temporarily to isolate the changes from #18444/#18442&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  🙏 Thank You to Our Contributors
&lt;/h2&gt;

&lt;p&gt;A huge thank-you to the &lt;strong&gt;10 contributors&lt;/strong&gt; who contributed code to Apache DolphinScheduler in August 2026:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;@ruanwenjun, @njnu-seafish, @SEPURI-SAI-KRISHNA, @kittimzhe, @nikhiln64, @hellodml, @zhang-arvin, @liang-wenjie, @hiSandog, and @SbloodyS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every PR helps DolphinScheduler continue to evolve in &lt;strong&gt;stability, usability, and ecosystem growth&lt;/strong&gt;. 💪&lt;/p&gt;

</description>
      <category>apachedolphinscheduler</category>
      <category>datascience</category>
      <category>dataengineering</category>
      <category>github</category>
    </item>
    <item>
      <title>🚨 Empty Host, failed task? A DolphinScheduler incident reveals how memory protection can stop task dispatch. Learn how to trace the root cause and fix it. #DolphinScheduler #Apache #DataOps</title>
      <dc:creator>Chen Debra</dc:creator>
      <pubDate>Fri, 11 Sep 2026 09:00:32 +0000</pubDate>
      <link>https://dev.to/chen_debra_3060b21d12b1b0/empty-host-failed-task-a-dolphinscheduler-incident-reveals-how-memory-protection-can-stop-task-423</link>
      <guid>https://dev.to/chen_debra_3060b21d12b1b0/empty-host-failed-task-a-dolphinscheduler-incident-reveals-how-memory-protection-can-stop-task-423</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/chen_debra_3060b21d12b1b0/when-a-dolphinscheduler-task-has-no-host-how-memory-protection-can-halt-scheduling-1l1c" class="crayons-story__hidden-navigation-link"&gt;When a DolphinScheduler Task Has No Host: How Memory Protection Can Halt Scheduling&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/chen_debra_3060b21d12b1b0" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1533306%2Fc0ea3a94-ba17-47c8-9304-4571fb1adaf9.png" alt="chen_debra_3060b21d12b1b0 profile" class="crayons-avatar__image" width="260" height="231"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/chen_debra_3060b21d12b1b0" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Chen Debra
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Chen Debra
                
                
              
              &lt;div id="story-author-preview-content-4630456" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/chen_debra_3060b21d12b1b0" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1533306%2Fc0ea3a94-ba17-47c8-9304-4571fb1adaf9.png" class="crayons-avatar__image" alt="" width="260" height="231"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Chen Debra&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/chen_debra_3060b21d12b1b0/when-a-dolphinscheduler-task-has-no-host-how-memory-protection-can-halt-scheduling-1l1c" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Sep 11&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/chen_debra_3060b21d12b1b0/when-a-dolphinscheduler-task-has-no-host-how-memory-protection-can-halt-scheduling-1l1c" id="article-link-4630456"&gt;
          When a DolphinScheduler Task Has No Host: How Memory Protection Can Halt Scheduling
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/apachedolphinscheduler"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;apachedolphinscheduler&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/datascience"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;datascience&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/dataengineering"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;dataengineering&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/chen_debra_3060b21d12b1b0/when-a-dolphinscheduler-task-has-no-host-how-memory-protection-can-halt-scheduling-1l1c#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            6 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>When a DolphinScheduler Task Has No Host: How Memory Protection Can Halt Scheduling</title>
      <dc:creator>Chen Debra</dc:creator>
      <pubDate>Fri, 11 Sep 2026 09:00:13 +0000</pubDate>
      <link>https://dev.to/chen_debra_3060b21d12b1b0/when-a-dolphinscheduler-task-has-no-host-how-memory-protection-can-halt-scheduling-1l1c</link>
      <guid>https://dev.to/chen_debra_3060b21d12b1b0/when-a-dolphinscheduler-task-has-no-host-how-memory-protection-can-halt-scheduling-1l1c</guid>
      <description>&lt;h2&gt;
  
  
  1. What Happened?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.1 Alert
&lt;/h3&gt;

&lt;p&gt;At around 4 a.m., a series of scheduling failure alerts started coming in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;scheduler failed
projectName: 数仓平台
processName: 【ods】同步MySQL「每小时」
taskName: OPTIMIZE table_records
taskType: SQL
taskState: FAILURE
taskEndTime: 2026-03-13 04:34:01
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  1.2 What We Saw in the UI
&lt;/h3&gt;

&lt;p&gt;After logging in to DolphinScheduler and checking the task instances, two things immediately stood out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Task status: &lt;strong&gt;Failed&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Task instance Host: &lt;strong&gt;Empty&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fot8k9oziuqymg5rm28tp.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fot8k9oziuqymg5rm28tp.jpg" width="800" height="731"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fufg7jeg7x0oapjo1x7yj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fufg7jeg7x0oapjo1x7yj.jpg" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, what does an empty Host field actually mean?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No Worker node was willing to take the task.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The task never even got the chance to execute. It was rejected before it could be dispatched to a Worker.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Troubleshooting
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 Check System Resources First
&lt;/h3&gt;

&lt;p&gt;The first question was straightforward: &lt;strong&gt;Was the machine running out of resources?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CPU usage was low, so CPU was not the bottleneck.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fisxen30s5b16a32ve8ly.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fisxen30s5b16a32ve8ly.jpg" width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Memory usage, however, was a different story.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4ez78xfy0p1w902v180l.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4ez78xfy0p1w902v180l.jpg" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The immediate priority in production is to stop the bleeding, so the Worker was restarted first:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker restart dolphinscheduler-worker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After the restart, the task was rerun successfully and the business recovered.&lt;/p&gt;

&lt;p&gt;But a restart only restores service. It does not explain &lt;strong&gt;why the problem happened in the first place&lt;/strong&gt;. So the investigation continued.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2 Check the Worker Logs
&lt;/h3&gt;

&lt;p&gt;Next, we searched the Worker logs for memory-related warnings and errors:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"memory&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;error&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;exception"&lt;/span&gt; /data/dolphin/worker/logs/dolphinscheduler-worker.xxx.log | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-20&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The logs told us exactly where to look:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[WARN] current cpu load average 0.03 is higher than 1.0
       or available memory 0.295 is lower than 0.3
[WARN] current cpu load average 0.03 is higher than 1.0
       or available memory 0.294 is lower than 0.3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Worker heartbeat runs a resource check every 10 seconds. The available memory ratio had repeatedly dropped to &lt;strong&gt;29.5%&lt;/strong&gt;, below the configured &lt;strong&gt;30% threshold&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3 Check the Master Logs
&lt;/h3&gt;

&lt;p&gt;The Master logs showed a similar picture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"overload&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;memory&lt;/span&gt;&lt;span class="se"&gt;\|&lt;/span&gt;&lt;span class="s2"&gt;dispatch"&lt;/span&gt; /data/dolphin/master/logs/dolphinscheduler-master.xxx.log | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-20&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[WARN] Current available memory percentage 0.297 is too low, reserved.memory=0.3
[WARN] The current server is overload, cannot consumes commands.
[WARN] worker 10.0.1.100:1234 current cpu load average 0.0 is too high
       or available memory 4.57G is too low
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Master-side behavior was now clear:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Master itself did not have enough available memory and stopped consuming scheduling commands.&lt;/li&gt;
&lt;li&gt;Workers were considered overloaded, so the Master stopped dispatching tasks to them.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In other words, the task was not failing because the SQL itself could not run. &lt;strong&gt;It was never successfully dispatched to a Worker in the first place.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.4 Confirm the Memory Situation
&lt;/h3&gt;

&lt;p&gt;We then checked the actual memory usage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;free &lt;span class="nt"&gt;-h&lt;/span&gt;
               total   used    free    shared  buff/cache  available
Mem:           15Gi    8.9Gi   482Mi   1.1Gi   5.9Gi       4.9Gi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Available memory was 4.9 GiB out of 15 GiB, or roughly &lt;strong&gt;32%&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That was already dangerously close to the 30% threshold. Once the overnight batch workload caused even a small increase in memory usage, the available memory ratio could easily fall below the protection line.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.5 Find Out What Was Consuming the Memory
&lt;/h3&gt;

&lt;p&gt;The next step was to identify the biggest memory consumers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ps &lt;span class="nt"&gt;-aux&lt;/span&gt; &lt;span class="nt"&gt;--sort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;-%mem | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; 11
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result was straightforward:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Master 4G + Worker 4G + API 1G + Alert 1G + Flink + MySQL + ZooKeeper&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Everything was competing for memory on a machine with only 15 GiB of RAM.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Root Cause
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3.1 What Actually Happened?
&lt;/h3&gt;

&lt;p&gt;DolphinScheduler has a built-in memory protection mechanism:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Threshold&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Available Memory Ratio&lt;/td&gt;
&lt;td&gt;&amp;lt; &lt;code&gt;reserved.memory&lt;/code&gt; (default: &lt;strong&gt;0.3&lt;/strong&gt;, i.e. 30%)&lt;/td&gt;
&lt;td&gt;Master stops consuming commands; Worker rejects tasks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CPU Load&lt;/td&gt;
&lt;td&gt;&amp;gt; &lt;code&gt;max.cpu.load.avg&lt;/code&gt; (default: &lt;strong&gt;1.0&lt;/strong&gt;)&lt;/td&gt;
&lt;td&gt;Same&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;When the available memory ratio drops below &lt;strong&gt;30%&lt;/strong&gt;, the protection mechanism kicks in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Master: "There isn't enough memory, so I won't consume scheduling commands."
Worker: "Memory is too low. Don't send me any more tasks."
Task instance: Host = empty
Result: Task fails
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This explains the seemingly strange combination we saw in the UI: &lt;strong&gt;a failed task with an empty Host field&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The task was blocked during scheduling and dispatching because both the Master and Worker sides detected insufficient available memory.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.2 Why Was Memory Running Low?
&lt;/h3&gt;

&lt;p&gt;The machine had only 15 GiB of memory, while the four DolphinScheduler components alone were configured with a combined &lt;strong&gt;10 GiB of JVM heap&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Heap Configuration&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Master&lt;/td&gt;
&lt;td&gt;&lt;code&gt;-Xmx4g&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Responsible for scheduling decisions; 4G is far more than it needs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Worker&lt;/td&gt;
&lt;td&gt;&lt;code&gt;-Xmx4g&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Tasks are executed in forked processes, so the Worker itself does not need 4G&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API&lt;/td&gt;
&lt;td&gt;&lt;code&gt;-Xmx1g&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Reasonable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alert&lt;/td&gt;
&lt;td&gt;&lt;code&gt;-Xmx1g&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Reasonable&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The default 4 GiB heap settings for the Master and Worker were simply too aggressive for this machine.&lt;/p&gt;

&lt;p&gt;In practice, their actual RSS usage was only around 1–2 GiB each, meaning a significant amount of memory was reserved without being actively used.&lt;/p&gt;

&lt;p&gt;On a resource-constrained host, those JVM heap reservations left too little headroom for the rest of the stack and made the system much more likely to trigger DolphinScheduler's memory protection mechanism.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. How to Fix It
&lt;/h2&gt;

&lt;p&gt;There are three possible approaches, listed in recommended order.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 1: Reduce the Master and Worker JVM Heap Size — Recommended
&lt;/h3&gt;

&lt;p&gt;Add the following settings to the &lt;code&gt;environment&lt;/code&gt; section of &lt;code&gt;docker-compose.yml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;dolphinscheduler-master&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;JAVA_OPTS=-Xms2g -Xmx2g -Xmn1g&lt;/span&gt;

&lt;span class="na"&gt;dolphinscheduler-worker&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;JAVA_OPTS=-Xms2g -Xmx2g -Xmn1g&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the preferred approach because it addresses the underlying resource allocation issue instead of simply weakening the protection mechanism.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 2: Lower the Memory Protection Threshold
&lt;/h3&gt;

&lt;p&gt;The default &lt;code&gt;reserved.memory&lt;/code&gt; is &lt;code&gt;0.3&lt;/code&gt;, meaning DolphinScheduler reserves 30% of available memory as a safety margin.&lt;/p&gt;

&lt;p&gt;It can be lowered to 10%:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;dolphinscheduler-master&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;MASTER_RESERVED_MEMORY=0.1&lt;/span&gt;

&lt;span class="na"&gt;dolphinscheduler-worker&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;WORKER_RESERVED_MEMORY=0.1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However, this is more of a workaround than a fundamental fix.&lt;/p&gt;

&lt;p&gt;If the machine is genuinely short on memory, lowering the threshold does not create more memory. It simply allows the system to continue running under tighter resource conditions, which increases the risk of an &lt;strong&gt;OOM&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 3: Set &lt;code&gt;mem_limit&lt;/code&gt; for Containers
&lt;/h3&gt;

&lt;p&gt;You can also place explicit memory limits on individual containers to prevent one service from consuming too much memory and starving other components:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;dolphinscheduler-master&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;mem_limit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;3g&lt;/span&gt;

&lt;span class="na"&gt;dolphinscheduler-worker&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;mem_limit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;3g&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This provides stronger resource isolation between containers, but it should be configured carefully according to the actual workload and memory requirements of each component.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Verification
&lt;/h2&gt;

&lt;p&gt;In this case, we chose &lt;strong&gt;Option 1&lt;/strong&gt; and reduced the Master and Worker heap size from 4 GiB to 2 GiB.&lt;/p&gt;

&lt;p&gt;After restarting the services, we verified the results.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.1 Memory Availability Improved
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;free &lt;span class="nt"&gt;-h&lt;/span&gt;
               total   used    free    shared  buff/cache  available
Mem:           15Gi    6.8Gi   2.6Gi   1.1Gi   5.9Gi       7.1Gi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Available memory increased from &lt;strong&gt;4.9 GiB to 7.1 GiB&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The available-memory ratio increased from approximately &lt;strong&gt;32% to 47%&lt;/strong&gt;, giving the system a much larger safety margin above the 30% protection threshold.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.2 Check Actual Container Memory Usage
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;docker stats &lt;span class="nt"&gt;--no-stream&lt;/span&gt; dolphinscheduler-master dolphinscheduler-worker
CONTAINER   NAME                     MEM USAGE / LIMIT    MEM %
aec302...   dolphinscheduler-master  1.098GiB / 15.34GiB  7.16%
cd6df5...   dolphinscheduler-worker  1.049GiB / 15.34GiB  6.84%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The numbers looked much healthier:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Master:&lt;/strong&gt; 1.1 GiB actual memory usage, with a 2 GiB heap limit&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Worker:&lt;/strong&gt; 1.05 GiB actual memory usage, with a 2 GiB heap limit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both components had sufficient headroom for normal workloads.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.3 Verify the JVM Parameters
&lt;/h3&gt;

&lt;p&gt;Finally, we confirmed that the new JVM parameters were actually applied:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;docker &lt;span class="nb"&gt;exec &lt;/span&gt;dolphinscheduler-master ps &lt;span class="nt"&gt;-ef&lt;/span&gt; | &lt;span class="nb"&gt;grep &lt;/span&gt;java | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-1&lt;/span&gt;
/opt/java/openjdk/bin/java &lt;span class="nt"&gt;-Xms2g&lt;/span&gt; &lt;span class="nt"&gt;-Xmx2g&lt;/span&gt; &lt;span class="nt"&gt;-Xmn1g&lt;/span&gt; ... MasterServer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The parameters were in effect, and the logs were back to normal. The previous memory warnings were no longer appearing.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Takeaways
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Before Optimization&lt;/th&gt;
&lt;th&gt;After Optimization&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Master/Worker Heap&lt;/td&gt;
&lt;td&gt;4G each&lt;/td&gt;
&lt;td&gt;2G each&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Available System Memory&lt;/td&gt;
&lt;td&gt;4.9G (32%)&lt;/td&gt;
&lt;td&gt;7.1G (47%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory Protection Threshold&lt;/td&gt;
&lt;td&gt;Frequently Triggered&lt;/td&gt;
&lt;td&gt;Well Above the Threshold&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scheduling Status&lt;/td&gt;
&lt;td&gt;Nighttime Downtime&lt;/td&gt;
&lt;td&gt;Operating Normally&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;There are four practical lessons from this incident:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;DolphinScheduler's default JVM heap settings may be too large for resource-constrained machines.&lt;/strong&gt; Always size the heap according to the available hardware and actual workload.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;reserved.memory=0.3&lt;/code&gt; is a double-edged sword.&lt;/strong&gt; It protects the system from running completely out of memory, but it can also prevent tasks from being dispatched when available memory falls below the safety threshold.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;An empty Host field does not necessarily mean a network problem.&lt;/strong&gt; In this case, it was a sign that the task could not be dispatched because DolphinScheduler's memory protection mechanism rejected the overloaded nodes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;In production, restore service first, then investigate, and finally fix the underlying issue.&lt;/strong&gt; Restart to stop the immediate impact, inspect the logs to identify the root cause, and adjust the resource configuration to prevent the problem from happening again.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>apachedolphinscheduler</category>
      <category>datascience</category>
      <category>dataengineering</category>
    </item>
    <item>
      <title>🚀 This September, the Apache DolphinScheduler Meetup is back! 

Build an enterprise data warehouse with Apache DolphinScheduler! Join us Sept 15 at 8 PM (UTC+8).</title>
      <dc:creator>Chen Debra</dc:creator>
      <pubDate>Thu, 03 Sep 2026 09:43:05 +0000</pubDate>
      <link>https://dev.to/chen_debra_3060b21d12b1b0/this-september-the-apache-dolphinscheduler-meetup-is-back-build-an-enterprise-data-55j9</link>
      <guid>https://dev.to/chen_debra_3060b21d12b1b0/this-september-the-apache-dolphinscheduler-meetup-is-back-build-an-enterprise-data-55j9</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/chen_debra_3060b21d12b1b0/more-than-workflow-scheduling-how-apache-dolphinscheduler-powers-enterprise-data-warehouse-projects-17k4" class="crayons-story__hidden-navigation-link"&gt;More Than Workflow Scheduling: How Apache DolphinScheduler Powers Enterprise Data Warehouse Projects&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/chen_debra_3060b21d12b1b0" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1533306%2Fc0ea3a94-ba17-47c8-9304-4571fb1adaf9.png" alt="chen_debra_3060b21d12b1b0 profile" class="crayons-avatar__image" width="260" height="231"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/chen_debra_3060b21d12b1b0" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Chen Debra
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Chen Debra
                
                
              
              &lt;div id="story-author-preview-content-4563398" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/chen_debra_3060b21d12b1b0" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1533306%2Fc0ea3a94-ba17-47c8-9304-4571fb1adaf9.png" class="crayons-avatar__image" alt="" width="260" height="231"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Chen Debra&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/chen_debra_3060b21d12b1b0/more-than-workflow-scheduling-how-apache-dolphinscheduler-powers-enterprise-data-warehouse-projects-17k4" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Sep 3&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/chen_debra_3060b21d12b1b0/more-than-workflow-scheduling-how-apache-dolphinscheduler-powers-enterprise-data-warehouse-projects-17k4" id="article-link-4563398"&gt;
          More Than Workflow Scheduling: How Apache DolphinScheduler Powers Enterprise Data Warehouse Projects
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/apachedolphinscheduler"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;apachedolphinscheduler&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/datawarehouse"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;datawarehouse&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/datascience"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;datascience&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/chen_debra_3060b21d12b1b0/more-than-workflow-scheduling-how-apache-dolphinscheduler-powers-enterprise-data-warehouse-projects-17k4#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>More Than Workflow Scheduling: How Apache DolphinScheduler Powers Enterprise Data Warehouse Projects</title>
      <dc:creator>Chen Debra</dc:creator>
      <pubDate>Thu, 03 Sep 2026 08:09:27 +0000</pubDate>
      <link>https://dev.to/chen_debra_3060b21d12b1b0/more-than-workflow-scheduling-how-apache-dolphinscheduler-powers-enterprise-data-warehouse-projects-17k4</link>
      <guid>https://dev.to/chen_debra_3060b21d12b1b0/more-than-workflow-scheduling-how-apache-dolphinscheduler-powers-enterprise-data-warehouse-projects-17k4</guid>
      <description>&lt;p&gt;Building a data warehouse is about far more than simply storing data.&lt;/p&gt;

&lt;p&gt;As enterprise data volumes continue to grow and business scenarios become increasingly complex, traditional big data architectures are facing mounting challenges around latency, performance, resource utilization, and operational costs. At the same time, the entire data lifecycle—from business requirements and data synchronization to data cleansing, processing, production, analytics, and operations—still involves a wide range of complex engineering challenges.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How can open source technologies help enterprises build a modern data warehouse that is easy to use, highly reliable, and built to scale?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This September, Apache DolphinScheduler Meetup is back!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1ndwda9pty2tdl5nm4t5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1ndwda9pty2tdl5nm4t5.png" alt="英文海报" width="800" height="1687"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This edition of the community meetup features &lt;strong&gt;Zan Liu, Data Analytics Engineer and Senior Big Data Architect&lt;/strong&gt;, who will share &lt;strong&gt;“Building an Enterprise-Grade Data Warehouse with Apache DolphinScheduler.”&lt;/strong&gt; Drawing on real-world engineering experience, Zan will break down how to use Apache DolphinScheduler as the core foundation for end-to-end workflow orchestration and production operations, combined with a distributed, high-performance OLAP data warehouse, to build a modern enterprise data warehouse.&lt;/p&gt;

&lt;p&gt;If you are working on &lt;strong&gt;data warehousing, data development, workflow orchestration, OLAP, data operations, or enterprise data platforms&lt;/strong&gt;, this is a session worth saving the date for.&lt;/p&gt;

&lt;h2&gt;
  
  
  One Session, the Full Story of Building an Enterprise Data Warehouse
&lt;/h2&gt;

&lt;p&gt;Traditional big data solutions often face a number of practical challenges when deployed in enterprise environments.&lt;/p&gt;

&lt;p&gt;Offline batch processing typically comes with minute-level latency, making it increasingly difficult to meet the real-time requirements of modern business scenarios. Tightly coupled compute and storage also make it difficult for enterprises to scale resources independently based on actual needs. Adding more storage or compute capacity separately can even result in lower utilization of the other resource.&lt;/p&gt;

&lt;p&gt;At the same time, the complexity of the modern big data ecosystem means more components to manage, higher learning costs, and stricter requirements for version compatibility. For enterprise data teams, connecting these technologies into a stable and efficient data platform is often more important than simply choosing any individual component.&lt;/p&gt;

&lt;p&gt;Even when an enterprise has accumulated massive volumes of business data, there is still a long list of challenges between &lt;strong&gt;a business requirement being raised&lt;/strong&gt; and &lt;strong&gt;a data task running reliably in production&lt;/strong&gt;. These include data synchronization, data cleansing, workflow orchestration, application integration, and end-to-end operations.&lt;/p&gt;

&lt;p&gt;So, what does it really take to build a modern enterprise data warehouse?&lt;/p&gt;

&lt;p&gt;That is the question this session will explore.&lt;/p&gt;

&lt;p&gt;Based on hands-on engineering experience, Zan Liu will walk through the complete implementation of an enterprise-grade modern data warehouse, with &lt;strong&gt;Apache DolphinScheduler&lt;/strong&gt; serving as the core foundation for end-to-end workflow orchestration and production operations, combined with a distributed, high-performance OLAP data warehouse.&lt;/p&gt;

&lt;p&gt;Starting with business requirements and continuing through data synchronization, data production, data applications, task scheduling, and operations, the session will show how open source technologies can be brought together across the entire data lifecycle to create a complete data production loop.&lt;/p&gt;

&lt;p&gt;Even more importantly, the entire solution is &lt;strong&gt;built on an open source ecosystem&lt;/strong&gt;. Beyond the architecture itself, the session will focus on the practical challenges that engineers actually encounter when putting such a solution into production.&lt;/p&gt;

&lt;p&gt;By bringing workflow orchestration, data processing, and data analytics together, the goal is to lower the barriers to data development and operations, improve the reliability and scalability of enterprise data platforms, and explore a more flexible approach to enterprise data operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎤 Meet the Speaker
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Zan Liu&lt;/strong&gt;，Data Analytics Engineer | Senior Big Data Architect&lt;/p&gt;

&lt;p&gt;With extensive experience in data warehousing and big data, Zan specializes in BI development and low-code Agent development with Dify. He has extensive hands-on experience in enterprise data platform development and data application implementation.&lt;/p&gt;

&lt;h2&gt;
  
  
  📌 Session Topic
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;“Building an Enterprise-Grade Data Warehouse with Apache DolphinScheduler”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this session, you’ll learn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What challenges do traditional big data architectures face in real-world enterprise deployments?&lt;/li&gt;
&lt;li&gt;How can Apache DolphinScheduler be used to build an end-to-end workflow orchestration system?&lt;/li&gt;
&lt;li&gt;How can a distributed, high-performance OLAP data warehouse be combined with workflow orchestration to build a modern enterprise data warehouse?&lt;/li&gt;
&lt;li&gt;How can the entire process—from business requirements to data production and data applications—be connected end to end?&lt;/li&gt;
&lt;li&gt;How can data synchronization, cleansing, scheduling, and operations come together to form a unified data production workflow?&lt;/li&gt;
&lt;li&gt;How can enterprises build a data platform that is easy to use, highly reliable, and scalable with an open source ecosystem?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;From architecture design to real-world implementation, this time we’re going beyond “which technologies should you choose?” and focusing on “how do you actually make them work in production?”&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🗓️ Livestream Details
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Date &amp;amp; Time:&lt;/strong&gt; September 15, 2026, at 8:00 PM(China Standard Time, UTC+8)&lt;br&gt;
&lt;strong&gt;Save Your Spot:&lt;/strong&gt; &lt;a href="https://meeting.tencent.com/dm/A0ISviQSgbjM" rel="noopener noreferrer"&gt;https://meeting.tencent.com/dm/A0ISviQSgbjM&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’re building an enterprise data warehouse or looking for a more efficient and reliable workflow solution for your data platform, join us for the livestream and see how a modern enterprise data warehouse can be built step by step with an open source technology stack.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎁 Exclusive Giveaways During the Livestream
&lt;/h2&gt;

&lt;p&gt;Along with the technical insights, this edition of Meetup also comes with &lt;strong&gt;exclusive Apache DolphinScheduler swag&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fob1kmucek76i457k3861.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fob1kmucek76i457k3861.png" alt="DolphinScheduler Keychain" width="800" height="993"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Join the livestream not only for practical insights and real-world experience, but also for a chance to take home a &lt;strong&gt;DolphinScheduler keychain&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;September 15 at 8:00 PM. See you in the livestream!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>apachedolphinscheduler</category>
      <category>datawarehouse</category>
      <category>datascience</category>
      <category>opensource</category>
    </item>
    <item>
      <title>🚨 Think DolphinScheduler is down? Prometheus + Grafana can alert you before your manager does. ☕📊 #DolphinScheduler #Prometheus #Grafana</title>
      <dc:creator>Chen Debra</dc:creator>
      <pubDate>Thu, 03 Sep 2026 07:59:08 +0000</pubDate>
      <link>https://dev.to/chen_debra_3060b21d12b1b0/think-dolphinscheduler-is-down-prometheus-grafana-can-alert-you-before-your-manager-does-4ga9</link>
      <guid>https://dev.to/chen_debra_3060b21d12b1b0/think-dolphinscheduler-is-down-prometheus-grafana-can-alert-you-before-your-manager-does-4ga9</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/chen_debra_3060b21d12b1b0/think-dolphinscheduler-is-down-youll-know-with-prometheus-grafana-38do" class="crayons-story__hidden-navigation-link"&gt;Think DolphinScheduler Is Down? You’ll Know with Prometheus + Grafana&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/chen_debra_3060b21d12b1b0" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1533306%2Fc0ea3a94-ba17-47c8-9304-4571fb1adaf9.png" alt="chen_debra_3060b21d12b1b0 profile" class="crayons-avatar__image" width="260" height="231"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/chen_debra_3060b21d12b1b0" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Chen Debra
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Chen Debra
                
                
              
              &lt;div id="story-author-preview-content-4563287" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/chen_debra_3060b21d12b1b0" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1533306%2Fc0ea3a94-ba17-47c8-9304-4571fb1adaf9.png" class="crayons-avatar__image" alt="" width="260" height="231"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Chen Debra&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/chen_debra_3060b21d12b1b0/think-dolphinscheduler-is-down-youll-know-with-prometheus-grafana-38do" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Sep 3&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/chen_debra_3060b21d12b1b0/think-dolphinscheduler-is-down-youll-know-with-prometheus-grafana-38do" id="article-link-4563287"&gt;
          Think DolphinScheduler Is Down? You’ll Know with Prometheus + Grafana
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/apachedolphinscheduler"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;apachedolphinscheduler&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/prometheus"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;prometheus&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/grafana"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;grafana&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/chen_debra_3060b21d12b1b0/think-dolphinscheduler-is-down-youll-know-with-prometheus-grafana-38do#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            13 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Think DolphinScheduler Is Down? You’ll Know with Prometheus + Grafana</title>
      <dc:creator>Chen Debra</dc:creator>
      <pubDate>Thu, 03 Sep 2026 07:58:06 +0000</pubDate>
      <link>https://dev.to/chen_debra_3060b21d12b1b0/think-dolphinscheduler-is-down-youll-know-with-prometheus-grafana-38do</link>
      <guid>https://dev.to/chen_debra_3060b21d12b1b0/think-dolphinscheduler-is-down-youll-know-with-prometheus-grafana-38do</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Ever had this happen? DolphinScheduler quietly goes down, your workflows stop running, and you’re sitting at your desk enjoying your coffee—until your manager suddenly asks, “Why hasn’t the data been updated yet?”&lt;/p&gt;

&lt;p&gt;At that moment, your face probably looks just like the production service: completely stuck.&lt;/p&gt;

&lt;p&gt;In our previous article, &lt;a href="https://medium.com/@ApacheDolphinScheduler/when-workflows-get-stuck-troubleshooting-and-preventing-task-deadlocks-in-apache-dolphinscheduler-298b710c7553" rel="noopener noreferrer"&gt;When Workflows Get Stuck: Troubleshooting and Preventing Task Deadlocks in Apache DolphinScheduler&lt;/a&gt;, we discussed an uncomfortable reality: if DolphinScheduler goes down because of blocking or a deadlock, it may not be able to alert you about the problem itself. After all, you can’t exactly expect a scheduler that has already “gone offline” to send you a farewell message.&lt;/p&gt;

&lt;p&gt;We looked around and found surprisingly few complete, practical guides for integrating DolphinScheduler with Prometheus monitoring.&lt;/p&gt;

&lt;p&gt;So this article fills that gap.&lt;/p&gt;

&lt;p&gt;We’ll walk through a lightweight &lt;strong&gt;DolphinScheduler + Prometheus + Grafana monitoring setup that has been validated in production&lt;/strong&gt;, covering the entire process from metric collection and alerting rules to dashboard visualization.&lt;/p&gt;

&lt;p&gt;By the end, you should be able to find out when DolphinScheduler is in trouble—before someone else does.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Architecture Overview
&lt;/h2&gt;

&lt;p&gt;Let’s start with the big picture. The entire monitoring pipeline can be broken down into three simple steps:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Responsibility&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;DolphinScheduler&lt;/td&gt;
&lt;td&gt;Exposes the &lt;code&gt;/actuator/prometheus&lt;/code&gt; metrics endpoint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Prometheus&lt;/td&gt;
&lt;td&gt;Periodically scrapes metrics and evaluates alerting rules&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Grafana&lt;/td&gt;
&lt;td&gt;Provides visual dashboards for an at-a-glance view of scheduler health&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In simple terms:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DolphinScheduler collects the vital signs, Prometheus monitors them, and Grafana turns the data into something you can actually see.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With the three working together, you can finally enjoy your coffee with a little more peace of mind.&lt;/p&gt;

&lt;p&gt;This time, for real.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Integrating Prometheus
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 Verify That DolphinScheduler Exposes Metrics
&lt;/h3&gt;

&lt;p&gt;DolphinScheduler 2.0.0 and later include a built-in Prometheus metrics endpoint, so no additional plugin is required.&lt;/p&gt;

&lt;p&gt;You can verify it directly with &lt;code&gt;curl&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://&amp;lt;dolphin-host&amp;gt;:12345/dolphinscheduler/actuator/prometheus
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the response contains a bunch of metrics beginning with &lt;code&gt;ds_&lt;/code&gt;, congratulations—DolphinScheduler is ready to be monitored.&lt;/p&gt;

&lt;p&gt;If you get a &lt;code&gt;404&lt;/code&gt;, your version may be too old. Upgrade DolphinScheduler first and then try again.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2 Configure Prometheus to Scrape DolphinScheduler
&lt;/h3&gt;

&lt;p&gt;Add the following scrape configuration to &lt;code&gt;prometheus.yml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;scrape_configs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="c1"&gt;# Host monitoring (optional; used to monitor the server running DolphinScheduler)&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;job_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;node-exporter'&lt;/span&gt;
    &lt;span class="na"&gt;static_configs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;targets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;dolphin-host&amp;gt;:9100'&lt;/span&gt;
        &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;instance&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;dolphin-server'&lt;/span&gt;
          &lt;span class="na"&gt;nodename&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;dolphin-server'&lt;/span&gt;

  &lt;span class="c1"&gt;# DolphinScheduler metrics&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;job_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;dolphinscheduler'&lt;/span&gt;
    &lt;span class="na"&gt;static_configs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;targets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;dolphin-host&amp;gt;:12345'&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
        &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;service&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dolphinscheduler&lt;/span&gt;
    &lt;span class="na"&gt;metrics_path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/dolphinscheduler/actuator/prometheus'&lt;/span&gt;
    &lt;span class="na"&gt;metric_relabel_configs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;source_labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;application&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
        &lt;span class="na"&gt;target_label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;app&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;regex&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;application'&lt;/span&gt;
        &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;labeldrop&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Replace &lt;code&gt;&amp;lt;dolphin-host&amp;gt;&lt;/code&gt; with the actual address of your DolphinScheduler service. If you’re running DolphinScheduler in a cluster, add all relevant nodes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  2.3 Configure Alerting Rules
&lt;/h3&gt;

&lt;p&gt;This is where things get serious.&lt;/p&gt;

&lt;p&gt;What’s the point of monitoring if nobody gets notified when something goes wrong?&lt;/p&gt;

&lt;p&gt;Create an alert rule file named &lt;code&gt;dolphinscheduler-rules.yml&lt;/code&gt;. The following 10 rules have been validated in production and cover scenarios ranging from “DolphinScheduler is down” to “a workflow has gone off the rails.”&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# DolphinScheduler monitoring alert rules&lt;/span&gt;
&lt;span class="na"&gt;groups&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dolphinscheduler-alerts&lt;/span&gt;
    &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

      &lt;span class="c1"&gt;# ============ Core rule: service availability ============&lt;/span&gt;

      &lt;span class="c1"&gt;# Rule 1: No successful tasks in the past hour (likely unavailable)&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;alert&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;DolphinSchedulerNoSuccessfulTasksForOneHour&lt;/span&gt;
        &lt;span class="na"&gt;expr&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;increase(ds_task_instance_count_total{state="success"}[1h]) == &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
        &lt;span class="na"&gt;for&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;5m&lt;/span&gt;
        &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;critical&lt;/span&gt;
          &lt;span class="na"&gt;group&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dolphinscheduler&lt;/span&gt;
        &lt;span class="na"&gt;annotations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;summary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;No&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;successful&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;DolphinScheduler&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tasks&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;past&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;hour"&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Instance&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;$labels.application&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;has&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;produced&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;no&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;successful&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tasks&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;past&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;hour&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;may&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;be&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;unavailable.&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Check&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;service&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;immediately."&lt;/span&gt;

      &lt;span class="c1"&gt;# Rule 2: No successful tasks in the past 30 minutes (early warning)&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;alert&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;DolphinSchedulerNoSuccessfulTasksFor30Minutes&lt;/span&gt;
        &lt;span class="na"&gt;expr&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;increase(ds_task_instance_count_total{state="success"}[30m]) == &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
        &lt;span class="na"&gt;for&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;5m&lt;/span&gt;
        &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;warning&lt;/span&gt;
          &lt;span class="na"&gt;group&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dolphinscheduler&lt;/span&gt;
        &lt;span class="na"&gt;annotations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;summary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;No&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;successful&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;DolphinScheduler&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tasks&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;past&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;30&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;minutes"&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Instance&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;$labels.application&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;has&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;produced&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;no&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;successful&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tasks&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;past&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;30&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;minutes.&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Check&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;service."&lt;/span&gt;

      &lt;span class="c1"&gt;# ============ Task health checks ============&lt;/span&gt;

      &lt;span class="c1"&gt;# Rule 3: High task failure rate&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;alert&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;DolphinSchedulerHighTaskFailureRate&lt;/span&gt;
        &lt;span class="na"&gt;expr&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;(&lt;/span&gt;
            &lt;span class="s"&gt;increase(ds_task_instance_count_total{state="fail"}[10m])&lt;/span&gt;
            &lt;span class="s"&gt;/&lt;/span&gt;
            &lt;span class="s"&gt;(increase(ds_task_instance_count_total{state="finish"}[10m]) + 1)&lt;/span&gt;
          &lt;span class="s"&gt;) &amp;gt; 0.1&lt;/span&gt;
        &lt;span class="na"&gt;for&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;5m&lt;/span&gt;
        &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;warning&lt;/span&gt;
          &lt;span class="na"&gt;group&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dolphinscheduler&lt;/span&gt;
        &lt;span class="na"&gt;annotations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;summary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;High&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;DolphinScheduler&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;task&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;failure&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;rate"&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Instance&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;$labels.application&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;has&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;task&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;failure&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;rate&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;above&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;10%&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;over&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;past&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;10&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;minutes.&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Current&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;failure&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;rate:&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;$value&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;|&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;humanizePercentage&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;

      &lt;span class="c1"&gt;# Rule 4: Task dispatch failures&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;alert&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;DolphinSchedulerTaskDispatchFailure&lt;/span&gt;
        &lt;span class="na"&gt;expr&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;increase(ds_task_dispatch_failure_count_total[10m]) &amp;gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
        &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;warning&lt;/span&gt;
          &lt;span class="na"&gt;group&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dolphinscheduler&lt;/span&gt;
        &lt;span class="na"&gt;annotations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;summary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DolphinScheduler&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;task&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;dispatch&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;failure"&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Instance&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;$labels.application&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;has&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;experienced&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;$value&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;task&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;dispatch&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;failures&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;past&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;10&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;minutes."&lt;/span&gt;

      &lt;span class="c1"&gt;# ============ Worker health checks ============&lt;/span&gt;

      &lt;span class="c1"&gt;# Rule 5: No active Worker threads (tasks have been submitted, but nothing is executing)&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;alert&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;DolphinSchedulerWorkerNoActiveThreads&lt;/span&gt;
        &lt;span class="na"&gt;expr&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ds_worker_active_execute_thread == 0 and increase(ds_task_instance_count_total{state="submit"}[5m]) &amp;gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
        &lt;span class="na"&gt;for&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10m&lt;/span&gt;
        &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;warning&lt;/span&gt;
          &lt;span class="na"&gt;group&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dolphinscheduler&lt;/span&gt;
        &lt;span class="na"&gt;annotations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;summary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DolphinScheduler&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Worker&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;has&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;no&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;active&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;execution&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;threads"&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Worker&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;instance&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;$labels.application&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;has&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;no&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;active&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;execution&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;threads,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;while&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tasks&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;have&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;been&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;submitted.&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Tasks&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;may&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;not&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;be&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;executing."&lt;/span&gt;

      &lt;span class="c1"&gt;# Rule 6: High Worker memory utilization&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;alert&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;DolphinSchedulerWorkerHighMemoryUsage&lt;/span&gt;
        &lt;span class="na"&gt;expr&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ds_worker_memory_usage &amp;gt; &lt;/span&gt;&lt;span class="m"&gt;0.85&lt;/span&gt;
        &lt;span class="na"&gt;for&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;5m&lt;/span&gt;
        &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;warning&lt;/span&gt;
          &lt;span class="na"&gt;group&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dolphinscheduler&lt;/span&gt;
        &lt;span class="na"&gt;annotations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;summary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;High&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;DolphinScheduler&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Worker&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;memory&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;usage"&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Worker&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;instance&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;$labels.application&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;is&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;using&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;$value&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;|&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;humanizePercentage&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;memory,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;exceeding&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;85%&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;threshold."&lt;/span&gt;

      &lt;span class="c1"&gt;# Rule 7: High Worker CPU utilization&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;alert&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;DolphinSchedulerWorkerHighCPUUsage&lt;/span&gt;
        &lt;span class="na"&gt;expr&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ds_worker_cpu_usage &amp;gt; &lt;/span&gt;&lt;span class="m"&gt;0.85&lt;/span&gt;
        &lt;span class="na"&gt;for&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;5m&lt;/span&gt;
        &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;warning&lt;/span&gt;
          &lt;span class="na"&gt;group&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dolphinscheduler&lt;/span&gt;
        &lt;span class="na"&gt;annotations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;summary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;High&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;DolphinScheduler&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Worker&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;CPU&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;usage"&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Worker&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;instance&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;$labels.application&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;is&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;using&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;$value&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;|&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;humanizePercentage&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;CPU,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;exceeding&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;85%&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;threshold."&lt;/span&gt;

      &lt;span class="c1"&gt;# ============ Workflow &amp;amp; Master checks ============&lt;/span&gt;

      &lt;span class="c1"&gt;# Rule 8: Long-running workflow instances (potentially blocked)&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;alert&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;DolphinSchedulerLongRunningWorkflows&lt;/span&gt;
        &lt;span class="na"&gt;expr&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ds_workflow_instance_running &amp;gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;
        &lt;span class="na"&gt;for&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;30m&lt;/span&gt;
        &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;warning&lt;/span&gt;
          &lt;span class="na"&gt;group&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dolphinscheduler&lt;/span&gt;
        &lt;span class="na"&gt;annotations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;summary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Long-running&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;DolphinScheduler&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;workflows"&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Instance&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;$labels.application&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;has&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;$value&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;workflow&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;instances&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;running&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;more&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;than&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;30&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;minutes.&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Possible&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;blocking&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;detected."&lt;/span&gt;

      &lt;span class="c1"&gt;# Rule 9: Master failover check failures&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;alert&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;DolphinSchedulerMasterFailoverCheckFailure&lt;/span&gt;
        &lt;span class="na"&gt;expr&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;increase(ds_master_scheduler_failover_check_count_total{result="fail"}[10m]) &amp;gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
        &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;critical&lt;/span&gt;
          &lt;span class="na"&gt;group&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dolphinscheduler&lt;/span&gt;
        &lt;span class="na"&gt;annotations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;summary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DolphinScheduler&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Master&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;failover&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;check&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;failure"&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Instance&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;$labels.application&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;has&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;recorded&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;$value&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Master&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;failover&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;check&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;failures&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;past&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;10&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;minutes."&lt;/span&gt;

      &lt;span class="c1"&gt;# ============ Alert channel self-check ============&lt;/span&gt;

      &lt;span class="c1"&gt;# Rule 10: Alert delivery failures (monitoring the monitoring system)&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;alert&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;DolphinSchedulerAlertDeliveryFailure&lt;/span&gt;
        &lt;span class="na"&gt;expr&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;increase(ds_alert_send_count_total{status="fail"}[10m]) &amp;gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;
        &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;warning&lt;/span&gt;
          &lt;span class="na"&gt;group&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dolphinscheduler&lt;/span&gt;
        &lt;span class="na"&gt;annotations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;summary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DolphinScheduler&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;alert&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;delivery&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;failures"&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Instance&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;$labels.application&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;has&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;experienced&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;$value&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;alert&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;delivery&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;failures&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;past&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;10&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;minutes."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The 10 rules above can be grouped into four categories:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Group&lt;/th&gt;
&lt;th&gt;Rule&lt;/th&gt;
&lt;th&gt;Severity&lt;/th&gt;
&lt;th&gt;Trigger Condition&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Service Availability&lt;/td&gt;
&lt;td&gt;No successful tasks for 1h&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;td&gt;0 successful tasks within 1 hour&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Service Availability&lt;/td&gt;
&lt;td&gt;No successful tasks for 30min&lt;/td&gt;
&lt;td&gt;Warning&lt;/td&gt;
&lt;td&gt;0 successful tasks within 30 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Task Health&lt;/td&gt;
&lt;td&gt;High task failure rate&lt;/td&gt;
&lt;td&gt;Warning&lt;/td&gt;
&lt;td&gt;Task failure rate &amp;gt; 10% over 10 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Task Health&lt;/td&gt;
&lt;td&gt;Task dispatch failure&lt;/td&gt;
&lt;td&gt;Warning&lt;/td&gt;
&lt;td&gt;Any task dispatch failure within 10 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Worker&lt;/td&gt;
&lt;td&gt;No active threads&lt;/td&gt;
&lt;td&gt;Warning&lt;/td&gt;
&lt;td&gt;Active thread count = 0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Worker&lt;/td&gt;
&lt;td&gt;Memory &amp;gt; 85%&lt;/td&gt;
&lt;td&gt;Warning&lt;/td&gt;
&lt;td&gt;Threshold exceeded for 5 consecutive minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Worker&lt;/td&gt;
&lt;td&gt;CPU &amp;gt; 85%&lt;/td&gt;
&lt;td&gt;Warning&lt;/td&gt;
&lt;td&gt;Threshold exceeded for 5 consecutive minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Workflow&lt;/td&gt;
&lt;td&gt;Long-running workflows&lt;/td&gt;
&lt;td&gt;Warning&lt;/td&gt;
&lt;td&gt;Running instances &amp;gt; 10 for 30 consecutive minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Master&lt;/td&gt;
&lt;td&gt;Abnormal failover&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;td&gt;Failover check fails&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-Monitoring&lt;/td&gt;
&lt;td&gt;Alert delivery failure&lt;/td&gt;
&lt;td&gt;Warning&lt;/td&gt;
&lt;td&gt;More than 5 failures within 10 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  2.4 Verify That Alerts Work
&lt;/h3&gt;

&lt;p&gt;When DolphinScheduler stops running or workflows become stalled for some reason, the corresponding alerts will be triggered automatically.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmu044taxhub5s0jpynuq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmu044taxhub5s0jpynuq.jpg" width="800" height="222"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, when the service goes down, you can find out immediately instead of waiting until your manager finds out first.&lt;/p&gt;

&lt;p&gt;That’s the whole point of monitoring.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Building a Grafana Dashboard
&lt;/h2&gt;

&lt;p&gt;Alerts alone are not enough. You also need a dashboard that gives you a quick visual overview of the scheduler's health.&lt;/p&gt;

&lt;p&gt;That’s where Grafana comes in.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Prerequisite:&lt;/strong&gt; Grafana must already be connected to Prometheus as a data source. If it isn’t, go to &lt;strong&gt;Grafana → Configuration → Data Sources&lt;/strong&gt; and add Prometheus.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  3.1 Import the Dashboard
&lt;/h3&gt;

&lt;p&gt;Go to:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Grafana → Dashboards → New → Import&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcagp7o5fslo853zeiovx.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcagp7o5fslo853zeiovx.jpg" width="800" height="253"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Option 1: Import by Dashboard ID
&lt;/h4&gt;

&lt;p&gt;This is the recommended approach.&lt;/p&gt;

&lt;p&gt;On the import page, enter the dashboard ID:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;24841
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then click &lt;strong&gt;Load&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fahfx6ox3u4777ewyouxe.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fahfx6ox3u4777ewyouxe.jpg" width="800" height="572"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the easiest option. One number is all it takes, and you can skip the hassle of manually configuring the dashboard JSON.&lt;/p&gt;

&lt;h4&gt;
  
  
  Option 2: Import from a JSON Template
&lt;/h4&gt;

&lt;p&gt;If your Grafana instance cannot access the public internet—for example, in a corporate network environment—you can manually import the following JSON template.&lt;/p&gt;

&lt;p&gt;The JSON is quite long, so the compressed version is provided below. Copy it directly into Grafana’s JSON import field:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"__inputs"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"DS_PROMETHEUS"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"pluginId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"pluginName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Prometheus"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="nl"&gt;"__requires"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"grafana"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"grafana"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Grafana"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"9.0.0"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"panel"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"stat"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Stat"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"panel"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"gauge"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Gauge"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"panel"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"timeseries"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Time series"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"panel"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"piechart"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Pie chart"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"panel"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"bargauge"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Bar gauge"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="nl"&gt;"annotations"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"list"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"builtIn"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"grafana"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"enable"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"hide"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"iconColor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"rgba(0, 211, 255, 1)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Annotations &amp;amp; Alerts"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"dashboard"&lt;/span&gt;&lt;span class="p"&gt;}]},&lt;/span&gt;&lt;span class="nl"&gt;"editable"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"fiscalYearStartMonth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"graphTooltip"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"links"&lt;/span&gt;&lt;span class="p"&gt;:[],&lt;/span&gt;&lt;span class="nl"&gt;"liveNow"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"panels"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"fieldConfig"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"thresholds"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"mappings"&lt;/span&gt;&lt;span class="p"&gt;:[],&lt;/span&gt;&lt;span class="nl"&gt;"thresholds"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"absolute"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"steps"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"green"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;}]},&lt;/span&gt;&lt;span class="nl"&gt;"unit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"short"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"overrides"&lt;/span&gt;&lt;span class="p"&gt;:[]},&lt;/span&gt;&lt;span class="nl"&gt;"gridPos"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"h"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"w"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"x"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"y"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"colorMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"graphMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"area"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"justifyMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"auto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"orientation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"auto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"reduceOptions"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"values"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"calcs"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;"lastNotNull"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="nl"&gt;"fields"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"textMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"auto"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"pluginVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"9.5.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"targets"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"expr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"ds_task_instance_count_total{state=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;success&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"refId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"A"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Task Success Total"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"stat"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"fieldConfig"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"thresholds"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"mappings"&lt;/span&gt;&lt;span class="p"&gt;:[],&lt;/span&gt;&lt;span class="nl"&gt;"thresholds"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"absolute"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"steps"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"green"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"red"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}]},&lt;/span&gt;&lt;span class="nl"&gt;"unit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"short"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"overrides"&lt;/span&gt;&lt;span class="p"&gt;:[]},&lt;/span&gt;&lt;span class="nl"&gt;"gridPos"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"h"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"w"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"x"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"y"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"colorMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"graphMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"area"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"justifyMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"auto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"orientation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"auto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"reduceOptions"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"values"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"calcs"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;"lastNotNull"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="nl"&gt;"fields"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"textMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"auto"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"pluginVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"9.5.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"targets"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"expr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"ds_task_instance_count_total{state=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;fail&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"refId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"A"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Task Failure Total"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"stat"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"fieldConfig"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"thresholds"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"mappings"&lt;/span&gt;&lt;span class="p"&gt;:[],&lt;/span&gt;&lt;span class="nl"&gt;"thresholds"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"absolute"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"steps"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"blue"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;}]},&lt;/span&gt;&lt;span class="nl"&gt;"unit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"short"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"overrides"&lt;/span&gt;&lt;span class="p"&gt;:[]},&lt;/span&gt;&lt;span class="nl"&gt;"gridPos"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"h"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"w"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"x"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"y"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"colorMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"graphMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"area"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"justifyMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"auto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"orientation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"auto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"reduceOptions"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"values"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"calcs"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;"lastNotNull"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="nl"&gt;"fields"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"textMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"auto"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"pluginVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"9.5.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"targets"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"expr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"ds_workflow_instance_running"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"refId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"A"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Running Workflows"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"stat"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"fieldConfig"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"thresholds"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"mappings"&lt;/span&gt;&lt;span class="p"&gt;:[],&lt;/span&gt;&lt;span class="nl"&gt;"max"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"min"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"thresholds"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"absolute"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"steps"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"green"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"yellow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;0.7&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"red"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;0.85&lt;/span&gt;&lt;span class="p"&gt;}]},&lt;/span&gt;&lt;span class="nl"&gt;"unit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"percentunit"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"overrides"&lt;/span&gt;&lt;span class="p"&gt;:[]},&lt;/span&gt;&lt;span class="nl"&gt;"gridPos"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"h"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"w"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"x"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"y"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"orientation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"auto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"reduceOptions"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"values"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"calcs"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;"lastNotNull"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="nl"&gt;"fields"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"showThresholdLabels"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"showThresholdMarkers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"pluginVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"9.5.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"targets"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"expr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"ds_worker_memory_usage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"refId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"A"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Worker Memory Usage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"gauge"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"fieldConfig"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"thresholds"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"mappings"&lt;/span&gt;&lt;span class="p"&gt;:[],&lt;/span&gt;&lt;span class="nl"&gt;"max"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"min"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"thresholds"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"absolute"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"steps"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"green"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"yellow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;0.7&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"red"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;0.85&lt;/span&gt;&lt;span class="p"&gt;}]},&lt;/span&gt;&lt;span class="nl"&gt;"unit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"percentunit"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"overrides"&lt;/span&gt;&lt;span class="p"&gt;:[]},&lt;/span&gt;&lt;span class="nl"&gt;"gridPos"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"h"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"w"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"x"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"y"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"orientation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"auto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"reduceOptions"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"values"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"calcs"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;"lastNotNull"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="nl"&gt;"fields"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"showThresholdLabels"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"showThresholdMarkers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"pluginVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"9.5.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"targets"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"expr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"ds_worker_cpu_usage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"refId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"A"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Worker CPU Usage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"gauge"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"fieldConfig"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"palette-classic"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"custom"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"axisCenteredZero"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"axisColorMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"axisLabel"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"axisPlacement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"auto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"barAlignment"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"drawStyle"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"line"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"fillOpacity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"gradientMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"hideFrom"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"tooltip"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"viz"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"legend"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"lineInterpolation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"linear"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"lineWidth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"pointSize"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"scaleDistribution"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"linear"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"showPoints"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"never"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"spanNulls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"stacking"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"group"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"A"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"thresholdsStyle"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"off"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="nl"&gt;"mappings"&lt;/span&gt;&lt;span class="p"&gt;:[],&lt;/span&gt;&lt;span class="nl"&gt;"thresholds"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"absolute"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"steps"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"green"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;}]},&lt;/span&gt;&lt;span class="nl"&gt;"unit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"short"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"overrides"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"matcher"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"byName"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"success"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"properties"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"fixedColor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"green"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"fixed"&lt;/span&gt;&lt;span class="p"&gt;}}]},{&lt;/span&gt;&lt;span class="nl"&gt;"matcher"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"byName"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"fail"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"properties"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"fixedColor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"red"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"fixed"&lt;/span&gt;&lt;span class="p"&gt;}}]}]},&lt;/span&gt;&lt;span class="nl"&gt;"gridPos"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"h"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"w"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"x"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"y"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"legend"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"calcs"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;"last"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"max"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="nl"&gt;"displayMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"table"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"placement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"bottom"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"showLegend"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"tooltip"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"multi"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"sort"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="nl"&gt;"pluginVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"9.5.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"targets"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"expr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"increase(ds_task_instance_count_total{state=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;success&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;}[5m])"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"legendFormat"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"success"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"refId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"A"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"expr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"increase(ds_task_instance_count_total{state=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;fail&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;}[5m])"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"legendFormat"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"fail"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"refId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"B"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"expr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"increase(ds_task_instance_count_total{state=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;timeout&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;}[5m])"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"legendFormat"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"timeout"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"refId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"C"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Task Execution Trend (5-Minute Increment)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"timeseries"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"fieldConfig"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"palette-classic"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"custom"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"hideFrom"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"tooltip"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"viz"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"legend"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="nl"&gt;"mappings"&lt;/span&gt;&lt;span class="p"&gt;:[],&lt;/span&gt;&lt;span class="nl"&gt;"unit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"short"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"overrides"&lt;/span&gt;&lt;span class="p"&gt;:[]},&lt;/span&gt;&lt;span class="nl"&gt;"gridPos"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"h"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"w"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"x"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"y"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"legend"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"displayMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"table"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"placement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"right"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"showLegend"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"values"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"percent"&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;&lt;span class="nl"&gt;"pieType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"pie"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"tooltip"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"single"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"sort"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="nl"&gt;"pluginVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"9.5.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"targets"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"expr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"ds_task_instance_count_total"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"legendFormat"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"{{state}}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"refId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"A"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Task Status Distribution"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"piechart"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"fieldConfig"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"thresholds"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"mappings"&lt;/span&gt;&lt;span class="p"&gt;:[],&lt;/span&gt;&lt;span class="nl"&gt;"max"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"min"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"thresholds"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"absolute"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"steps"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"green"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"yellow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"red"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;}]},&lt;/span&gt;&lt;span class="nl"&gt;"unit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"percentunit"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"overrides"&lt;/span&gt;&lt;span class="p"&gt;:[]},&lt;/span&gt;&lt;span class="nl"&gt;"gridPos"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"h"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"w"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"x"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"y"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"orientation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"auto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"reduceOptions"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"values"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"calcs"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;"lastNotNull"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="nl"&gt;"fields"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"showThresholdLabels"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"showThresholdMarkers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"pluginVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"9.5.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"targets"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"expr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"rate(ds_task_instance_count_total{state=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;fail&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;}[10m]) / (rate(ds_task_instance_count_total{state=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;finish&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;}[10m]) + 0.001)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"refId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"A"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Task Failure Rate (10 Minutes)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"gauge"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"fieldConfig"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"thresholds"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"mappings"&lt;/span&gt;&lt;span class="p"&gt;:[],&lt;/span&gt;&lt;span class="nl"&gt;"thresholds"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"absolute"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"steps"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"blue"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;}]},&lt;/span&gt;&lt;span class="nl"&gt;"unit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"short"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"overrides"&lt;/span&gt;&lt;span class="p"&gt;:[]},&lt;/span&gt;&lt;span class="nl"&gt;"gridPos"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"h"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"w"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"x"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"y"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"displayMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"gradient"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"minVizHeight"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"minVizWidth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"orientation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"horizontal"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"reduceOptions"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"values"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"calcs"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;"lastNotNull"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="nl"&gt;"fields"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"showUnfilled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"pluginVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"9.5.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"targets"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"expr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"ds_task_execution_count_by_type_total &amp;gt; 0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"legendFormat"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"{{task_type}}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"refId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"A"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Task Type Distribution"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"bargauge"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"fieldConfig"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"palette-classic"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"custom"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"axisCenteredZero"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"axisColorMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"axisLabel"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"axisPlacement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"auto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"barAlignment"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"drawStyle"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"line"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"fillOpacity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"gradientMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"hideFrom"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"tooltip"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"viz"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"legend"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"lineInterpolation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"linear"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"lineWidth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"pointSize"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"scaleDistribution"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"linear"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"showPoints"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"never"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"spanNulls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"stacking"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"group"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"A"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"thresholdsStyle"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"off"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="nl"&gt;"mappings"&lt;/span&gt;&lt;span class="p"&gt;:[],&lt;/span&gt;&lt;span class="nl"&gt;"thresholds"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"absolute"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"steps"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"green"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;}]},&lt;/span&gt;&lt;span class="nl"&gt;"unit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"short"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"overrides"&lt;/span&gt;&lt;span class="p"&gt;:[]},&lt;/span&gt;&lt;span class="nl"&gt;"gridPos"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"h"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"w"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"x"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"y"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"legend"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"calcs"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;"last"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="nl"&gt;"displayMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"table"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"placement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"bottom"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"showLegend"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"tooltip"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"multi"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"sort"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="nl"&gt;"pluginVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"9.5.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"targets"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"expr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"ds_workflow_instance_running"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"legendFormat"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Running"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"refId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"A"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"expr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"increase(ds_workflow_instance_count_total{state=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;success&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;}[5m])"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"legendFormat"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Success-{{process_definition_code}}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"refId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"B"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Workflow Instance Trend"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"timeseries"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"fieldConfig"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"palette-classic"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"custom"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"axisCenteredZero"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"axisColorMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"axisLabel"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"axisPlacement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"auto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"barAlignment"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"drawStyle"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"line"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"fillOpacity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"gradientMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"hideFrom"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"tooltip"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"viz"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"legend"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"lineInterpolation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"linear"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"lineWidth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"pointSize"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"scaleDistribution"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"linear"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"showPoints"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"never"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"spanNulls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"stacking"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"group"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"A"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"thresholdsStyle"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"off"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="nl"&gt;"mappings"&lt;/span&gt;&lt;span class="p"&gt;:[],&lt;/span&gt;&lt;span class="nl"&gt;"thresholds"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"absolute"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"steps"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"green"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;}]},&lt;/span&gt;&lt;span class="nl"&gt;"unit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"short"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"overrides"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"matcher"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"byName"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Memory Usage"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"properties"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"unit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"percentunit"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"custom.axisPlacement"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"right"&lt;/span&gt;&lt;span class="p"&gt;}]},{&lt;/span&gt;&lt;span class="nl"&gt;"matcher"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"byName"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"CPU Usage"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"properties"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"unit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"percentunit"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"custom.axisPlacement"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"right"&lt;/span&gt;&lt;span class="p"&gt;}]}]},&lt;/span&gt;&lt;span class="nl"&gt;"gridPos"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"h"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"w"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"x"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"y"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"legend"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"calcs"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;"last"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"max"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="nl"&gt;"displayMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"table"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"placement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"bottom"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"showLegend"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"tooltip"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"multi"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"sort"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="nl"&gt;"pluginVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"9.5.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"targets"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"expr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"ds_worker_active_execute_thread"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"legendFormat"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Active Threads"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"refId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"A"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"expr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"ds_worker_memory_usage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"legendFormat"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Memory Usage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"refId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"B"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"expr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"ds_worker_cpu_usage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"legendFormat"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"CPU Usage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"refId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"C"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Worker Resource Monitoring"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"timeseries"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"fieldConfig"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"palette-classic"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"custom"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"axisCenteredZero"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"axisColorMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"axisLabel"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"axisPlacement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"auto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"barAlignment"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"drawStyle"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"line"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"fillOpacity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"gradientMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"hideFrom"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"tooltip"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"viz"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"legend"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"lineInterpolation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"linear"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"lineWidth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"pointSize"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"scaleDistribution"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"linear"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"showPoints"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"never"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"spanNulls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"stacking"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"group"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"A"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"thresholdsStyle"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"off"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="nl"&gt;"mappings"&lt;/span&gt;&lt;span class="p"&gt;:[],&lt;/span&gt;&lt;span class="nl"&gt;"thresholds"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"absolute"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"steps"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"green"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;}]},&lt;/span&gt;&lt;span class="nl"&gt;"unit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"short"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"overrides"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"matcher"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"byName"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Failure"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"properties"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"fixedColor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"red"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"fixed"&lt;/span&gt;&lt;span class="p"&gt;}}]}]},&lt;/span&gt;&lt;span class="nl"&gt;"gridPos"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"h"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"w"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"x"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"y"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"legend"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"calcs"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;"last"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"max"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="nl"&gt;"displayMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"table"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"placement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"bottom"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"showLegend"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"tooltip"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"multi"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"sort"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="nl"&gt;"pluginVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"9.5.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"targets"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"expr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"increase(ds_alert_send_count_total{status=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;success&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;}[5m])"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"legendFormat"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Success"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"refId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"A"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"expr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"increase(ds_alert_send_count_total{status=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;fail&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;}[5m])"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"legendFormat"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Failure"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"refId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"B"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Alert Delivery Trend (5-Minute Increment)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"timeseries"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"fieldConfig"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"palette-classic"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"custom"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"axisCenteredZero"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"axisColorMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"axisLabel"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"axisPlacement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"auto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"barAlignment"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"drawStyle"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"line"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"fillOpacity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"gradientMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"hideFrom"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"tooltip"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"viz"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"legend"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"lineInterpolation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"linear"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"lineWidth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"pointSize"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"scaleDistribution"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"linear"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"showPoints"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"never"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"spanNulls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"stacking"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"group"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"A"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"thresholdsStyle"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"off"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="nl"&gt;"mappings"&lt;/span&gt;&lt;span class="p"&gt;:[],&lt;/span&gt;&lt;span class="nl"&gt;"thresholds"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"absolute"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"steps"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"green"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;}]},&lt;/span&gt;&lt;span class="nl"&gt;"unit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"s"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"overrides"&lt;/span&gt;&lt;span class="p"&gt;:[]},&lt;/span&gt;&lt;span class="nl"&gt;"gridPos"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"h"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"w"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"x"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"y"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"legend"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"calcs"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;"mean"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"max"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="nl"&gt;"displayMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"table"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"placement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"bottom"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"showLegend"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"tooltip"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"multi"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"sort"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="nl"&gt;"pluginVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"9.5.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"targets"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"expr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"rate(http_server_requests_seconds_sum{uri=~&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;/projects.*&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;}[5m]) / rate(http_server_requests_seconds_count{uri=~&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;/projects.*&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;}[5m])"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"legendFormat"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"{{uri}} - {{method}}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"refId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"A"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Average API Response Time"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"timeseries"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"fieldConfig"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"palette-classic"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"custom"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"axisCenteredZero"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"axisColorMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"axisLabel"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"axisPlacement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"auto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"barAlignment"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"drawStyle"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"line"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"fillOpacity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"gradientMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"hideFrom"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"tooltip"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"viz"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"legend"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"lineInterpolation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"linear"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"lineWidth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"pointSize"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"scaleDistribution"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"linear"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"showPoints"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"never"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"spanNulls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"stacking"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"group"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"A"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"thresholdsStyle"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"off"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="nl"&gt;"mappings"&lt;/span&gt;&lt;span class="p"&gt;:[],&lt;/span&gt;&lt;span class="nl"&gt;"thresholds"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"absolute"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"steps"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"green"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;}]},&lt;/span&gt;&lt;span class="nl"&gt;"unit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"reqps"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"overrides"&lt;/span&gt;&lt;span class="p"&gt;:[]},&lt;/span&gt;&lt;span class="nl"&gt;"gridPos"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"h"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"w"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"x"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"y"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"legend"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"calcs"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;"mean"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"max"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="nl"&gt;"displayMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"table"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"placement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"bottom"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"showLegend"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"tooltip"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"multi"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"sort"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="nl"&gt;"pluginVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"9.5.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"targets"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"${datasource}"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"expr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"rate(http_server_requests_seconds_count{uri=~&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;/projects.*&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;}[5m])"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"legendFormat"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"{{uri}} - {{method}}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"refId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"A"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"API Request Rate"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"timeseries"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="nl"&gt;"refresh"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"30s"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"schemaVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"style"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"dark"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"tags"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;"dolphinscheduler"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"big-data"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="nl"&gt;"templating"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"list"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"current"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"selected"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Prometheus"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"hide"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"includeAll"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Data Source"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"multi"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:[],&lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"prometheus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"refresh"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"regex"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"skipUrlSync"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"datasource"&lt;/span&gt;&lt;span class="p"&gt;}]},&lt;/span&gt;&lt;span class="nl"&gt;"time"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"from"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"now-6h"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"to"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"now"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"timepicker"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"refresh_intervals"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;"10s"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"30s"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"1m"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"5m"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"15m"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"30m"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"1h"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"2h"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"1d"&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;&lt;span class="nl"&gt;"timezone"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"browser"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"DolphinScheduler Monitoring Dashboard"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"dolphinscheduler-overview"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"weekStart"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.2 Dashboard Preview
&lt;/h3&gt;

&lt;p&gt;Once the import is complete, you’ll have a full monitoring dashboard containing the following panels:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Panel&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Monitoring Content&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Total Success/Failed Tasks&lt;/td&gt;
&lt;td&gt;Stat Card&lt;/td&gt;
&lt;td&gt;Overview of global task counts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Running Workflows&lt;/td&gt;
&lt;td&gt;Stat Card&lt;/td&gt;
&lt;td&gt;Number of currently active workflows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Worker Memory/CPU Usage&lt;/td&gt;
&lt;td&gt;Gauge&lt;/td&gt;
&lt;td&gt;Red/Yellow/Green indicators; turns red above 85%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Task Execution Trend&lt;/td&gt;
&lt;td&gt;Time-series Line Chart&lt;/td&gt;
&lt;td&gt;Success/Failure/Timeout 5-minute increments&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Task Status Distribution&lt;/td&gt;
&lt;td&gt;Pie Chart&lt;/td&gt;
&lt;td&gt;Proportion of each task status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Task Failure Rate&lt;/td&gt;
&lt;td&gt;Gauge&lt;/td&gt;
&lt;td&gt;10-minute rolling failure rate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Task Type Distribution&lt;/td&gt;
&lt;td&gt;Bar Chart&lt;/td&gt;
&lt;td&gt;Task count by type (SQL / Shell / Python)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Workflow Instance Trend&lt;/td&gt;
&lt;td&gt;Time-series Line Chart&lt;/td&gt;
&lt;td&gt;Workflow execution trends&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Worker Resource Monitoring&lt;/td&gt;
&lt;td&gt;Time-series Line Chart&lt;/td&gt;
&lt;td&gt;Integrated view of Thread Count + Memory + CPU&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alert Notification Trend&lt;/td&gt;
&lt;td&gt;Time-series Line Chart&lt;/td&gt;
&lt;td&gt;Count of successful/failed alert notifications&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API Response Time &amp;amp; Request Rate&lt;/td&gt;
&lt;td&gt;Time-series Line Chart&lt;/td&gt;
&lt;td&gt;DolphinScheduler API performance&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Here’s what the final dashboard looks like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F66fzjygv9lgqsjrnuqgo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F66fzjygv9lgqsjrnuqgo.jpg" width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Conclusion
&lt;/h2&gt;

&lt;p&gt;Let’s recap what we built in this article.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Metric collection:&lt;/strong&gt; Prometheus scrapes DolphinScheduler’s built-in &lt;code&gt;/actuator/prometheus&lt;/code&gt; endpoint.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alerting:&lt;/strong&gt; 10 alert rules cover service availability, task health, Worker status, and Master failover.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visualization:&lt;/strong&gt; Grafana dashboard ID &lt;code&gt;24841&lt;/code&gt; lets you import the monitoring dashboard with just a few clicks.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you’re running DolphinScheduler, it’s worth setting up monitoring like this.&lt;/p&gt;

&lt;p&gt;After all, &lt;strong&gt;being woken up by an alert at 3 a.m. is still better than being woken up by your manager the next morning.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If this guide helps you avoid even one “DolphinScheduler went down and nobody noticed” incident, consider giving it a like or saving it for later.&lt;/p&gt;

&lt;p&gt;And if you have questions or improvements, drop them in the comments. Let’s make data engineering a little less painful—one production pitfall at a time.&lt;/p&gt;

</description>
      <category>apachedolphinscheduler</category>
      <category>prometheus</category>
      <category>grafana</category>
      <category>ai</category>
    </item>
    <item>
      <title>🤖 From workflow orchestration to AI-native data operations! See how Apache DolphinScheduler powers governed, auditable Data Agents for safer enterprise automation. 🚀 #ApacheDolphinScheduler #DataAgents #AI</title>
      <dc:creator>Chen Debra</dc:creator>
      <pubDate>Thu, 03 Sep 2026 07:55:53 +0000</pubDate>
      <link>https://dev.to/chen_debra_3060b21d12b1b0/from-workflow-orchestration-to-ai-native-data-operations-see-how-apache-dolphinscheduler-powers-5dd6</link>
      <guid>https://dev.to/chen_debra_3060b21d12b1b0/from-workflow-orchestration-to-ai-native-data-operations-see-how-apache-dolphinscheduler-powers-5dd6</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/chen_debra_3060b21d12b1b0/from-workflow-orchestration-to-natural-language-how-apache-dolphinscheduler-can-power-enterprise-4f85" class="crayons-story__hidden-navigation-link"&gt;From Workflow Orchestration to Natural Language: How Apache DolphinScheduler Can Power Enterprise Data Agents&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/chen_debra_3060b21d12b1b0" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1533306%2Fc0ea3a94-ba17-47c8-9304-4571fb1adaf9.png" alt="chen_debra_3060b21d12b1b0 profile" class="crayons-avatar__image" width="260" height="231"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/chen_debra_3060b21d12b1b0" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Chen Debra
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Chen Debra
                
                
              
              &lt;div id="story-author-preview-content-4563213" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/chen_debra_3060b21d12b1b0" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1533306%2Fc0ea3a94-ba17-47c8-9304-4571fb1adaf9.png" class="crayons-avatar__image" alt="" width="260" height="231"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Chen Debra&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/chen_debra_3060b21d12b1b0/from-workflow-orchestration-to-natural-language-how-apache-dolphinscheduler-can-power-enterprise-4f85" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Sep 3&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/chen_debra_3060b21d12b1b0/from-workflow-orchestration-to-natural-language-how-apache-dolphinscheduler-can-power-enterprise-4f85" id="article-link-4563213"&gt;
          From Workflow Orchestration to Natural Language: How Apache DolphinScheduler Can Power Enterprise Data Agents
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/nlp"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;nlp&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/agents"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;agents&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/apachedolphinscheduler"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;apachedolphinscheduler&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/chen_debra_3060b21d12b1b0/from-workflow-orchestration-to-natural-language-how-apache-dolphinscheduler-can-power-enterprise-4f85" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;2&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/chen_debra_3060b21d12b1b0/from-workflow-orchestration-to-natural-language-how-apache-dolphinscheduler-can-power-enterprise-4f85#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            14 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>From Workflow Orchestration to Natural Language: How Apache DolphinScheduler Can Power Enterprise Data Agents</title>
      <dc:creator>Chen Debra</dc:creator>
      <pubDate>Thu, 03 Sep 2026 07:48:36 +0000</pubDate>
      <link>https://dev.to/chen_debra_3060b21d12b1b0/from-workflow-orchestration-to-natural-language-how-apache-dolphinscheduler-can-power-enterprise-4f85</link>
      <guid>https://dev.to/chen_debra_3060b21d12b1b0/from-workflow-orchestration-to-natural-language-how-apache-dolphinscheduler-can-power-enterprise-4f85</guid>
      <description>&lt;p&gt;As large language models (LLMs) and AI agents make their way into enterprise data environments, the way people interact with data platforms is changing. Instead of navigating complex tools and workflows, users can describe a business goal in natural language. An agent can then understand the intent, gather the necessary context, plan the required steps, and invoke platform capabilities to carry out the task.&lt;/p&gt;

&lt;p&gt;For enterprise data platforms, however, the real challenge is not simply teaching AI to “have a conversation.” The bigger question is how to enable AI to &lt;strong&gt;execute safely in production, validate results reliably, and maintain a complete audit trail throughout the process&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;At a recent session  hosted by the Apache DolphinScheduler community, we invited Li Qingwang, a Data Engineer from Cisco, Webex to share an enterprise Data Agent implementation based on Apache DolphinScheduler. His presentation explored how enterprise data platforms can evolve from traditional workflow orchestration backends into natural-language interfaces for data operations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/s9cQ_PZmS1U?si=vLY94BSJJOSmQUuT" rel="noopener noreferrer"&gt;Video Replay&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  About the Speaker
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuubgscjqjoc549xkes3x.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuubgscjqjoc549xkes3x.jpg" alt="Li Qingwang" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Li Qingwang&lt;/strong&gt; is a Big Data Platform Development Engineer at Cisco Webex and a Committer of Apache DolphinScheduler.&lt;/p&gt;

&lt;p&gt;The presentation focused on four key areas: &lt;strong&gt;evolving from a workflow orchestration platform into a data interface, defining the role and architecture of an Agent platform, establishing a governance, execution, and validation loop, and preparing the platform for capability expansion and production adoption.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. From Workflow Orchestration Platform to Data Interface
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.1 Starting with Apache DolphinScheduler Customization
&lt;/h3&gt;

&lt;p&gt;Apache DolphinScheduler provides a powerful set of capabilities, but enterprise adoption often requires customization to meet internal business and governance requirements. Through platform-level customization and extension, its general-purpose workflow orchestration capabilities can be packaged into an enterprise data platform that provides a unified production entry point for different teams.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdn0tlklw539vwcj7kijw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdn0tlklw539vwcj7kijw.jpg" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first challenge this approach addresses is the lack of consistency in how different data teams access and use the platform.&lt;/p&gt;

&lt;p&gt;At the access layer, capabilities such as &lt;strong&gt;Projects / Namespaces, tenants, permissions, and resource groups&lt;/strong&gt; can be standardized to provide different teams with a unified production entry point.&lt;/p&gt;

&lt;p&gt;At the task layer, the platform can support different task types, including SQL, Spark, Flink, and ETL, while establishing consistent standards for custom tasks and parameters.&lt;/p&gt;

&lt;p&gt;Once tasks enter production, the platform also needs to support release governance, including environment management, version control, dependency management, approvals, scheduling, and backfills.&lt;/p&gt;

&lt;p&gt;At the same time, comprehensive operational capabilities are required to manage task status, logs, alerts, reruns, troubleshooting, and auditing.&lt;/p&gt;

&lt;p&gt;With these platform-level capabilities in place, the role of Apache DolphinScheduler can be extended beyond workflow scheduling: it becomes the &lt;strong&gt;unified orchestration and execution foundation for production tasks across SQL, Spark, Flink, ETL, and other workloads&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.2 Once the Platform Is Shared, New Bottlenecks Emerge
&lt;/h3&gt;

&lt;p&gt;After workflow orchestration capabilities have been standardized and shared across the organization, the next bottlenecks often move beyond scheduling itself. They emerge around task development, release, operations, and maintenance.&lt;/p&gt;

&lt;p&gt;Bringing a production task to life involves multiple stages, from discovery and development to deployment and troubleshooting. These stages often remain heavily dependent on domain experts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F04vcb6oohp2qx43oi9iq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F04vcb6oohp2qx43oi9iq.jpg" width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first challenge is &lt;strong&gt;data discovery&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Enterprise data assets may be scattered across tables, Topics, and different data systems, while ownership and data definitions may reside with different teams. Users may know what data they need without knowing which table or Topic contains it—or which team owns it and can clarify the relevant business definition.&lt;/p&gt;

&lt;p&gt;The second challenge is &lt;strong&gt;development&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;SQL, code, and configuration can involve a significant technical learning curve, requiring support from data engineers or platform specialists. For business users who are not familiar with the underlying technologies, turning a business requirement into a runnable data workflow is a barrier in itself.&lt;/p&gt;

&lt;p&gt;The third challenge is &lt;strong&gt;production release&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Whether a task is ready for production is not simply a question of whether the code runs. Environment configuration, permissions, parameters, and potential operational risks must also be evaluated. These decisions often require platform or domain expertise.&lt;/p&gt;

&lt;p&gt;The fourth challenge is &lt;strong&gt;troubleshooting&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When something goes wrong, engineers may need to correlate logs, metrics, source systems, and target systems to identify the root cause. Troubleshooting is no longer about checking the status of a single task; it requires evidence from multiple systems.&lt;/p&gt;

&lt;p&gt;As platforms become more open and accessible, reliance on experts can therefore become a new bottleneck: &lt;strong&gt;users know what they want to achieve, but still depend on experts for data discovery, development, production release, and operations.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is where Data Agents can make a meaningful difference.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Defining the Role and Architecture of an Agent Platform
&lt;/h2&gt;

&lt;p&gt;Traditional data platforms focus primarily on &lt;strong&gt;how to execute data tasks&lt;/strong&gt;. Data Agents address a different question: &lt;strong&gt;how users can interact with and operate data platforms more naturally.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At its core, a Data Agent can be understood through three fundamental actions:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understand business intent, execute within governance boundaries, and validate outcomes with traceable evidence.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.1 The Agent Platform as a Governance-First AI Operations Layer
&lt;/h3&gt;

&lt;p&gt;An enterprise Data Agent is not simply a chatbot added to an existing data platform. It is an AI interaction and operations layer built on top of the organization's existing production governance framework.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5bd3220nm8txbh267k6f.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5bd3220nm8txbh267k6f.jpg" width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Its core positioning can be summarized as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Natural-language data operations + production-grade governance.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The platform needs to provide four capabilities simultaneously.&lt;/p&gt;

&lt;p&gt;The first is &lt;strong&gt;Intent-driven&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Users no longer need to learn specific APIs or platform procedures before they can get started. They simply describe the outcome they want. The Agent interprets the goal, plans the required steps, and selects the appropriate tools to carry them out.&lt;/p&gt;

&lt;p&gt;The second is &lt;strong&gt;Governed&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Every production action taken by AI must be constrained by identity, permissions, risk controls, and approval policies. The Agent can plan an action, but it must not bypass the governance boundaries already established by the enterprise.&lt;/p&gt;

&lt;p&gt;The third is &lt;strong&gt;Auditable&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;An Agent interaction should not leave behind only a final result. The platform should retain the session, tool calls, decisions, approvals, and final artifacts, creating a complete and traceable record of what happened.&lt;/p&gt;

&lt;p&gt;The fourth is &lt;strong&gt;Verifiable&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A task should not be considered successful simply because the Agent generated valid SQL or configuration. It needs to be validated before release, and its runtime behavior and final results should be verified against logs and data evidence after execution.&lt;/p&gt;

&lt;p&gt;This leads to a clear principle: &lt;strong&gt;AI can handle planning, but every production action must pass through a unified governance and validation layer—the AI Harness.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2 Self-Service Data Agents: Six Areas of Transformation
&lt;/h3&gt;

&lt;p&gt;With this positioning, a Data Agent is not limited to generating SQL. It can support multiple stages of data work.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjc3ftb06dq13rbl0z3j1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjc3ftb06dq13rbl0z3j1.jpg" width="799" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;pipeline development&lt;/strong&gt;, users traditionally need to write code, SQL, and configuration manually. With an Agent, they can describe their requirements in natural language.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;troubleshooting&lt;/strong&gt;, engineers traditionally search through logs and metrics manually. An Agent can automatically gather relevant evidence and assist with diagnosis.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;platform operations&lt;/strong&gt;, users have traditionally relied on experts to operate the UI or APIs. Agents shift this model toward intent-driven, controlled execution.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;data discovery&lt;/strong&gt;, users traditionally search separately for jobs, tables, and owners. An Agent can retrieve metadata through natural-language queries.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;code review&lt;/strong&gt;, the context required for review is often distributed across multiple systems. An Agent can combine code diffs, sandbox results, risk information, and audit records to provide contextual assistance.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;knowledge reuse&lt;/strong&gt;, experts often answer the same questions repeatedly and provide the same operational support. Agents can turn this accumulated experience into domain knowledge and reusable Agent capabilities.&lt;/p&gt;

&lt;p&gt;The transformation is therefore not simply about replacing human operations with AI. It is about moving from &lt;strong&gt;manual construction, search, review, and support toward governed AI-assisted collaboration&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3 From a Single Question to a Complete Production Workflow
&lt;/h3&gt;

&lt;p&gt;From the user's perspective, the goal of a Data Agent is to provide a unified interface covering the entire data workflow.&lt;/p&gt;

&lt;p&gt;A user might first ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“What does this workflow do? What are the inputs, filters, aggregations, and outputs?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This represents &lt;strong&gt;discovery and understanding&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The user could then ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Read data from Kafka, build an ETL pipeline, and configure it to run as a daily workflow.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This moves into &lt;strong&gt;development and release&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When a task fails, the user might ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Latency suddenly increased last night. Help me identify the cause and recommend a fix.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This corresponds to &lt;strong&gt;monitoring and troubleshooting&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In an analytics scenario, the user could also ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Find trusted tables, analyze the metrics, and generate an explainable dashboard.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This covers &lt;strong&gt;analysis and visualization&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The Agent can also examine resource utilization and determine whether a workload is over-provisioned.&lt;/p&gt;

&lt;p&gt;In other words, a single interface can eventually cover:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data Engineering · Data Discovery · DataOps · Insight&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.4 Overall Architecture: An Enterprise AI Harness
&lt;/h3&gt;

&lt;p&gt;To bring these capabilities into production, the Agent itself is not enough. A complete enterprise-grade AI Harness is also required.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3exvr3ibgcmwyamxvxt1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3exvr3ibgcmwyamxvxt1.jpg" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the top is the &lt;strong&gt;interaction layer&lt;/strong&gt;, which provides Web, CLI, and MCP Client interfaces and can connect to AI clients such as Codex and Claude.&lt;/p&gt;

&lt;p&gt;Below that is the &lt;strong&gt;Agent orchestration layer&lt;/strong&gt;, responsible for intent understanding, task planning, context discovery, tool orchestration, and evidence summarization.&lt;/p&gt;

&lt;p&gt;The key layer is the &lt;strong&gt;AI Harness&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This layer handles identity and access control, sandbox validation, risk policies, approvals, idempotency, auditing, and tracing. It does not replace the Agent. Instead, it establishes the governance boundaries within which the Agent can perform production actions.&lt;/p&gt;

&lt;p&gt;Below the Harness is the &lt;strong&gt;tool and execution layer&lt;/strong&gt;, which includes Discovery, SQL / Spark / Flink / ETL, DS Workflow, and Observability.&lt;/p&gt;

&lt;p&gt;At the bottom are enterprise production systems, including Kafka, Catalog, Lakehouse, OLAP, and Compute.&lt;/p&gt;

&lt;p&gt;Within this architecture, &lt;strong&gt;Apache DolphinScheduler continues to provide workflow orchestration, scheduling, and execution capabilities&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The platform also needs dedicated state and audit storage to record information such as Session, Approval, Sandbox Result, Artifact, and Trace.&lt;/p&gt;

&lt;p&gt;The architecture therefore does not allow an Agent to directly operate production systems. Instead, a governance and validation layer is placed between the Agent and production systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.5 Agent Platform: Building an Ecosystem of Domain Agents
&lt;/h3&gt;

&lt;p&gt;Once a unified platform foundation is in place, it can evolve into an ecosystem of domain-specific Agents.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbh1ojc4juhzucdg7dthf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbh1ojc4juhzucdg7dthf.jpg" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These can include &lt;strong&gt;Data Engineering Agents&lt;/strong&gt; responsible for Flink SQL, Spark, ETL, and Workflow; &lt;strong&gt;Approval and Policy Agents&lt;/strong&gt; responsible for approval orchestration, policy evaluation, and risk blocking; and &lt;strong&gt;Sandbox Validation Agents&lt;/strong&gt; responsible for local syntax checks, Kafka samples, and remote sandbox validation. Human approval remains part of the process for high-risk scenarios.&lt;/p&gt;

&lt;p&gt;There can also be &lt;strong&gt;Workflow Observability Agents&lt;/strong&gt; responsible for status, logs, checkpoints, and source/target evidence; &lt;strong&gt;Discovery and Lineage Agents&lt;/strong&gt; responsible for metadata, owners, resources, and lineage; and platform-support Agents responsible for Sessions, Approvals, Traces, and failure evidence.&lt;/p&gt;

&lt;p&gt;These Agents do not each need to build their own governance framework. Instead, they share the same foundation:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP Entry Point, Identity, Sandbox, Policy, Approval, Audit, Trace, and Idempotency.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is one of the key differences between an enterprise-grade Agent platform and a collection of standalone AI applications: &lt;strong&gt;domain capabilities can continue to expand, while governance should remain as unified as possible.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Governance, Execution, and the Validation Loop
&lt;/h2&gt;

&lt;p&gt;If the second section addresses &lt;strong&gt;what a Data Agent should be&lt;/strong&gt;, the third focuses on &lt;strong&gt;how a Data Agent can execute safely&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The approach can be summarized in three principles:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A unified governance model with three execution paths; risk-based approval combined with pre-release validation; and a post-release feedback loop based on runtime and data evidence.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3.1 Governance and Execution Model: One Governance Framework, Three Paths
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft7u9iexuq5nw9yvbt0ne.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft7u9iexuq5nw9yvbt0ne.jpg" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A complete Agent request can be broken down into six steps.&lt;/p&gt;

&lt;p&gt;The first step is &lt;strong&gt;User Intent&lt;/strong&gt;: the user submits a business request in natural language.&lt;/p&gt;

&lt;p&gt;The second step is &lt;strong&gt;Agent Planning&lt;/strong&gt;: the Agent generates the required steps, SQL, or configuration based on the request.&lt;/p&gt;

&lt;p&gt;The third step is &lt;strong&gt;Context Discovery&lt;/strong&gt;: the Agent retrieves additional information such as metadata, ownership, and historical context.&lt;/p&gt;

&lt;p&gt;The fourth step is &lt;strong&gt;Harness Checks&lt;/strong&gt;: the system verifies identity, sandbox results, and risk, and determines what type of approval is required.&lt;/p&gt;

&lt;p&gt;The fifth step is &lt;strong&gt;Governed Execution&lt;/strong&gt;: the Agent invokes APIs through controlled wrappers.&lt;/p&gt;

&lt;p&gt;The sixth step is &lt;strong&gt;Audit and Result&lt;/strong&gt;: execution evidence is recorded and the final conclusion is returned to the user.&lt;/p&gt;

&lt;p&gt;On this basis, execution can be divided into three paths.&lt;/p&gt;

&lt;h3&gt;
  
  
  Read Path
&lt;/h3&gt;

&lt;p&gt;The Read Path is primarily used for discovery, status, logs, metadata, and other read-only information. It does not modify production state. The system records the operation for auditing before returning the result.&lt;/p&gt;

&lt;h3&gt;
  
  
  Change Path
&lt;/h3&gt;

&lt;p&gt;Changes require stricter controls. A typical flow is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sandbox → Risk Policy → Automatic / Human Approval / Block → Idempotent Execution After Approval&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In other words, an operation that changes production state cannot be executed simply because the Agent has generated a technically correct API request.&lt;/p&gt;

&lt;h3&gt;
  
  
  Observe Path
&lt;/h3&gt;

&lt;p&gt;The Observe Path collects runtime, source, target, and log evidence after a task has been released or whenever the user requests additional information.&lt;/p&gt;

&lt;p&gt;This creates a straightforward operating principle:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every request has a defined path, every high-risk action has a gate, and every result is auditable.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3.2 Risk-Based Approval: Automatic, Human, or Blocked
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsqvck6njcyfa6nrvkv4z.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsqvck6njcyfa6nrvkv4z.jpg" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Production operations should not all follow the same approval process. Instead, they can be classified according to risk.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;low-risk operations&lt;/strong&gt;, if the user has permission to operate on the target resource, sandbox validation has passed, and the user has confirmed the intended action, the operation can be automatically approved and proceed to governed execution.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;high-risk or high-impact operations&lt;/strong&gt;, such as modifying another user's resources or shared resources, changing a shared cluster, or operating where ownership boundaries are unclear, execution should pause and require human confirmation.&lt;/p&gt;

&lt;p&gt;Some situations should be &lt;strong&gt;blocked outright&lt;/strong&gt;, including invalid identities, failed syntax or data validation, attempts to deploy directly to production without validation, or operations that could potentially cause widespread or dangerous impact.&lt;/p&gt;

&lt;p&gt;The goal is not to introduce manual approval for every operation. Instead, it is to &lt;strong&gt;match the control mechanism and execution path to the level of risk&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Low-risk operations can remain efficient, high-risk operations can retain human oversight, and clearly unsafe operations can be stopped immediately.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.3 Pre-Release Validation: Catch Errors Before Production
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx4uo8fnmj3ttdosfjkqu.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx4uo8fnmj3ttdosfjkqu.jpg" width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A traditional data workflow may follow this pattern:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create → Release → Discover Error → Production Incident&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The problem is that many errors only become visible after a task reaches production. Agent-driven workflows aim to move validation earlier in the process.&lt;/p&gt;

&lt;p&gt;The first step is &lt;strong&gt;Plan&lt;/strong&gt;, where the task plan is generated.&lt;/p&gt;

&lt;p&gt;Next comes &lt;strong&gt;Local Sandbox&lt;/strong&gt;, where syntax and logic are validated.&lt;/p&gt;

&lt;p&gt;The workflow can then proceed to &lt;strong&gt;Remote Sample&lt;/strong&gt;, using Kafka samples or a cluster sandbox for additional validation.&lt;/p&gt;

&lt;p&gt;This is followed by &lt;strong&gt;Result Analysis&lt;/strong&gt;, where schema and business risks are evaluated.&lt;/p&gt;

&lt;p&gt;Only after these checks does the workflow move to &lt;strong&gt;Create &amp;amp; Release&lt;/strong&gt;, allowing the task to be safely deployed.&lt;/p&gt;

&lt;p&gt;The key is not to rely on a single validation step. Instead, the platform combines &lt;strong&gt;local execution, realistic sample data, remote sandbox validation, and structured result analysis&lt;/strong&gt; to identify errors and risks before they reach production.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.4 Post-Release Validation: From Submission to Verified Results
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fydyeb8qcp8y46q4v3psn.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fydyeb8qcp8y46q4v3psn.jpg" width="799" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Even when a task has passed pre-release validation and has been successfully deployed, the workflow is not necessarily complete.&lt;/p&gt;

&lt;p&gt;A true production feedback loop needs to track the process from task creation all the way to the final business outcome.&lt;/p&gt;

&lt;p&gt;The complete process includes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create / Release → Check Runtime Status → Review Logs → Diagnose Source / Target → Verify Business Results → Return Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The evidence collected during verification can include runtime status such as Running or Failed, recent logs and error messages, Kafka consumption status, and whether the target table has been populated successfully.&lt;/p&gt;

&lt;p&gt;The final response from a Data Agent should therefore go beyond “the task has been submitted” or “the API call succeeded.” Wherever possible, it should answer the questions that actually matter:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Did the task run successfully? Did the data actually flow? Did the target system produce the expected result?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This moves Agent validation beyond simply confirming that an API call succeeded toward &lt;strong&gt;verifying that the intended outcome was actually achieved&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Capability Expansion and Production Readiness
&lt;/h2&gt;

&lt;p&gt;Once governance, execution, and validation are unified on a common foundation, Data Agent capabilities no longer need to be limited to a single scenario. They can continuously expand across different areas of the data ecosystem.&lt;/p&gt;

&lt;p&gt;The core idea at this stage is straightforward: &lt;strong&gt;domain Agents can continue to evolve while reusing the same governance and audit foundation, turning individual expert knowledge into reusable platform capabilities.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4.1 Platform Expansion: Every Domain Can Become an Agent
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2miid753kg55c26vo15u.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2miid753kg55c26vo15u.jpg" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Predictive Operations Agent&lt;/strong&gt; can proactively identify potential failures, recommend resource adjustments, and execute remediation under defined policies.&lt;/p&gt;

&lt;p&gt;For data discovery, a &lt;strong&gt;Universal Discovery Agent&lt;/strong&gt; can search across jobs, Topics, tables, owners, lineage, and data-quality signals.&lt;/p&gt;

&lt;p&gt;For data development, a &lt;strong&gt;Pipeline Generation Agent&lt;/strong&gt; can generate pipelines from documentation, create workflows from schemas, and support cross-engine transformations.&lt;/p&gt;

&lt;p&gt;For analytics, a &lt;strong&gt;Business Insights Agent&lt;/strong&gt; can identify trusted data, generate queries and visualizations, and provide explanations.&lt;/p&gt;

&lt;p&gt;For data governance, a &lt;strong&gt;Data Quality Agent&lt;/strong&gt; can identify schema drift, distribution anomalies, and late-arriving data while helping improve governance tags.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Cost Optimization Agent&lt;/strong&gt; can analyze resource utilization and recommend runtime configurations, parallelism, and resource reservation strategies.&lt;/p&gt;

&lt;p&gt;These capabilities may belong to different domains, but adding another Agent should not require building another security and governance framework from scratch.&lt;/p&gt;

&lt;p&gt;The North Star for the entire system is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Domain capabilities can continue to expand, while production safety remains protected by a unified platform Harness.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  4.2 Business Value: Turning Expert Knowledge into Platform Capabilities
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu86jfpu00h0ok9i7xy7z.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu86jfpu00h0ok9i7xy7z.jpg" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From a business perspective, this architecture delivers value in four key areas.&lt;/p&gt;

&lt;p&gt;First is &lt;strong&gt;efficiency&lt;/strong&gt;. Natural-language interaction and Agents can accelerate pipeline development while reducing repetitive manual platform operations.&lt;/p&gt;

&lt;p&gt;Second is &lt;strong&gt;quality&lt;/strong&gt;. By moving validation earlier in the process, issues can be identified before they reach production, improving workflow reliability.&lt;/p&gt;

&lt;p&gt;Third is &lt;strong&gt;governance&lt;/strong&gt;. Every AI action is tied to an identity, while policy decisions can be audited throughout the entire process.&lt;/p&gt;

&lt;p&gt;Fourth is &lt;strong&gt;scale&lt;/strong&gt;. Domain Agents can be reused across teams and scenarios, reducing an organization's reliance on experts for repetitive support.&lt;/p&gt;

&lt;p&gt;Ultimately, the data platform itself may evolve:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Today: a UI / API-driven platform for experts.&lt;br&gt;
Tomorrow: an AI-native Agent platform.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The key is not simply to add an AI chat interface. It is to use &lt;strong&gt;governed, reusable Agents that understand production semantics&lt;/strong&gt; to capture, standardize, and scale capabilities that previously depended on individual experts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: From Workflow Orchestration to a Natural-Language Data Interface
&lt;/h2&gt;

&lt;p&gt;At the heart of the presentation is a simple idea: Data Agents are not designed to replace Apache DolphinScheduler. Instead, they change how users access and interact with the production capabilities already provided by DolphinScheduler.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2miid753kg55c26vo15u.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2miid753kg55c26vo15u.jpg" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First, &lt;strong&gt;the orchestration foundation remains unchanged&lt;/strong&gt;. Apache DolphinScheduler continues to provide core capabilities for workflow orchestration, task execution, monitoring, and operations.&lt;/p&gt;

&lt;p&gt;Second, &lt;strong&gt;the entry point changes&lt;/strong&gt;. Users no longer need to begin with a specific UI, API, or task configuration. They can start by describing a business goal, while the Agent connects that intent to data discovery, development, release, and troubleshooting.&lt;/p&gt;

&lt;p&gt;More importantly, &lt;strong&gt;governance and control mechanisms provide the foundation for safe execution&lt;/strong&gt;. The four principles—Intent-driven, Governed, Auditable, and Verifiable—work together to constrain production actions and keep Agent capabilities within enterprise governance boundaries.&lt;/p&gt;

&lt;p&gt;The real question for enterprise Data Agents, therefore, is not simply whether &lt;strong&gt;“AI can perform a data operation.”&lt;/strong&gt; The question is whether that operation can be carried out in a real production environment &lt;strong&gt;with the right permissions, clear boundaries, reliable validation, traceable evidence, and the ability to run continuously and safely&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;As the presentation concluded:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The value of a Data Agent is not that it can “have a conversation,” but that it enables the right data work to run safely, continuously, and verifiably.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As Data Agents become increasingly embedded in enterprise data platforms, Apache DolphinScheduler's core orchestration and execution capabilities will remain an important foundation for the entire architecture. On top of that foundation, an AI Harness can connect natural-language interaction, domain Agents, governance policies, approvals, sandboxes, auditing, and result validation—helping data platforms evolve from traditional &lt;strong&gt;expert-driven platforms&lt;/strong&gt; toward &lt;strong&gt;AI-native Agent platforms&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>nlp</category>
      <category>agents</category>
      <category>ai</category>
      <category>apachedolphinscheduler</category>
    </item>
  </channel>
</rss>
