summaryrefslogtreecommitdiffstats
path: root/monitoring/ceph-mixin/dashboards/osd.libsonnet
diff options
context:
space:
mode:
Diffstat (limited to 'monitoring/ceph-mixin/dashboards/osd.libsonnet')
-rw-r--r--monitoring/ceph-mixin/dashboards/osd.libsonnet285
1 files changed, 222 insertions, 63 deletions
diff --git a/monitoring/ceph-mixin/dashboards/osd.libsonnet b/monitoring/ceph-mixin/dashboards/osd.libsonnet
index 0ea43c96f..ca25b0630 100644
--- a/monitoring/ceph-mixin/dashboards/osd.libsonnet
+++ b/monitoring/ceph-mixin/dashboards/osd.libsonnet
@@ -1,5 +1,6 @@
local g = import 'grafonnet/grafana.libsonnet';
+
(import 'utils.libsonnet') {
'osds-overview.json':
$.dashboardSchema(
@@ -89,19 +90,70 @@ local g = import 'grafonnet/grafana.libsonnet';
),
],
),
- $.addTableSchema(
- '$datasource',
- "This table shows the osd's that are delivering the 10 highest read latencies within the cluster",
- { col: 2, desc: true },
- [
- $.overviewStyle('OSD ID', 'ceph_daemon', 'string', 'short'),
- $.overviewStyle('Latency (ms)', 'Value', 'number', 'none'),
- $.overviewStyle('', '/.*/', 'hidden', 'short'),
+
+ $.addTableExtended(
+ datasource='${datasource}',
+ title='Highest READ Latencies',
+ gridPosition={ h: 8, w: 4, x: 8, y: 0 },
+ options={
+ footer: {
+ fields: '',
+ reducer: ['sum'],
+ countRows: false,
+ enablePagination: false,
+ show: false,
+ },
+ frameIndex: 1,
+ showHeader: true,
+ },
+ custom={ align: 'null', cellOptions: { type: 'auto' }, filterable: true, inspect: false },
+ thresholds={
+ mode: 'absolute',
+ steps: [
+ { color: 'green', value: null },
+ { color: 'red', value: 80 },
+ ],
+ },
+ overrides=[
+ {
+ matcher: { id: 'byName', options: 'ceph_daemon' },
+ properties: [
+ { id: 'displayName', value: 'OSD ID' },
+ { id: 'unit', value: 'short' },
+ { id: 'decimals', value: 2 },
+ { id: 'custom.align', value: null },
+ ],
+ },
+ {
+ matcher: { id: 'byName', options: 'Value' },
+ properties: [
+ { id: 'displayName', value: 'Latency (ms)' },
+ { id: 'unit', value: 'none' },
+ { id: 'decimals', value: 2 },
+ { id: 'custom.align', value: null },
+ ],
+ },
],
- 'Highest READ Latencies',
- 'table'
+ pluginVersion='10.4.0'
)
- .addTarget(
+ .addTransformations([
+ {
+ id: 'merge',
+ options: { reducers: [] },
+ },
+ {
+ id: 'organize',
+ options: {
+ excludeByName: {
+ Time: true,
+ cluster: true,
+ },
+ indexByName: {},
+ renameByName: {},
+ includeByName: {},
+ },
+ },
+ ]).addTarget(
$.addTargetSchema(
|||
topk(10,
@@ -119,7 +171,8 @@ local g = import 'grafonnet/grafana.libsonnet';
1,
true
)
- ) + { gridPos: { x: 8, y: 0, w: 4, h: 8 } },
+ ),
+
$.simpleGraphPanel(
{
'@95%ile write': '#e0752d',
@@ -164,21 +217,80 @@ local g = import 'grafonnet/grafana.libsonnet';
),
],
),
- $.addTableSchema(
- '$datasource',
- "This table shows the osd's that are delivering the 10 highest write latencies within the cluster",
- { col: 2, desc: true },
- [
- $.overviewStyle(
- 'OSD ID', 'ceph_daemon', 'string', 'short'
- ),
- $.overviewStyle('Latency (ms)', 'Value', 'number', 'none'),
- $.overviewStyle('', '/.*/', 'hidden', 'short'),
+
+ $.addTableExtended(
+ datasource='${datasource}',
+ title='Highest WRITE Latencies',
+ description="This table shows the osd's that are delivering the 10 highest write latencies within the cluster",
+ gridPosition={ h: 8, w: 4, x: 20, y: 0 },
+ options={
+ footer: {
+ fields: '',
+ reducer: ['sum'],
+ countRows: false,
+ enablePagination: false,
+ show: false,
+ },
+ frameIndex: 1,
+ showHeader: true,
+ },
+ custom={ align: 'null', cellOptions: { type: 'auto' }, filterable: true, inspect: false },
+ thresholds={
+ mode: 'absolute',
+ steps: [
+ { color: 'green', value: null },
+ { color: 'red', value: 80 },
+ ],
+ },
+ overrides=[
+ {
+ matcher: { id: 'byName', options: 'ceph_daemon' },
+ properties: [
+ { id: 'displayName', value: 'OSD ID' },
+ { id: 'unit', value: 'short' },
+ { id: 'decimals', value: 2 },
+ { id: 'custom.align', value: null },
+ ],
+ },
+ {
+ matcher: { id: 'byName', options: 'Value' },
+ properties: [
+ { id: 'displayName', value: 'Latency (ms)' },
+ { id: 'unit', value: 'none' },
+ { id: 'decimals', value: 2 },
+ { id: 'custom.align', value: null },
+ ],
+ },
+ {
+ matcher: { id: 'byName', options: 'Value' },
+ properties: [
+ { id: 'mappings', value: [{ type: 'value', options: { NaN: { text: '0.00', index: 0 } } }] },
+ { id: 'unit', value: 'none' },
+ { id: 'decimals', value: 2 },
+ { id: 'custom.align', value: null },
+ ],
+ },
],
- 'Highest WRITE Latencies',
- 'table'
+ pluginVersion='10.4.0'
)
- .addTarget(
+ .addTransformations([
+ {
+ id: 'merge',
+ options: { reducers: [] },
+ },
+ {
+ id: 'organize',
+ options: {
+ excludeByName: {
+ Time: true,
+ cluster: true,
+ },
+ indexByName: {},
+ renameByName: {},
+ includeByName: {},
+ },
+ },
+ ]).addTarget(
$.addTargetSchema(
|||
topk(10,
@@ -194,29 +306,20 @@ local g = import 'grafonnet/grafana.libsonnet';
1,
true
)
- ) + { gridPos: { x: 20, y: 0, w: 4, h: 8 } },
- $.simplePieChart(
- {}, '', 'OSD Types Summary'
- )
+ ),
+
+ $.pieChartPanel('OSD Types Summary', '', '$datasource', { x: 0, y: 8, w: 4, h: 8 }, 'table', 'bottom', true, ['percent'], { mode: 'single', sort: 'none' }, 'pie', ['percent', 'value'], 'palette-classic')
.addTarget(
$.addTargetSchema('count by (device_class) (ceph_osd_metadata{%(matchers)s})' % $.matchers(), '{{device_class}}')
- ) + { gridPos: { x: 0, y: 8, w: 4, h: 8 } },
- $.simplePieChart(
- { 'Non-Encrypted': '#E5AC0E' }, '', 'OSD Objectstore Types'
- )
- .addTarget(
- $.addTargetSchema(
- 'count(ceph_bluefs_wal_total_bytes{%(matchers)s})' % $.matchers(), 'bluestore', 'time_series', 2
- )
- )
- .addTarget(
- $.addTargetSchema(
- 'absent(ceph_bluefs_wal_total_bytes{%(matchers)s}) * count(ceph_osd_metadata{%(matchers)s})' % $.matchers(), 'filestore', 'time_series', 2
- )
- ) + { gridPos: { x: 4, y: 8, w: 4, h: 8 } },
- $.simplePieChart(
- {}, 'The pie chart shows the various OSD sizes used within the cluster', 'OSD Size Summary'
- )
+ ),
+ $.pieChartPanel('OSD Objectstore Types', '', '$datasource', { x: 4, y: 8, w: 4, h: 8 }, 'table', 'bottom', true, ['percent'], { mode: 'single', sort: 'none' }, 'pie', ['percent', 'value'], 'palette-classic')
+ .addTarget($.addTargetSchema(
+ 'count(ceph_bluefs_wal_total_bytes{%(matchers)s})' % $.matchers(), 'bluestore', 'time_series', 2
+ ))
+ .addTarget($.addTargetSchema(
+ 'absent(ceph_bluefs_wal_total_bytes{job=~"$job"}) * count(ceph_osd_metadata{job=~"$job"})' % $.matchers(), 'filestore', 'time_series', 2
+ )),
+ $.pieChartPanel('OSD Size Summary', 'The pie chart shows the various OSD sizes used within the cluster', '$datasource', { x: 8, y: 8, w: 4, h: 8 }, 'table', 'bottom', true, ['percent'], { mode: 'single', sort: 'none' }, 'pie', ['percent', 'value'], 'palette-classic')
.addTarget($.addTargetSchema(
'count(ceph_osd_stat_bytes{%(matchers)s} < 1099511627776)' % $.matchers(), '<1TB', 'time_series', 2
))
@@ -243,7 +346,7 @@ local g = import 'grafonnet/grafana.libsonnet';
))
.addTarget($.addTargetSchema(
'count(ceph_osd_stat_bytes{%(matchers)s} >= 13194139533312)' % $.matchers(), '<12TB+', 'time_series', 2
- )) + { gridPos: { x: 8, y: 8, w: 4, h: 8 } },
+ )),
g.graphPanel.new(bars=true,
datasource='$datasource',
title='Distribution of PGs per OSD',
@@ -257,7 +360,7 @@ local g = import 'grafonnet/grafana.libsonnet';
nullPointMode='null')
.addTarget($.addTargetSchema(
'ceph_osd_numpg{%(matchers)s}' % $.matchers(), 'PGs per OSD', 'time_series', 1, true
- )) + { gridPos: { x: 12, y: 8, w: 8, h: 8 } },
+ )) + { type: 'timeseries' } + { fieldConfig: { defaults: { unit: 'short', custom: { fillOpacity: 8, showPoints: 'never' } } } } + { gridPos: { x: 12, y: 8, w: 8, h: 8 } },
$.gaugeSingleStatPanel(
'percentunit',
'OSD onode Hits Ratio',
@@ -300,19 +403,75 @@ local g = import 'grafonnet/grafana.libsonnet';
.addTargets([$.addTargetSchema(
'round(sum(rate(ceph_pool_wr{%(matchers)s}[$__rate_interval])))' % $.matchers(), 'Writes'
)]),
- $.addTableSchema(
- '$datasource',
- 'This table shows the 10 OSDs with the highest number of slow ops',
- { col: 2, desc: true },
- [
- $.overviewStyle('OSD ID', 'ceph_daemon', 'string', 'short'),
- $.overviewStyle('Slow Ops', 'Value', 'number', 'none'),
- $.overviewStyle('', '/.*/', 'hidden', 'short'),
+
+ $.addTableExtended(
+ datasource='${datasource}',
+ title='Top Slow Ops',
+ description='This table shows the 10 OSDs with the highest number of slow ops',
+ gridPosition={ h: 8, w: 5, x: 0, y: 25 },
+ options={
+ footer: {
+ fields: '',
+ reducer: ['sum'],
+ countRows: false,
+ enablePagination: false,
+ show: false,
+ },
+ frameIndex: 1,
+ showHeader: true,
+ },
+ custom={ align: 'null', cellOptions: { type: 'auto' }, filterable: true, inspect: false },
+ thresholds={
+ mode: 'absolute',
+ steps: [
+ { color: 'green', value: null },
+ { color: 'red', value: 80 },
+ ],
+ },
+ overrides=[
+ {
+ matcher: { id: 'byName', options: 'ceph_daemon' },
+ properties: [
+ { id: 'displayName', value: 'OSD ID' },
+ { id: 'unit', value: 'short' },
+ { id: 'decimals', value: 2 },
+ { id: 'custom.align', value: null },
+ ],
+ },
+ {
+ matcher: { id: 'byName', options: 'Value' },
+ properties: [
+ { id: 'displayName', value: 'Slow Ops' },
+ { id: 'unit', value: 'none' },
+ { id: 'decimals', value: 2 },
+ { id: 'custom.align', value: null },
+ ],
+ },
],
- 'Top Slow Ops',
- 'table'
+ pluginVersion='10.4.0'
)
- .addTarget(
+ .addTransformations([
+ {
+ id: 'merge',
+ options: { reducers: [] },
+ },
+ {
+ id: 'organize',
+ options: {
+ excludeByName: {
+ Time: true,
+ __name__: true,
+ instance: true,
+ job: true,
+ type: true,
+ cluster: true,
+ },
+ indexByName: {},
+ renameByName: {},
+ includeByName: {},
+ },
+ },
+ ]).addTarget(
$.addTargetSchema(
|||
topk(10,
@@ -324,7 +483,7 @@ local g = import 'grafonnet/grafana.libsonnet';
1,
true
)
- ) + { gridPos: { x: 0, y: 20, w: 4, h: 8 } },
+ ),
]),
'osd-device-details.json':
local OsdDeviceDetailsPanel(title,
@@ -342,7 +501,7 @@ local g = import 'grafonnet/grafana.libsonnet';
$.graphPanelSchema({},
title,
description,
- 'null',
+ 'null as zero',
false,
formatY1,
'short',
@@ -357,7 +516,7 @@ local g = import 'grafonnet/grafana.libsonnet';
legendFormat1),
$.addTargetSchema(expr2, legendFormat2),
]
- ) + { gridPos: { x: x, y: y, w: w, h: h } };
+ ) + { type: 'timeseries' } + { fieldConfig: { defaults: { unit: formatY1, custom: { fillOpacity: 8, showPoints: 'never' } } } } + { gridPos: { x: x, y: y, w: w, h: h } };
$.dashboardSchema(
'OSD device details',
@@ -613,6 +772,6 @@ local g = import 'grafonnet/grafana.libsonnet';
)
||| % $.matchers(),
'{{device}} on {{instance}}'
- )) + { gridPos: { x: 18, y: 11, w: 6, h: 9 } },
+ )) + { type: 'timeseries' } + { fieldConfig: { defaults: { unit: 'percentunit', custom: { fillOpacity: 8, showPoints: 'never' } } } } + { gridPos: { x: 18, y: 11, w: 6, h: 9 } },
]),
}