ceph/monitoring/ceph-mixin/dashboards/utils.libsonnet

755 lines
22 KiB
Plaintext

local g = import 'grafonnet/grafana.libsonnet';
local pieChartPanel = import 'piechart_panel.libsonnet';
local timeSeries = import 'timeseries_panel.libsonnet';
{
_config:: error 'must provide _config',
dashboardSchema(title,
description,
uid,
time_from,
refresh,
schemaVersion,
tags,
timezone)::
g.dashboard.new(title=title,
description=description,
uid=uid,
time_from=time_from,
refresh=refresh,
schemaVersion=schemaVersion,
tags=tags,
timezone=timezone),
graphPanelSchema(aliasColors,
title,
description,
nullPointMode,
stack,
formatY1,
formatY2,
labelY1,
labelY2,
min,
fill,
datasource,
legend_alignAsTable=false,
legend_avg=false,
legend_min=false,
legend_max=false,
legend_current=false,
legend_values=false)::
g.graphPanel.new(aliasColors=aliasColors,
title=title,
description=description,
nullPointMode=nullPointMode,
stack=stack,
formatY1=formatY1,
formatY2=formatY2,
labelY1=labelY1,
labelY2=labelY2,
min=min,
fill=fill,
datasource=datasource,
legend_alignAsTable=legend_alignAsTable,
legend_avg=legend_avg,
legend_min=legend_min,
legend_max=legend_max,
legend_current=legend_current,
legend_values=legend_values),
addTargetSchema(
expr,
legendFormat='',
format='time_series',
intervalFactor=1,
instant=null,
datasource=null,
step=null,
interval=null,
range=null,
hide=null,
metric=null,
aggregation=null,
alias=null,
decimals=null,
displayAliasType=null,
displayType=null,
displayValueWithAlias=null,
units=null,
valueHandler=null,
warn=null,
crit=null,
exemplar=null,
)::
g.prometheus.target(expr=expr,
legendFormat=legendFormat,
format=format,
intervalFactor=intervalFactor,
instant=instant,
datasource=datasource) + {
[if step != null then 'step']: step,
[if interval != null then 'interval']: interval,
[if range != null then 'range']: range,
[if hide != null then 'hide']: hide,
[if metric != null then 'metric']: metric,
[if aggregation != null then 'aggregation']: aggregation,
[if alias != null then 'alias']: alias,
[if decimals != null then 'decimals']: decimals,
[if displayAliasType != null then 'displayAliasType']: displayAliasType,
[if displayType != null then 'displayType']: displayType,
[if displayValueWithAlias != null then 'displayValueWithAlias']: displayValueWithAlias,
[if units != null then 'units']: units,
[if valueHandler != null then 'valueHandler']: valueHandler,
[if warn != null then 'warn']: warn,
[if crit != null then 'crit']: crit,
[if exemplar != null then 'exemplar']: exemplar,
},
addTemplateSchema(name,
datasource,
query,
refresh,
includeAll,
sort,
label,
regex,
hide='',
multi=false,
allValues=null,
current=null)::
g.template.new(name=name,
datasource=datasource,
query=query,
refresh=refresh,
includeAll=includeAll,
sort=sort,
label=label,
regex=regex,
hide=hide,
multi=multi,
allValues=allValues,
current=current),
addAnnotationSchema(builtIn,
datasource,
enable,
hide,
iconColor,
name,
type)::
g.annotation.datasource(builtIn=builtIn,
datasource=datasource,
enable=enable,
hide=hide,
iconColor=iconColor,
name=name,
type=type),
addRowSchema(
collapse,
showTitle,
title,
collapsed=null
)::
g.row.new(collapse=collapse, showTitle=showTitle, title=title) + {
[if collapsed != null then 'collapsed']: collapsed,
},
addSingleStatSchema(colors,
datasource,
format,
title,
description,
valueName,
colorValue,
gaugeMaxValue,
gaugeShow,
sparklineShow,
thresholds)::
g.singlestat.new(colors=colors,
datasource=datasource,
format=format,
title=title,
description=description,
valueName=valueName,
colorValue=colorValue,
gaugeMaxValue=gaugeMaxValue,
gaugeShow=gaugeShow,
sparklineShow=sparklineShow,
thresholds=thresholds),
addPieChartSchema(aliasColors,
datasource,
description,
legendType,
pieType,
title,
valueName)::
g.pieChartPanel.new(aliasColors=aliasColors,
datasource=datasource,
description=description,
legendType=legendType,
pieType=pieType,
title=title,
valueName=valueName),
addStyle(alias,
colorMode,
colors,
dateFormat,
decimals,
mappingType,
pattern,
thresholds,
type,
unit,
valueMaps)::
{
alias: alias,
colorMode: colorMode,
colors: colors,
dateFormat: dateFormat,
decimals: decimals,
mappingType: mappingType,
pattern: pattern,
thresholds: thresholds,
type: type,
unit: unit,
valueMaps: valueMaps,
},
matchers()::
local clusterMatcher = '%s=~"$cluster"' % $._config.clusterLabel;
{
// Common labels
matchers: (if $._config.showMultiCluster then clusterMatcher + ', ' else ''),
},
addClusterTemplate()::
$.addTemplateSchema(
'cluster',
'$datasource',
'label_values(ceph_health_status, %s)' % $._config.clusterLabel,
1,
false,
1,
'cluster',
'(.*)',
if !$._config.showMultiCluster then 'variable' else '',
multi=false,
allValues=null,
),
overviewStyle(alias,
pattern,
type,
unit,
colorMode=null,
thresholds=[],
valueMaps=[])::
$.addStyle(alias,
colorMode,
[
'rgba(245, 54, 54, 0.9)',
'rgba(237, 129, 40, 0.89)',
'rgba(50, 172, 45, 0.97)',
],
'YYYY-MM-DD HH:mm:ss',
2,
1,
pattern,
thresholds,
type,
unit,
valueMaps),
simpleGraphPanel(alias,
title,
description,
formatY1,
labelY1,
min,
expr,
legendFormat,
x,
y,
w,
h)::
$.graphPanelSchema(alias,
title,
description,
'null',
false,
formatY1,
'short',
labelY1,
null,
min,
1,
'$datasource')
.addTargets(
[$.addTargetSchema(expr, legendFormat)]
) + { type: 'timeseries' } + { fieldConfig: { defaults: { unit: formatY1, custom: { fillOpacity: 8, showPoints: 'never' } } } } + { gridPos: { x: x, y: y, w: w, h: h } },
simpleSingleStatPanel(format,
title,
description,
valueName,
expr,
instant,
targetFormat,
x,
y,
w,
h)::
$.addSingleStatSchema(['#299c46', 'rgba(237, 129, 40, 0.89)', '#d44a3a'],
'$datasource',
format,
title,
description,
valueName,
false,
100,
false,
false,
'')
.addTarget($.addTargetSchema(expr, '', targetFormat, 1, instant)) + {
gridPos: { x: x, y: y, w: w, h: h },
},
gaugeSingleStatPanel(format,
title,
description,
valueName,
colorValue,
gaugeMaxValue,
gaugeShow,
sparkLineShow,
thresholds,
expr,
targetFormat,
x,
y,
w,
h)::
$.addSingleStatSchema(['#299c46', 'rgba(237, 129, 40, 0.89)', '#d44a3a'],
'$datasource',
format,
title,
description,
valueName,
colorValue,
gaugeMaxValue,
gaugeShow,
sparkLineShow,
thresholds)
.addTarget($.addTargetSchema(expr, '', targetFormat)) + { gridPos: { x:
x, y: y, w: w, h: h } },
simplePieChart(alias, description, title)::
$.addPieChartSchema(alias,
'$datasource',
description,
'Under graph',
'pie',
title,
'current'),
addStatPanel(
title,
description='',
transparent=false,
datasource=null,
color={},
unit='none',
overrides=[],
gridPosition={},
colorMode='none',
graphMode='none',
justifyMode='auto',
orientation='horizontal',
textMode='auto',
reducerFunction='lastNotNull',
pluginVersion='9.1.3',
decimals=0,
interval=null,
maxDataPoints=null,
thresholdsMode='absolute',
rootColorMode=null,
rootColors=null,
cornerRadius=null,
flipCard=null,
flipTime=null,
fontFormat=null,
displayName=null,
isAutoScrollOnOverflow=null,
isGrayOnNoData=null,
isHideAlertsOnDisable=null,
isIgnoreOKColors=null,
)::
g.statPanel.new(
title=title,
description=description,
transparent=transparent,
datasource=datasource,
unit=unit,
colorMode=colorMode,
graphMode=graphMode,
justifyMode=justifyMode,
orientation=orientation,
textMode=textMode,
reducerFunction=reducerFunction,
pluginVersion=pluginVersion,
decimals=decimals,
thresholdsMode=thresholdsMode,
) + {
[if interval != null then 'interval']: interval,
[if maxDataPoints != null then 'maxDataPoints']: maxDataPoints,
[if gridPosition != {} then 'gridPos']: gridPosition,
[if rootColorMode != null then 'colorMode']: rootColorMode,
[if rootColors != {} then 'colors']: rootColors,
[if cornerRadius != null then 'cornerRadius']: cornerRadius,
[if flipCard != null then 'flipCard']: flipCard,
[if flipTime != null then 'flipTime']: flipTime,
[if fontFormat != null then 'fontFormat']: fontFormat,
[if displayName != null then 'displayName']: displayName,
[if isAutoScrollOnOverflow != null then 'isAutoScrollOnOverflow']: isAutoScrollOnOverflow,
[if isGrayOnNoData != null then 'isGrayOnNoData']: isGrayOnNoData,
[if isHideAlertsOnDisable != null then 'isHideAlertsOnDisable']: isHideAlertsOnDisable,
[if isIgnoreOKColors != null then 'isIgnoreOKColors']: isIgnoreOKColors,
},
addAlertListPanel(
title,
datasource=null,
gridPosition={},
alertInstanceLabelFilter=null,
alertName=null,
dashboardAlerts=null,
groupBy=null,
groupMode=null,
maxItems=null,
sortOrder=null,
stateFilter=null,
viewMode='list'
)::
g.alertlist.new(
title=title,
datasource=datasource,
) + {
gridPos: gridPosition,
options: {
[if alertInstanceLabelFilter != null then 'alertInstanceLabelFilter']: alertInstanceLabelFilter,
[if alertName != null then 'alertName']: alertName,
[if dashboardAlerts != null then 'dashboardAlerts']: dashboardAlerts,
[if groupBy != null then 'groupBy']: groupBy,
[if groupMode != null then 'groupMode']: groupMode,
[if maxItems != null then 'maxItems']: maxItems,
[if sortOrder != null then 'sortOrder']: sortOrder,
[if stateFilter != null then 'stateFilter']: stateFilter,
viewMode: viewMode,
},
},
addCustomTemplate(name='',
query='',
current='',
valuelabels={},
refresh=0,
label='Interval',
auto_count=10,
auto_min='2m',
options=[],
auto=null)::
g.template.interval(name=name,
query=query,
current=current,
label=label,
auto_count=auto_count,
auto_min=auto_min,) + {
options: options,
refresh: refresh,
valuelabels: valuelabels,
[if auto != null then 'auto']: auto,
},
addGaugePanel(title='',
description='',
transparent=false,
datasource='$datasource',
gridPosition={},
pluginVersion='9.1.3',
unit='percentunit',
instant=false,
reducerFunction='lastNotNull',
steps=[],
max=1,
min=0,
maxDataPoints=100,
interval='1m')::
g.gaugePanel.new(title=title,
description=description,
transparent=transparent,
datasource=datasource,
pluginVersion=pluginVersion,
unit=unit,
reducerFunction=reducerFunction,
max=max,
min=min) + {
gridPos: gridPosition,
maxDataPoints: maxDataPoints,
interval: interval,
},
addBarGaugePanel(title='',
description='',
datasource='${DS_PROMETHEUS}',
gridPosition={},
unit='percentunit',
thresholds={})::
g.barGaugePanel.new(title, description, datasource, unit, thresholds) + {
gridPos: gridPosition,
},
addTableExtended(
title='',
datasource=null,
description=null,
sort=null,
styles='',
transform=null,
pluginVersion='9.1.3',
options=null,
gridPosition={},
custom=null,
decimals=null,
thresholds=null,
unit=null,
overrides=[],
color=null
)::
g.tablePanel.new(datasource=datasource,
description=description,
sort=sort,
styles=styles,
title=title,
transform=transform) + {
pluginVersion: pluginVersion,
gridPos: gridPosition,
[if options != null then 'options']: options,
fieldConfig+: {
defaults+: {
[if custom != null then 'custom']: custom,
[if decimals != null then 'decimals']: decimals,
[if thresholds != null then 'thresholds']: thresholds,
[if unit != null then 'unit']: unit,
[if color != null then 'color']: color,
},
overrides: overrides,
},
},
timeSeriesPanel(
title='',
datasource=null,
gridPosition={},
colorMode='palette-classic',
axisCenteredZero=false,
axisColorMode='text',
axisLabel='',
axisPlacement='auto',
barAlignment=0,
drawStyle='line',
fillOpacity=0,
gradientMode='none',
lineInterpolation='linear',
lineWidth=0,
pointSize=0,
scaleDistributionType='linear',
showPoints='',
spanNulls=false,
stackingGroup='A',
stackingMode='none',
thresholdsStyleMode='off',
decimals=null,
thresholdsMode='absolute',
unit='none',
tooltip={ mode: 'multi', sort: 'none' },
pluginVersion='9.1.3',
displayMode='list',
placement='bottom',
showLegend=true,
interval=null,
min=null,
scaleDistributionLog=null,
sortBy=null,
sortDesc=null,
)::
timeSeries.new(
title=title,
gridPos=gridPosition,
datasource=datasource,
colorMode=colorMode,
axisCenteredZero=axisCenteredZero,
axisColorMode=axisColorMode,
axisLabel=axisLabel,
axisPlacement=axisPlacement,
barAlignment=barAlignment,
drawStyle=drawStyle,
fillOpacity=fillOpacity,
gradientMode=gradientMode,
lineInterpolation=lineInterpolation,
lineWidth=lineWidth,
pointSize=pointSize,
scaleDistributionType=scaleDistributionType,
showPoints=showPoints,
spanNulls=spanNulls,
stackingGroup=stackingGroup,
stackingMode=stackingMode,
thresholdsStyleMode=thresholdsStyleMode,
decimals=decimals,
thresholdsMode=thresholdsMode,
unit=unit,
displayMode=displayMode,
placement=placement,
showLegend=showLegend,
tooltip=tooltip,
min=min,
scaleDistributionLog=scaleDistributionLog,
sortBy=sortBy,
sortDesc=sortDesc,
) + {
pluginVersion: pluginVersion,
[if interval != null then 'interval']: interval,
},
pieChartPanel(
title,
description='',
datasource=null,
gridPos={},
displayMode='table',
placement='bottom',
showLegend=true,
displayLabels=[],
tooltip={},
pieType='pie',
values=[],
colorMode='auto',
overrides=[],
reduceOptions={},
)::
pieChartPanel.new(
title,
description=description,
datasource=datasource,
gridPos=gridPos,
displayMode=displayMode,
placement=placement,
showLegend=showLegend,
displayLabels=displayLabels,
tooltip=tooltip,
pieType=pieType,
values=values,
colorMode=colorMode,
overrides=overrides,
reduceOptions=reduceOptions,
),
heatMapPanel(
title='',
datasource=null,
gridPosition={},
colorMode='spectrum',
cardColor='#b4ff00',
colorScale='sqrt',
colorScheme='interpolateOranges',
colorExponent=0.5,
pluginVersion='9.1.3',
dataFormat='timeseries',
hideFrom={ legend: false, tooltip: false, viz: false },
scaleDistributionType='linear',
legendShow=false,
optionsCalculate=false,
optionsCalculation={
yBuckets: {
mode: 'count',
scale: { log: 2, type: 'log' },
value: '1',
},
},
optionsCellGap=2,
optionsCellValues={},
optionsColor={},
optionsExemplars={},
optionsFilterValues={},
optionsLegend={},
optionsRowFrame={},
optionsShowValue='never',
optionsToolTip={},
optionsYAxis={},
xBucketSize=null,
yAxisDecimals=null,
yAxisFormat='short',
yAxisLogBase=1,
yAxisMin=null,
yAxisMax=null,
yAxisShow=true,
yAxisSplitFactor=1,
yBucketSize=null,
yBucketBound='auto'
)
:: g.heatmapPanel.new(
title=title,
datasource=datasource,
color_mode=colorMode,
color_cardColor=cardColor,
color_colorScale=colorScale,
color_colorScheme=colorScheme,
color_exponent=colorExponent,
legend_show=legendShow,
xBucketSize=xBucketSize,
yAxis_decimals=yAxisDecimals,
yAxis_format=yAxisFormat,
yAxis_logBase=yAxisLogBase,
yAxis_min=yAxisMin,
yAxis_max=yAxisMax,
yAxis_show=yAxisShow,
yAxis_splitFactor=yAxisSplitFactor,
yBucketSize=yBucketSize,
yBucketBound=yBucketBound
) + {
gridPos: gridPosition,
pluginVersion: pluginVersion,
color+: {
colorScheme: colorScheme,
},
fieldConfig: {
defaults: {
custom: {
hideFrom: hideFrom,
scaleDistribution: {
type: scaleDistributionType,
},
},
},
},
options: {
calculate: optionsCalculate,
calculation: optionsCalculation,
cellGap: optionsCellGap,
cellValues: optionsCellValues,
color: optionsColor,
exemplars: optionsExemplars,
filterValues: optionsFilterValues,
legend: optionsLegend,
rowsFrame: optionsRowFrame,
showValue: optionsShowValue,
tooltip: optionsToolTip,
yAxis: optionsYAxis,
},
},
}