Monitor Workflows with Kestra Dashboards

Get insights into your workflows with Dashboards.

Monitor Kestra executions with dashboards

The first time you access the main Dashboard, you’ll see the Welcome Page and you can click Create my first flow to launch a Guided Tour.

Once you have executed a flow, you will see your flow executions in the dashboard.

Dashboard page

The Dashboard page displays both the default dashboard and any custom dashboards you’ve created. To switch between dashboards, use the hamburger menu. If you have over 10 dashboards, type the dashboard name in the search bar to quickly find it. The same menu also lets you edit or delete existing dashboards. From your dashboard, you can apply and save filters, refresh data, and set an automatic periodic refresh.

Dashboard Main Page

Dashboards provide a load of useful data right at your finger tips, including:

  • Executions over time
  • Execution Status for Today, Yesterday as well as Last 30 days
  • Executions per namespace
  • Execution errors per namespace
  • List of failed Executions
  • List of error logs
  • A ratio of execution successes to total executions

Custom dashboards

Dashboards let you define custom queries and charts to visualize data on your executions, logs, and metrics. Rather than relying only on the default dashboard on Kestra’s home screen, you can create a custom dashboard with charts that answer specific questions and track key metrics. Each chart’s configuration can be modified individually using the pencil icon in the dashboard view.

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 is where you customize display names and descriptions, and choose whether to add legends and tooltips to complement the visualization. A chart’s data property is where you specify which Kestra data to use as a column, how you want the data displayed (e.g., an aggregate count or an ORDER BY), and add any filters you might want applied to the chart (e.g., REGEX match, greater or less than, or not Null).

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

Create a new custom dashboard as code

Clicking on the + Create new dashboard button opens a code editor where you can define the dashboard layout and data sources 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

Below is an example of a dashboard definition that displays executions over time, flow execution success ratio, a table that uses metrics to display the sum of sales per namespace, a table that shows the log count by level per namespace, and a Markdown insights 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.

Exporting data

Table data can be exported as a CSV file by hovering over the top-right corner and clicking the download icon. This enables dashboard users to build custom queries in Dashboards and to export data with one click without having to worry about pagination.

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

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

Column properties

Each entry in data.columns supports the following properties:

PropertyDescription
fieldThe only required property; specifies which field from the data source to use
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
  • REGEX
  • STARTS_WITH

Was this page helpful?