Monitor Workflows with Kestra Dashboards

For the complete documentation index, see llms.txt. For a full content snapshot, see llms-full.txt. Append .md to any kestra.io/docs/* URL for plain Markdown.

The Dashboards page displays the default dashboard and any custom dashboards you’ve created. Switch between them using the hamburger menu — if you have more than 10, use the search bar. The same menu lets you edit or delete dashboards. From any dashboard you can apply and save filters, refresh data, and set an automatic periodic refresh.

Dashboard Main Page

Custom dashboards

Custom dashboards let you define queries and charts to visualize execution, log, and metric data. Edit each chart individually using the pencil icon in the dashboard view.

Build dashboards using the No Code editor (no YAML required) or by writing YAML directly. Both produce the same schema-validated output.

No Code editor

The No Code editor lets you design dashboards using structured forms. As you configure charts and data sources, YAML is generated in real time and the live preview stays in sync. Switch to YAML at any point for filters, dynamic queries, or advanced layout logic — both views reflect the same underlying definition.

Interactive demo

For a step-by-step walkthrough of building your first KPI chart using the No Code editor, see Build a KPI success ratio chart.

Chart types

Dashboards support six chart types: Bar, Pie, TimeSeries, Table, KPI, and Markdown. Each data chart type is composed of chartOptions and data.

A chart’s chartOptions property controls display names, descriptions, legends, and tooltips. The data property specifies the data source, which columns to display (including aggregations and sort order), and any filters to apply.

Each chart’s options are listed in the Chart Plugin Documentation where you can dive further into the properties of each type.

Common chart properties

All chart types share the following chartOptions properties:

PropertyRequiredDefaultDescription
displayNameYesThe title displayed on the chart
descriptionNoAn optional subtitle or description
widthNo6Width of the chart on a 12-column grid (1–12)

Bar chart

type: io.kestra.plugin.core.dashboard.chart.Bar

Compares categorical data across groups. Requires exactly one aggregation column.

Additional chartOptions properties:

PropertyRequiredDefaultDescription
columnYesThe data column to use as the x-axis categories
legend.enabledNotrueShow or hide the legend
tooltipNoALLTooltip display behavior: NONE, ALL, or SINGLE
charts:
- id: executions_per_namespace_bars
type: io.kestra.plugin.core.dashboard.chart.Bar
chartOptions:
displayName: Executions per Namespace
description: Execution count per namespace
column: namespace
legend:
enabled: true
data:
type: io.kestra.plugin.core.dashboard.data.Executions
columns:
namespace:
field: NAMESPACE
state:
field: STATE
total:
displayName: Executions
agg: COUNT

Pie chart

type: io.kestra.plugin.core.dashboard.chart.Pie

Shows proportions and distributions. Requires exactly one aggregation column.

Additional chartOptions properties:

PropertyRequiredDefaultDescription
graphStyleNoDONUTChart style: PIE or DONUT
colorByColumnNoThe column whose values determine segment colors
legend.enabledNotrueShow or hide the legend
tooltipNoALLTooltip display behavior: NONE, ALL, or SINGLE
charts:
- id: executions_pie
type: io.kestra.plugin.core.dashboard.chart.Pie
chartOptions:
displayName: Total Executions
description: Total executions per state
graphStyle: DONUT
colorByColumn: state
legend:
enabled: true
data:
type: io.kestra.plugin.core.dashboard.data.Executions
columns:
state:
field: STATE
total:
agg: COUNT

TimeSeries chart

type: io.kestra.plugin.core.dashboard.chart.TimeSeries

Tracks trends over time. Requires between one and two aggregation columns.

Additional chartOptions properties:

PropertyRequiredDefaultDescription
columnYesThe data column to use as the time (x) axis
colorByColumnNoThe column whose values determine series colors
legend.enabledNotrueShow or hide the legend
tooltipNoALLTooltip display behavior: NONE, ALL, or SINGLE

The graphStyle property can be set per column in data.columns to control how each series is rendered: LINES, BARS, or POINTS. It defaults to LINES when an aggregation is set.

charts:
- id: executions_timeseries
type: io.kestra.plugin.core.dashboard.chart.TimeSeries
chartOptions:
displayName: Executions
description: Executions last week
column: date
colorByColumn: state
legend:
enabled: true
data:
type: io.kestra.plugin.core.dashboard.data.Executions
columns:
date:
field: START_DATE
displayName: Date
state:
field: STATE
total:
displayName: Executions
agg: COUNT
graphStyle: BARS
duration:
displayName: Duration
field: DURATION
agg: SUM
graphStyle: LINES

KPI chart

type: io.kestra.plugin.core.dashboard.chart.KPI

Displays a single key performance indicator value. Requires exactly one aggregation column. Use ExecutionsKPI, FlowsKPI, LogsKPI, or MetricsKPI as the data type for KPI charts.

To display a ratio (e.g., success rate), use the numerator property to filter the subset of rows that count toward the numerator. All rows matching the chart’s where clause form the denominator.

Additional chartOptions properties:

PropertyRequiredDefaultDescription
numberTypeNoFLATDisplay format: FLAT (raw count) or PERCENTAGE
charts:
- id: kpi_success_percentage
type: io.kestra.plugin.core.dashboard.chart.KPI
chartOptions:
displayName: Success Ratio
numberType: PERCENTAGE
width: 3
data:
type: io.kestra.plugin.core.dashboard.data.ExecutionsKPI
columns:
field: FLOW_ID
agg: COUNT
numerator:
- field: STATE
type: IN
values:
- SUCCESS
where:
- field: NAMESPACE
type: EQUAL_TO
value: "company.team"

Table

type: io.kestra.plugin.core.dashboard.chart.Table

Displays structured data in a sortable, paginated table.

Additional chartOptions properties:

PropertyRequiredDefaultDescription
header.enabledNotrueShow or hide the table header row
pagination.enabledNotrueShow or hide table pagination controls

Column-level properties unique to tables:

PropertyRequiredDefaultDescription
columnAlignmentNoLEFTText alignment within the column: LEFT, RIGHT, or CENTER
charts:
- id: table_metrics
type: io.kestra.plugin.core.dashboard.chart.Table
chartOptions:
displayName: Sum of sales per namespace
data:
type: io.kestra.plugin.core.dashboard.data.Metrics
columns:
namespace:
field: NAMESPACE
value:
field: VALUE
agg: SUM
columnAlignment: RIGHT
where:
- field: NAME
type: EQUAL_TO
value: sales_count
orderBy:
- column: value
order: DESC

Markdown

type: io.kestra.plugin.core.dashboard.chart.Markdown

Adds explanatory text or context alongside data charts. No data property is required.

The content of a Markdown chart is set via the source property. Two source types are available:

Text — inline Markdown content:

charts:
- id: markdown_insight
type: io.kestra.plugin.core.dashboard.chart.Markdown
chartOptions:
displayName: Chart Insights
description: How to interpret this chart
source:
type: Text
content: |
## Execution Success Rate
This chart displays the percentage of successful executions over time.
- A **higher success rate** indicates stable and reliable workflows.
- Sudden **drops** may signal issues in task execution or external dependencies.

FlowDescription — pulls the description from a specific flow:

charts:
- id: markdown_flow_desc
type: io.kestra.plugin.core.dashboard.chart.Markdown
chartOptions:
displayName: Flow Overview
source:
type: FlowDescription
namespace: company.team
flowId: my_flow

Dashboard as code

The + Create new dashboard button opens the editor. Select the YAML view to define the dashboard layout and charts directly as code.

The top-level dashboard properties are:

PropertyDescription
titleDashboard title
descriptionOptional description
timeWindow.defaultDefault time range, as an ISO 8601 duration (e.g., P7D)
timeWindow.maxMaximum selectable time range (e.g., P365D)
chartsList of chart definitions

The example below defines a dashboard with a TimeSeries execution chart, a success ratio KPI, two data tables, and a Markdown panel:

Expand for an example dashboard definition
title: Getting Started
description: First custom dashboard
timeWindow:
default: P7D
max: P365D
charts:
- id: executions_timeseries
type: io.kestra.plugin.core.dashboard.chart.TimeSeries
chartOptions:
displayName: Executions
description: Executions last week
legend:
enabled: true
column: date
colorByColumn: state
data:
type: io.kestra.plugin.core.dashboard.data.Executions
columns:
date:
field: START_DATE
displayName: Date
state:
field: STATE
total:
displayName: Executions
agg: COUNT
graphStyle: BARS
duration:
displayName: Duration
field: DURATION
agg: SUM
graphStyle: LINES
- id: kpi_success_percentage
type: io.kestra.plugin.core.dashboard.chart.KPI
chartOptions:
displayName: Success Ratio
numberType: PERCENTAGE
width: 3
data:
type: io.kestra.plugin.core.dashboard.data.ExecutionsKPI
columns:
field: FLOW_ID
agg: COUNT
numerator:
- field: STATE
type: IN
values:
- SUCCESS
where:
- field: NAMESPACE
type: EQUAL_TO
value: "company.team"
- id: table_metrics
type: io.kestra.plugin.core.dashboard.chart.Table
chartOptions:
displayName: Sum of sales per namespace
data:
type: io.kestra.plugin.core.dashboard.data.Metrics
columns:
namespace:
field: NAMESPACE
value:
field: VALUE
agg: SUM
where:
- field: NAME
type: EQUAL_TO
value: sales_count
- field: NAMESPACE
type: IN
values:
- dev_graph
- prod_graph
orderBy:
- column: value
order: DESC
- id: table_logs
type: io.kestra.plugin.core.dashboard.chart.Table
chartOptions:
displayName: Log count by level for filtered namespace
data:
type: io.kestra.plugin.core.dashboard.data.Logs
columns:
level:
field: LEVEL
count:
agg: COUNT
where:
- field: NAMESPACE
type: IN
values:
- dev_graph
- prod_graph
- id: markdown
type: io.kestra.plugin.core.dashboard.chart.Markdown
chartOptions:
displayName: Chart Insights
description: How to interpret this chart
source:
type: Text
content: |
## Execution Success Rate
This chart displays the percentage of successful executions over time.
- A **higher success rate** indicates stable and reliable workflows.
- Sudden **drops** may signal issues in task execution or external dependencies.
- Use this insight to identify trends and optimize performance.

More dashboard examples are available in the Enterprise Edition Examples repository.

Exporting data

Export table data as CSV using the download icon in the top-right corner of a table chart — no pagination required.

Dashboard Table Export

Querying data

The data property of a chart defines the type of data that is queried and displayed. The type determines which columns are available.

Data source types

Dashboards can query data from these source types:

TypeDescription
io.kestra.plugin.core.dashboard.data.ExecutionsWorkflow execution data
io.kestra.plugin.core.dashboard.data.ExecutionsKPIExecution data for KPI charts (supports numerator)
io.kestra.plugin.core.dashboard.data.FlowsFlow definition data
io.kestra.plugin.core.dashboard.data.FlowsKPIFlow data for KPI charts (supports numerator)
io.kestra.plugin.core.dashboard.data.LogsLog entries produced by your workflows
io.kestra.plugin.core.dashboard.data.LogsKPILog data for KPI charts (supports numerator)
io.kestra.plugin.core.dashboard.data.MetricsMetrics emitted by your plugins
io.kestra.plugin.core.dashboard.data.MetricsKPIMetrics data for KPI charts (supports numerator)
io.kestra.plugin.core.dashboard.data.TriggersTrigger state and scheduling data
io.kestra.plugin.ee.dashboard.data.AssetsAsset inventory data (EE and Cloud only). Not filtered by the dashboard time range — charts always reflect the current inventory.

Available fields by data source

After defining the data source, specify the columns to display in the chart. Each column is defined by its field. The fields available depend on the data source type:

Executions / ExecutionsKPI:

FieldDescription
IDExecution ID
NAMESPACENamespace of the flow
FLOW_IDFlow identifier
FLOW_REVISIONFlow revision number
STATEExecution state (e.g., SUCCESS, FAILED)
DURATIONExecution duration
LABELSKey-value labels attached to the execution
START_DATEExecution start timestamp
END_DATEExecution end timestamp
TRIGGER_EXECUTION_IDID of the execution that triggered this one
SCOPEExecution scope

Flows / FlowsKPI:

FieldDescription
IDFlow identifier
NAMESPACENamespace of the flow
REVISIONFlow revision number

Logs / LogsKPI:

FieldDescription
NAMESPACENamespace of the flow
FLOW_IDFlow identifier
EXECUTION_IDAssociated execution ID
TASK_IDTask that produced the log
DATELog timestamp
TASK_RUN_IDTask run identifier
ATTEMPT_NUMBERTask attempt number
TRIGGER_IDTrigger identifier
LEVELLog level (e.g., INFO, WARN, ERROR)
MESSAGELog message text (cannot be aggregated)

Metrics / MetricsKPI:

FieldDescription
NAMESPACENamespace of the flow
FLOW_IDFlow identifier
TASK_IDTask that emitted the metric
EXECUTION_IDAssociated execution ID
TASK_RUN_IDTask run identifier
TYPEMetric type
NAMEMetric name
VALUEMetric value
DATEMetric timestamp

Triggers:

FieldDescription
IDTrigger identifier
NAMESPACENamespace of the flow
FLOW_IDFlow identifier
TRIGGER_IDTrigger identifier within the flow
EXECUTION_IDLast execution ID triggered
NEXT_EXECUTION_DATEScheduled next execution date
WORKER_IDWorker handling the trigger

Assets (EE and Cloud only)

FieldDescription
IDAsset identifier
TYPEAsset type (e.g., io.kestra.plugin.ee.assets.VM)
NAMESPACEAsset namespace
DISPLAY_NAMEAsset display name
METADATAAsset metadata map. Use metadataKey in the column definition to group or filter by a specific metadata key.
CREATEDAsset creation timestamp
UPDATEDAsset last updated timestamp

Asset charts are not filtered by the dashboard time range — they always reflect the current inventory. Assets is compatible with Bar, Pie, and Table chart types. Use NAMESPACE in a where clause to scope results to a specific namespace.

Column properties

Each entry in data.columns supports the following properties:

PropertyDescription
fieldRequired. The field from the data source to display.
displayNameSets the label displayed in the chart
aggAggregation function: AVG, COUNT, MAX, MIN, or SUM
graphStyleSeries render style for TimeSeries charts: LINES, BARS, or POINTS (defaults to LINES when agg is set)
columnAlignmentColumn text alignment for Table charts: LEFT, RIGHT, or CENTER
labelKeyWhen field: LABELS, filters to a specific label key

Filtering data

Use the where property to filter the result set before it is displayed. Filters can apply to any field in the data source. Multiple conditions in where are combined with AND by default. To use OR logic, set type: OR on a condition.

Available filter types:

  • CONTAINS
  • ENDS_WITH
  • EQUAL_TO
  • GREATER_THAN
  • GREATER_THAN_OR_EQUAL_TO
  • IN
  • IS_FALSE
  • IS_NOT_NULL
  • IS_NULL
  • IS_TRUE
  • LESS_THAN
  • LESS_THAN_OR_EQUAL_TO
  • NOT_EQUAL_TO
  • NOT_IN
  • OR
  • PREFIX
  • REGEX
  • STARTS_WITH

Was this page helpful?