A DSL for programmatically generating Grafana dashboards. Currently, this module does not interface with Grafana's API. Instead, write the configurations to disk and configure Grafana to load the dashboards.
[dashboards.json]
enabled = true
path = /var/lib/dashboards
npm install -s grafana-dsl
import dashboard from 'grafana-dsl';
const backendDashboard = dashboard()
.title('Backend Dashboard')
.row(row => row()
.graohPanel(panel => panel()
.title('CPU')
.span(12)
.target(target => target()
.expr('node_cpu')
.datasource('Prometheus'))
.alert(alert=> alert()
.name('High CPU')
.notifications([1])
.condition(condition => condition()
.when('max')
.of(1)
.isAbove(50)))));
// output
require('fs').writeFileSync(__dirname + '/backendDashboard.json', JSON.stringify(backendDashboard.serialize()));
In addition to the above syntax, you can also create objects like rows, panels, alerts, and more directly. This pattern enables reusable configuration components.
import dashboard, { graohPanel } from 'grafana-dsl';
const cpuGraph = graphPanel()
.title('CPU')
.span(12)
.target(target => target()
.expr('')
.datasource('Prometheus'))
.alert(alert => alert()
.name('High CPU')
.notifications([1])
.condition(condition => condition()
.when('avg')
.of(1)
.isAbove(50)));
const backendDashboard = dashboard()
.row(row => row()
.graphPanel(cpuGraph));
// output
require('fs').writeFileSync(__dirname + '/backendDashboard.json', JSON.stringify(backendDashboard.serialize()));
All top level DSL methods accept a config object. Use this parameter to directly pass raw Grafana configuration to accomodate cases where the DSL doesn't provide a required method.
method |
description |
default |
title |
Set dashboard title |
'' |
tags |
Set dashboard tags |
[] |
refresh |
Set refresh rate |
1m |
time(from,to='now') |
Set time range |
from=now-1h to=now |
template |
Add template variable. Accepts either a callback function receiving template DSL function, or a pre-configured template object |
|
row |
Add row. Accepts either a callback function receiving row DSL function, or a pre-built row object |
|
method |
description |
default |
name |
Set template variable name |
'' |
type |
Set template variable type (e.g: query,custom) |
'' |
multi(val=true) |
Toggle multi-select |
false |
includeAll(val=true) |
Include all option |
false |
query |
Template variable query. For type=custom , a comma delimited list of options |
|
datasource |
For type=query , set the datasource |
|
regex |
For type=query , apply a regex against each return value |
|
refreshOnLoad |
Sets refresh=1 to enable variable refresh on dashboard load |
|
refreshOnTimeChange |
Sets refresh=2 to enable variable refresh on time change |
|
method |
description |
default |
title |
Set row title |
'' |
singleStatPanel |
Accepts either a callback function receiving singleStatPanel DSL function, or a pre-configured singleStatPanel object |
|
graphPanel |
Accepts either a callback function receiving graphPanel DSL function, or a pre-configured graphPanel object |
|
method |
description |
default |
title |
Set panel title |
'' |
span |
Set panel span (Out of 12 columns) |
12 |
datasource |
Set panel datasource |
'' |
lines |
Toggle lines draw mode |
true |
points |
Toggle lines draw mode |
false |
bars |
Toggle lines draw mode |
false |
format |
Shortcut for setting yaxes.format |
`` |
fill |
Set fill transparency 0-10 |
1 |
yaxes |
Configure yaxes for graph. Accepts either a callback function receiving yaxes DSL function, or a pre-configured yaxes object |
|
target |
Add target to panel. Accepts either a callback function receiving target DSL function, or a pre-configured target object |
|
alert |
Configure alerting for panel. Accepts either a callback function receiving an alert DSL function, or a pre-configured alert object |
|
method |
description |
default |
title |
Set panel title |
'' |
span |
Set panel span (Out of 12 columns) |
12 |
format |
Set data format (e.g short, percent) |
'short' |
datasource |
Set panel datasource |
'' |
target |
Add target to panel. Accepts either a callback function receiving target DSL function, or a pre-configured target object |
|
sparkline |
Enable sparklines. Accepts either a callback function receiving a sparkline DSL function, or a pre-configured sparkline object |
|
alert |
Configure alerting for panel. Accepts either a callback function receiving an alert DSL function, or a pre-configured alert object |
|
valueName |
Set value name property for panel |
'avg' |
Configure a panel target.
method |
description |
default |
expr |
The query to execute |
'' |
legendFormat |
Configure target's legend format |
|
Configure singlestat
panel sparkline.
method |
description |
default |
show(val=true) |
Show sparkline |
false |
full(val=true) |
Set sparkline to full background mode |
false |
fillColor({rgba(,,,)}) |
Set sparkline fill color |
'rgba(31, 118, 189, 0.18)' |
lineColor({rgb(,,,)}) |
Set sparkline line color |
'rgb(31, 120, 193)' |
Configure panel yaxes
for graphPanel
method |
description |
default |
format |
Set data format |
'short' |
show |
Show y axes |
true |
max |
Set max value |
`` |
min |
Set min value |
`` |
Configure a panel alert. Currently only for graphPanel
method |
description |
default |
name |
Set alert name |
'' |
frequency |
Set alert check frequency |
'' |
notifications([{0-9},]) |
Set alert notifications. Pass in the notification ID. You can find this from the notification edit page (e.g /alerting/notification/1/edit -> .notifications([1]) ) |
[] |
condition |
Configure an alert condition. Accepts either a callback function receiving a condition DSL function, or a pre-configured condition object |
|
Configure an alert condition.
method |
description |
default |
when |
e.g: avg,min,max,sum,median,count,last |
'avg' |
of(index,start='5m',end='now') |
Set the alert query target and window. The first param is the id of a configured panel target. If your panel has a single target, you would pass 1 |
index=null start='5m' end='now' |
isAbove(val) |
Set condition evaluator to gt |
|
isBelow(val) |
Set alert condition evaluator to lt |
|
isOutsideRange(from, to) |
Set alert condition evaluator to outside_range |
|
isWithintRange(from, to) |
Set alert condition evaluator to within_range |
|
hasNoValue |
Set alert condition evaluator to no_value |
|