From 17d6a993fc17d533460c5f40f3908c708e057c18 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Thu, 23 May 2024 18:45:17 +0200 Subject: Merging upstream version 18.2.3. Signed-off-by: Daniel Baumann --- monitoring/ceph-mixin/dashboards/host.libsonnet | 75 +- monitoring/ceph-mixin/dashboards/osd.libsonnet | 285 +++++-- .../ceph-mixin/dashboards/piechart_panel.libsonnet | 73 ++ monitoring/ceph-mixin/dashboards/pool.libsonnet | 287 ++++++- monitoring/ceph-mixin/dashboards/rbd.libsonnet | 228 +++++- monitoring/ceph-mixin/dashboards/rgw.libsonnet | 67 +- monitoring/ceph-mixin/dashboards/utils.libsonnet | 83 +- .../ceph-mixin/dashboards_out/ceph-cluster.json | 145 +++- .../ceph-mixin/dashboards_out/cephfs-overview.json | 22 +- .../ceph-mixin/dashboards_out/host-details.json | 264 ++++-- .../ceph-mixin/dashboards_out/hosts-overview.json | 22 +- .../dashboards_out/osd-device-details.json | 89 +- .../ceph-mixin/dashboards_out/osds-overview.json | 725 ++++++++++++----- .../ceph-mixin/dashboards_out/pool-detail.json | 44 +- .../ceph-mixin/dashboards_out/pool-overview.json | 891 ++++++++++++--------- .../ceph-mixin/dashboards_out/radosgw-detail.json | 171 +++- .../dashboards_out/radosgw-overview.json | 130 ++- .../dashboards_out/radosgw-sync-overview.json | 44 +- .../ceph-mixin/dashboards_out/rbd-details.json | 39 +- .../ceph-mixin/dashboards_out/rbd-overview.json | 636 +++++++++------ monitoring/ceph-mixin/prometheus_alerts.libsonnet | 65 ++ monitoring/ceph-mixin/prometheus_alerts.yml | 62 ++ monitoring/ceph-mixin/tests_alerts/test_alerts.yml | 144 ++++ 23 files changed, 3471 insertions(+), 1120 deletions(-) create mode 100644 monitoring/ceph-mixin/dashboards/piechart_panel.libsonnet (limited to 'monitoring/ceph-mixin') diff --git a/monitoring/ceph-mixin/dashboards/host.libsonnet b/monitoring/ceph-mixin/dashboards/host.libsonnet index 4fd35c3ed..674f678a1 100644 --- a/monitoring/ceph-mixin/dashboards/host.libsonnet +++ b/monitoring/ceph-mixin/dashboards/host.libsonnet @@ -719,19 +719,70 @@ local g = import 'grafonnet/grafana.libsonnet'; 11, 9 ), - $.addTableSchema( - '$datasource', - 'This table shows the 10 hosts with the highest number of slow ops', - { col: 2, desc: true }, - [ - $.overviewStyle('Instance', 'instance', 'string', 'short'), - $.overviewStyle('Slow Ops', 'Value', 'number', 'none'), - $.overviewStyle('', '/.*/', 'hidden', 'short'), + + $.addTableExtended( + datasource='${datasource}', + title='Top Slow Ops per Host', + gridPosition={ h: 8, w: 6, x: 0, y: 30 }, + 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: 'instance' }, + properties: [ + { id: 'displayName', value: 'Instance' }, + { 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 per Host', - '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, @@ -743,6 +794,6 @@ local g = import 'grafonnet/grafana.libsonnet'; 1, true ) - ) + { gridPos: { x: 0, y: 40, w: 4, h: 8 } }, + ), ]), } 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 } }, ]), } diff --git a/monitoring/ceph-mixin/dashboards/piechart_panel.libsonnet b/monitoring/ceph-mixin/dashboards/piechart_panel.libsonnet new file mode 100644 index 000000000..68ff71954 --- /dev/null +++ b/monitoring/ceph-mixin/dashboards/piechart_panel.libsonnet @@ -0,0 +1,73 @@ +{ + /** + * Creates a pie chart panel. + * + * @name pieChartPanel.new + * + * @param title The title of the pie chart panel. + * @param description (default `''`) Description of the panel + * @param datasource (optional) Datasource + * @param pieType (default `'pie'`) Type of pie chart (one of pie or donut) + * + * @method addTarget(target) Adds a target object. + */ + new( + title, + description='', + datasource=null, + gridPos={}, + displayMode='table', + placement='bottom', + showLegend=true, + displayLabels=[], + tooltip={}, + pieType='pie', + values=[], + colorMode='auto', + overrides=[], + reduceOptions={}, + ):: { + type: 'piechart', + [if description != null then 'description']: description, + title: title, + gridPos: gridPos, + datasource: datasource, + options: { + legend: { + calcs: [], + values: values, + displayMode: displayMode, + placement: placement, + showLegend: showLegend, + }, + pieType: pieType, + tooltip: tooltip, + displayLabels: displayLabels, + reduceOptions: reduceOptions, + }, + fieldConfig: { + defaults: { + color: { mode: colorMode }, + mappings: [], + custom: { + hideFrom: { + legend: false, + tooltip: false, + viz: false, + }, + }, + }, + overrides: overrides, + }, + targets: [ + ], + _nextTarget:: 0, + addTarget(target):: self { + // automatically ref id in added targets. + local nextTarget = super._nextTarget, + _nextTarget: nextTarget + 1, + targets+: [target { refId: std.char(std.codepoint('A') + nextTarget) }], + }, + addTargets(targets):: std.foldl(function(p, t) p.addTarget(t), targets, self), + }, +} diff --git a/monitoring/ceph-mixin/dashboards/pool.libsonnet b/monitoring/ceph-mixin/dashboards/pool.libsonnet index 6444335d9..87839963f 100644 --- a/monitoring/ceph-mixin/dashboards/pool.libsonnet +++ b/monitoring/ceph-mixin/dashboards/pool.libsonnet @@ -158,36 +158,264 @@ local g = import 'grafonnet/grafana.libsonnet'; 3, 3 ), - $.addTableSchema( - '$datasource', - '', - { col: 5, desc: true }, - [ - $.overviewStyle('', 'Time', 'hidden', 'short'), - $.overviewStyle('', 'instance', 'hidden', 'short'), - $.overviewStyle('', 'job', 'hidden', 'short'), - $.overviewStyle('Pool Name', 'name', 'string', 'short'), - $.overviewStyle('Pool ID', 'pool_id', 'hidden', 'none'), - $.overviewStyle('Compression Factor', 'Value #A', 'number', 'none'), - $.overviewStyle('% Used', 'Value #D', 'number', 'percentunit', 'value', ['70', '85']), - $.overviewStyle('Usable Free', 'Value #B', 'number', 'bytes'), - $.overviewStyle('Compression Eligibility', 'Value #C', 'number', 'percent'), - $.overviewStyle('Compression Savings', 'Value #E', 'number', 'bytes'), - $.overviewStyle('Growth (5d)', 'Value #F', 'number', 'bytes', 'value', ['0', '0']), - $.overviewStyle('IOPS', 'Value #G', 'number', 'none'), - $.overviewStyle('Bandwidth', 'Value #H', 'number', 'Bps'), - $.overviewStyle('', '__name__', 'hidden', 'short'), - $.overviewStyle('', 'type', 'hidden', 'short'), - $.overviewStyle('', 'compression_mode', 'hidden', 'short'), - $.overviewStyle('Type', 'description', 'string', 'short'), - $.overviewStyle('Stored', 'Value #J', 'number', 'bytes'), - $.overviewStyle('', 'Value #I', 'hidden', 'short'), - $.overviewStyle('Compression', 'Value #K', 'string', 'short', null, [], [{ text: 'ON', value: '1' }]), + + $.addTableExtended( + datasource='${datasource}', + title='Pool Overview', + gridPosition={ h: 6, w: 24, x: 0, y: 3 }, + options={ + footer: { + fields: '', + reducer: ['sum'], + countRows: false, + enablePagination: false, + show: false, + }, + frameIndex: 1, + showHeader: true, + }, + custom={ align: 'auto', cellOptions: { type: 'auto' }, filterable: true, inspect: false }, + thresholds={ + mode: 'absolute', + steps: [ + { color: 'green', value: null }, + { color: 'red', value: 80 }, + ], + }, + overrides=[ + { + matcher: { id: 'byName', options: 'Time' }, + properties: [ + { id: 'unit', value: 'short' }, + { id: 'decimals', value: 2 }, + ], + }, + { + matcher: { id: 'byName', options: 'instance' }, + properties: [ + { id: 'unit', value: 'short' }, + { id: 'decimals', value: 2 }, + ], + }, + { + matcher: { id: 'byName', options: 'job' }, + properties: [ + { id: 'unit', value: 'short' }, + { id: 'decimals', value: 2 }, + ], + }, + { + matcher: { id: 'byName', options: 'name' }, + properties: [ + { id: 'displayName', value: 'Pool Name' }, + { id: 'unit', value: 'short' }, + { id: 'decimals', value: 2 }, + ], + }, + { + matcher: { id: 'byName', options: 'pool_id' }, + properties: [ + { id: 'displayName', value: 'Pool ID' }, + { id: 'unit', value: 'none' }, + { id: 'decimals', value: 2 }, + ], + }, + { + matcher: { id: 'byName', options: 'Value #A' }, + properties: [ + { id: 'displayName', value: 'Compression Factor' }, + { id: 'unit', value: 'none' }, + { id: 'decimals', value: 2 }, + ], + }, + { + matcher: { id: 'byName', options: 'Value #D' }, + properties: [ + { id: 'displayName', value: '% Used' }, + { id: 'unit', value: 'percentunit' }, + { id: 'decimals', value: 2 }, + { id: 'custom.cellOptions', value: { type: 'color-text' } }, + { + id: 'thresholds', + value: { + mode: 'absolute', + steps: [ + { + color: 'rgba(245, 54, 54, 0.9)', + value: null, + }, + { + color: 'rgba(237, 129, 40, 0.89)', + value: 70, + }, + { + color: 'rgba(50, 172, 45, 0.97)', + value: 85, + }, + ], + }, + }, + ], + }, + { + matcher: { id: 'byName', options: 'Value #B' }, + properties: [ + { id: 'displayName', value: 'Usable Free' }, + { id: 'unit', value: 'bytes' }, + { id: 'decimals', value: 2 }, + ], + }, + { + matcher: { id: 'byName', options: 'Value #C' }, + properties: [ + { id: 'displayName', value: 'Compression Eligibility' }, + { id: 'unit', value: 'percent' }, + { id: 'decimals', value: 2 }, + ], + }, + { + matcher: { id: 'byName', options: 'Value #E' }, + properties: [ + { id: 'displayName', value: 'Compression Savings' }, + { id: 'unit', value: 'bytes' }, + { id: 'decimals', value: 2 }, + ], + }, + { + matcher: { id: 'byName', options: 'Value #F' }, + properties: [ + { id: 'displayName', value: 'Growth (5d)' }, + { id: 'unit', value: 'bytes' }, + { id: 'decimals', value: 2 }, + { id: 'custom.cellOptions', value: { type: 'color-text' } }, + { + id: 'thresholds', + value: { + mode: 'absolute', + steps: [ + { + color: 'rgba(245, 54, 54, 0.9)', + value: null, + }, + { + color: 'rgba(237, 129, 40, 0.89)', + value: 70, + }, + { + color: 'rgba(50, 172, 45, 0.97)', + value: 85, + }, + ], + }, + }, + ], + }, + { + matcher: { id: 'byName', options: 'Value #G' }, + properties: [ + { id: 'displayName', value: 'IOPS' }, + { id: 'unit', value: 'none' }, + { id: 'decimals', value: 2 }, + ], + }, + { + matcher: { id: 'byName', options: 'Value #H' }, + properties: [ + { id: 'displayName', value: 'Bandwidth' }, + { id: 'unit', value: 'Bps' }, + { id: 'decimals', value: 2 }, + ], + }, + { + matcher: { id: 'byName', options: '__name__' }, + properties: [ + { id: 'unit', value: 'short' }, + { id: 'decimals', value: 2 }, + ], + }, + { + matcher: { id: 'byName', options: 'type' }, + properties: [ + { id: 'unit', value: 'short' }, + { id: 'decimals', value: 2 }, + ], + }, + { + matcher: { id: 'byName', options: 'compression_mode' }, + properties: [ + { id: 'unit', value: 'short' }, + { id: 'decimals', value: 2 }, + ], + }, + { + matcher: { id: 'byName', options: 'description' }, + properties: [ + { id: 'displayName', value: 'Type' }, + { id: 'unit', value: 'short' }, + { id: 'decimals', value: 2 }, + ], + }, + { + matcher: { id: 'byName', options: 'Value #J' }, + properties: [ + { id: 'displayName', value: 'Stored' }, + { id: 'unit', value: 'bytes' }, + { id: 'decimals', value: 2 }, + ], + }, + { + matcher: { id: 'byName', options: 'Value #I' }, + properties: [ + { id: 'unit', value: 'short' }, + { id: 'decimals', value: 2 }, + ], + }, + { + matcher: { id: 'byName', options: 'Value #K' }, + properties: [ + { id: 'displayName', value: 'Compression' }, + { id: 'unit', value: 'short' }, + { id: 'decimals', value: 2 }, + ], + }, ], - 'Pool Overview', - 'table' + pluginVersion='10.4.0' ) - .addTargets( + .addTransformations([ + { + id: 'merge', + options: {}, + }, + { + id: 'seriesToRows', + options: {}, + }, + { + id: 'organize', + options: { + excludeByName: { + Time: true, + 'Value #A': true, + instance: true, + job: true, + pool_id: true, + 'Value #B': false, + 'Value #C': true, + __name__: true, + compression_mode: true, + type: true, + 'Value #I': true, + 'Value #K': true, + 'Value #D': false, + 'Value #E': true, + cluster: true, + }, + indexByName: {}, + renameByName: {}, + includeByName: {}, + }, + }, + ]).addTargets( [ $.addTargetSchema( ||| @@ -286,7 +514,8 @@ local g = import 'grafonnet/grafana.libsonnet'; ), $.addTargetSchema('', 'L', '', '', null), ] - ) + { gridPos: { x: 0, y: 3, w: 24, h: 6 } }, + ), + $.simpleGraphPanel( {}, 'Top $topk Client IOPS by Pool', diff --git a/monitoring/ceph-mixin/dashboards/rbd.libsonnet b/monitoring/ceph-mixin/dashboards/rbd.libsonnet index 0eca5a877..36cd3ff1b 100644 --- a/monitoring/ceph-mixin/dashboards/rbd.libsonnet +++ b/monitoring/ceph-mixin/dashboards/rbd.libsonnet @@ -22,7 +22,7 @@ local u = import 'utils.libsonnet'; '{{pool}} Write'), $.addTargetSchema(expr2, '{{pool}} Read'), ] - ) + { 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( 'RBD Details', @@ -133,7 +133,7 @@ local u = import 'utils.libsonnet'; $.graphPanelSchema({}, title, '', - 'null', + 'null as zero', false, formatY1, 'short', @@ -149,7 +149,7 @@ local u = import 'utils.libsonnet'; $.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( 'RBD Overview', @@ -240,20 +240,68 @@ local u = import 'utils.libsonnet'; 8, 7 ), - $.addTableSchema( - '$datasource', - '', - { col: 3, desc: true }, - [ - $.overviewStyle('Pool', 'pool', 'string', 'short'), - $.overviewStyle('Image', 'image', 'string', 'short'), - $.overviewStyle('IOPS', 'Value', 'number', 'iops'), - $.overviewStyle('', '/.*/', 'hidden', 'short'), + + $.addTableExtended( + datasource='${datasource}', + title='Highest IOPS', + description='RBD per-image IO statistics are disabled by default.\n\nPlease refer to https://docs.ceph.com/en/latest/mgr/prometheus/#rbd-io-statistics for information about how to enable those optionally.', + gridPosition={ h: 7, w: 8, x: 0, y: 7 }, + 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: 'pool' }, + properties: [ + { id: 'displayName', value: 'Pool' }, + { id: 'unit', value: 'short' }, + { id: 'decimals', value: 2 }, + { id: 'custom.align', value: null }, + ], + }, + { + matcher: { id: 'byName', options: 'image' }, + properties: [ + { id: 'displayName', value: 'Image' }, + { id: 'unit', value: 'short' }, + { id: 'decimals', value: 2 }, + { id: 'custom.align', value: null }, + ], + }, + { + matcher: { id: 'byName', options: 'Value' }, + properties: [ + { id: 'displayName', value: 'IOPS' }, + { id: 'unit', value: 'iops' }, + { id: 'decimals', value: 2 }, + { id: 'custom.align', value: null }, + ], + }, ], - 'Highest IOPS', - 'table' + pluginVersion='10.4.0' ) - .addTarget( + .addTransformations([ + { + id: 'merge', + options: { reducers: [] }, + }, + ]).addTarget( $.addTargetSchema( ||| topk(10, @@ -270,21 +318,69 @@ local u = import 'utils.libsonnet'; 1, true ) - ) + { gridPos: { x: 0, y: 7, w: 8, h: 7 } }, - $.addTableSchema( - '$datasource', - '', - { col: 3, desc: true }, - [ - $.overviewStyle('Pool', 'pool', 'string', 'short'), - $.overviewStyle('Image', 'image', 'string', 'short'), - $.overviewStyle('Throughput', 'Value', 'number', 'Bps'), - $.overviewStyle('', '/.*/', 'hidden', 'short'), + ), + + $.addTableExtended( + datasource='${datasource}', + title='Highest Throughput', + description='RBD per-image IO statistics are disabled by default.\n\nPlease refer to https://docs.ceph.com/en/latest/mgr/prometheus/#rbd-io-statistics for information about how to enable those optionally.', + gridPosition={ h: 7, w: 8, x: 8, y: 7 }, + 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: 'pool' }, + properties: [ + { id: 'displayName', value: 'Pool' }, + { id: 'unit', value: 'short' }, + { id: 'decimals', value: 2 }, + { id: 'custom.align', value: null }, + ], + }, + { + matcher: { id: 'byName', options: 'image' }, + properties: [ + { id: 'displayName', value: 'Image' }, + { id: 'unit', value: 'short' }, + { id: 'decimals', value: 2 }, + { id: 'custom.align', value: null }, + ], + }, + { + matcher: { id: 'byName', options: 'Value' }, + properties: [ + { id: 'displayName', value: 'Throughput' }, + { id: 'unit', value: 'Bps' }, + { id: 'decimals', value: 2 }, + { id: 'custom.align', value: null }, + ], + }, ], - 'Highest Throughput', - 'table' + pluginVersion='10.4.0' ) - .addTarget( + .addTransformations([ + { + id: 'merge', + options: { reducers: [] }, + }, + ]).addTarget( $.addTargetSchema( ||| topk(10, @@ -301,21 +397,69 @@ local u = import 'utils.libsonnet'; 1, true ) - ) + { gridPos: { x: 8, y: 7, w: 8, h: 7 } }, - $.addTableSchema( - '$datasource', - '', - { col: 3, desc: true }, - [ - $.overviewStyle('Pool', 'pool', 'string', 'short'), - $.overviewStyle('Image', 'image', 'string', 'short'), - $.overviewStyle('Latency', 'Value', 'number', 'ns'), - $.overviewStyle('', '/.*/', 'hidden', 'short'), + ), + + $.addTableExtended( + datasource='${datasource}', + title='Highest Latency', + description='RBD per-image IO statistics are disabled by default.\n\nPlease refer to https://docs.ceph.com/en/latest/mgr/prometheus/#rbd-io-statistics for information about how to enable those optionally.', + gridPosition={ h: 7, w: 8, x: 16, y: 7 }, + 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: 'pool' }, + properties: [ + { id: 'displayName', value: 'Pool' }, + { id: 'unit', value: 'short' }, + { id: 'decimals', value: 2 }, + { id: 'custom.align', value: null }, + ], + }, + { + matcher: { id: 'byName', options: 'image' }, + properties: [ + { id: 'displayName', value: 'Image' }, + { id: 'unit', value: 'short' }, + { id: 'decimals', value: 2 }, + { id: 'custom.align', value: null }, + ], + }, + { + matcher: { id: 'byName', options: 'Value' }, + properties: [ + { id: 'displayName', value: 'Latency' }, + { id: 'unit', value: 'ns' }, + { id: 'decimals', value: 2 }, + { id: 'custom.align', value: null }, + ], + }, ], - 'Highest Latency', - 'table' + pluginVersion='10.4.0' ) - .addTarget( + .addTransformations([ + { + id: 'merge', + options: { reducers: [] }, + }, + ]).addTarget( $.addTargetSchema( ||| topk(10, @@ -332,6 +476,6 @@ local u = import 'utils.libsonnet'; 1, true ) - ) + { gridPos: { x: 16, y: 7, w: 8, h: 7 } }, + ), ]), } diff --git a/monitoring/ceph-mixin/dashboards/rgw.libsonnet b/monitoring/ceph-mixin/dashboards/rgw.libsonnet index 892480d1c..557f1ddcc 100644 --- a/monitoring/ceph-mixin/dashboards/rgw.libsonnet +++ b/monitoring/ceph-mixin/dashboards/rgw.libsonnet @@ -24,7 +24,7 @@ local u = import 'utils.libsonnet'; '{{source_zone}}' ), ] - ) + { 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( 'RGW Sync Overview', @@ -140,7 +140,7 @@ local u = import 'utils.libsonnet'; {}, title, description, - 'null', + 'null as zero', false, formatY1, formatY2, @@ -158,7 +158,7 @@ local u = import 'utils.libsonnet'; ) .addTargets( [$.addTargetSchema(expr1, legendFormat1)] - ) + { 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( 'RGW Overview', @@ -658,7 +658,7 @@ local u = import 'utils.libsonnet'; $.graphPanelSchema(aliasColors, title, description, - 'null', + 'null as zero', false, formatY1, formatY2, @@ -669,7 +669,7 @@ local u = import 'utils.libsonnet'; '$datasource') .addTargets( [$.addTargetSchema(expr1, 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( 'RGW Instance Detail', @@ -825,15 +825,52 @@ local u = import 'utils.libsonnet'; ), ] ), - $.simplePieChart( - { - GETs: '#7eb26d', - 'Other (HEAD,POST,DELETE)': '#447ebc', - PUTs: '#eab839', - Requests: '#3f2b5b', - Failures: '#bf1b00', - }, '', 'Workload Breakdown' - ) + + $.pieChartPanel('Workload Breakdown', + '', + '$datasource', + { x: 20, y: 1, w: 4, h: 8 }, + 'table', + 'bottom', + true, + [], + { mode: 'single', sort: 'none' }, + 'pie', + ['percent', 'value'], + 'palette-classic', + overrides=[ + { + matcher: { id: 'byName', options: 'Failures' }, + properties: [ + { id: 'color', value: { mode: 'fixed', fixedColor: '#bf1b00' } }, + ], + }, + { + matcher: { id: 'byName', options: 'GETs' }, + properties: [ + { id: 'color', value: { mode: 'fixed', fixedColor: '#7eb26d' } }, + ], + }, + { + matcher: { id: 'byName', options: 'Other (HEAD,POST,DELETE)' }, + properties: [ + { id: 'color', value: { mode: 'fixed', fixedColor: '#447ebc' } }, + ], + }, + { + matcher: { id: 'byName', options: 'PUTs' }, + properties: [ + { id: 'color', value: { mode: 'fixed', fixedColor: '#eab839' } }, + ], + }, + { + matcher: { id: 'byName', options: 'Requests' }, + properties: [ + { id: 'color', value: { mode: 'fixed', fixedColor: '#3f2b5b' } }, + ], + }, + ], + reduceOptions={ values: false, calcs: ['lastNotNull'], fields: '' }) .addTarget($.addTargetSchema( ||| rate(ceph_rgw_failed_req{%(matchers)s}[$__rate_interval]) * @@ -867,6 +904,6 @@ local u = import 'utils.libsonnet'; ceph_rgw_metadata{%(matchers)s, ceph_daemon=~"$rgw_servers"} ||| % $.matchers(), 'Other (DELETE,LIST) {{ceph_daemon}}' - )) + { gridPos: { x: 20, y: 1, w: 4, h: 8 } }, + )), ]), } diff --git a/monitoring/ceph-mixin/dashboards/utils.libsonnet b/monitoring/ceph-mixin/dashboards/utils.libsonnet index a7774c7ce..5575d6205 100644 --- a/monitoring/ceph-mixin/dashboards/utils.libsonnet +++ b/monitoring/ceph-mixin/dashboards/utils.libsonnet @@ -1,4 +1,5 @@ local g = import 'grafonnet/grafana.libsonnet'; +local pieChartPanel = import 'piechart_panel.libsonnet'; { _config:: error 'must provide _config', @@ -144,14 +145,6 @@ local g = import 'grafonnet/grafana.libsonnet'; title=title, valueName=valueName), - addTableSchema(datasource, description, sort, styles, title, transform):: - g.tablePanel.new(datasource=datasource, - description=description, - sort=sort, - styles=styles, - title=title, - transform=transform), - addStyle(alias, colorMode, colors, @@ -266,7 +259,7 @@ local g = import 'grafonnet/grafana.libsonnet'; '$datasource') .addTargets( [$.addTargetSchema(expr, legendFormat)] - ) + { 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 } }, simpleSingleStatPanel(format, title, @@ -330,4 +323,76 @@ local g = import 'grafonnet/grafana.libsonnet'; 'pie', title, 'current'), + + 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, + ), + + 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, + }, + }, } diff --git a/monitoring/ceph-mixin/dashboards_out/ceph-cluster.json b/monitoring/ceph-mixin/dashboards_out/ceph-cluster.json index 2cd151ae1..b73eaefd8 100644 --- a/monitoring/ceph-mixin/dashboards_out/ceph-cluster.json +++ b/monitoring/ceph-mixin/dashboards_out/ceph-cluster.json @@ -256,7 +256,93 @@ } ], "title": "OSDs", - "type": "stat" + "type": "stat", + "fieldConfig": { + "defaults": { + "mappings": [], + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "All" + }, + "properties": [ + { + "id": "color", + "value": { + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Out" + }, + "properties": [ + { + "id": "thresholds", + "value": { + "mode": "percentage", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "orange", + "value": 0.1 + }, + { + "value": 10, + "color": "red" + } + ] + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Down" + }, + "properties": [ + { + "id": "thresholds", + "value": { + "mode": "percentage", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "orange", + "value": 0.1 + }, + { + "value": 10, + "color": "red" + } + ] + } + } + ] + } + ] + } }, { "clusterName": "", @@ -517,6 +603,15 @@ "dashLength": 10, "dashes": false, "datasource": "$datasource", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "short" + } + }, "fill": 0, "gridPos": { "h": 6, @@ -640,7 +735,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -673,6 +768,15 @@ "dashLength": 10, "dashes": false, "datasource": "$datasource", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "ms" + } + }, "fill": 0, "gridPos": { "h": 6, @@ -746,7 +850,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -779,6 +883,15 @@ "dashLength": 10, "dashes": false, "datasource": "$datasource", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "Bps" + } + }, "fill": 1, "gridPos": { "h": 9, @@ -838,7 +951,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -871,6 +984,15 @@ "dashLength": 10, "dashes": false, "datasource": "$datasource", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "Bps" + } + }, "fill": 1, "gridPos": { "h": 9, @@ -917,7 +1039,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -1073,6 +1195,15 @@ "dashLength": 10, "dashes": false, "datasource": "$datasource", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "ops" + } + }, "fill": 0, "gridPos": { "h": 9, @@ -1120,7 +1251,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -1276,4 +1407,4 @@ "timezone": "", "title": "Ceph - Cluster", "version": 13 - } +} diff --git a/monitoring/ceph-mixin/dashboards_out/cephfs-overview.json b/monitoring/ceph-mixin/dashboards_out/cephfs-overview.json index 3e7aeef45..50c850ab1 100644 --- a/monitoring/ceph-mixin/dashboards_out/cephfs-overview.json +++ b/monitoring/ceph-mixin/dashboards_out/cephfs-overview.json @@ -63,6 +63,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "none" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -127,7 +136,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -161,6 +170,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "none" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -213,7 +231,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", diff --git a/monitoring/ceph-mixin/dashboards_out/host-details.json b/monitoring/ceph-mixin/dashboards_out/host-details.json index 7a5ac2591..e85bc64ec 100644 --- a/monitoring/ceph-mixin/dashboards_out/host-details.json +++ b/monitoring/ceph-mixin/dashboards_out/host-details.json @@ -156,6 +156,15 @@ "dashes": false, "datasource": "$datasource", "description": "Shows the CPU breakdown. When multiple servers are selected, only the first host's cpu data is shown", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "percent" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -208,7 +217,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -249,6 +258,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "bytes" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -330,7 +348,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -364,6 +382,15 @@ "dashes": false, "datasource": "$datasource", "description": "Show the network load (rx,tx) across all interfaces (excluding loopback 'lo')", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "decbytes" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -428,7 +455,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -462,6 +489,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "pps" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -526,7 +562,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -642,6 +678,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "pps" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -706,7 +751,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -759,6 +804,15 @@ "dashes": false, "datasource": "$datasource", "description": "For any OSD devices on the host, this chart shows the iops per physical device. Each device is shown by it's name and corresponding OSD id value", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "ops" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -823,7 +877,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -857,6 +911,15 @@ "dashes": false, "datasource": "$datasource", "description": "For OSD hosts, this chart shows the disk bandwidth (read bytes/sec + write bytes/sec) of the physical OSD device. Each device is shown by device name, and corresponding OSD id", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "Bps" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -921,7 +984,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -955,6 +1018,15 @@ "dashes": false, "datasource": "$datasource", "description": "For OSD hosts, this chart shows the latency at the physical drive. Each drive is shown by device name, with it's corresponding OSD id", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "s" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -1007,7 +1079,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -1041,6 +1113,15 @@ "dashes": false, "datasource": "$datasource", "description": "Show disk utilization % (util) of any OSD devices on the host by the physical device name and associated OSD id.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "percent" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -1093,7 +1174,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -1122,73 +1203,105 @@ }, { "columns": [ ], - "datasource": "$datasource", - "description": "This table shows the 10 hosts with the highest number of slow ops", + "datasource": "${datasource}", + "fieldConfig": { + "defaults": { + "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": "instance" + }, + "properties": [ + { + "id": "displayName", + "value": "Instance" + }, + { + "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 + } + ] + } + ] + }, "gridPos": { "h": 8, - "w": 4, + "w": 6, "x": 0, - "y": 40 + "y": 30 }, "id": 15, "links": [ ], - "sort": { - "col": 2, - "desc": true - }, - "styles": [ - { - "alias": "Instance", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "instance", - "thresholds": [ ], - "type": "string", - "unit": "short", - "valueMaps": [ ] - }, - { - "alias": "Slow Ops", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" + "options": { + "footer": { + "countRows": false, + "enablePagination": false, + "fields": "", + "reducer": [ + "sum" ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "Value", - "thresholds": [ ], - "type": "number", - "unit": "none", - "valueMaps": [ ] + "show": false }, - { - "alias": "", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "/.*/", - "thresholds": [ ], - "type": "hidden", - "unit": "short", - "valueMaps": [ ] - } - ], + "frameIndex": 1, + "showHeader": true + }, + "pluginVersion": "10.4.0", + "styles": "", "targets": [ { "expr": "topk(10,\n (sum by (instance)(ceph_daemon_health_metrics{type=\"SLOW_OPS\", ceph_daemon=~\"osd.*\"}))\n)\n", @@ -1202,7 +1315,20 @@ "timeFrom": null, "timeShift": null, "title": "Top Slow Ops per Host", - "transform": "table", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "cluster": true + }, + "includeByName": { }, + "indexByName": { }, + "renameByName": { } + } + } + ], "type": "table" } ], diff --git a/monitoring/ceph-mixin/dashboards_out/hosts-overview.json b/monitoring/ceph-mixin/dashboards_out/hosts-overview.json index f1cd4c499..ef8f12abe 100644 --- a/monitoring/ceph-mixin/dashboards_out/hosts-overview.json +++ b/monitoring/ceph-mixin/dashboards_out/hosts-overview.json @@ -547,6 +547,15 @@ "dashes": false, "datasource": "$datasource", "description": "Show the top 10 busiest hosts by cpu", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "percent" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -599,7 +608,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -633,6 +642,15 @@ "dashes": false, "datasource": "$datasource", "description": "Top 10 hosts by network load", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "Bps" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -685,7 +703,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", diff --git a/monitoring/ceph-mixin/dashboards_out/osd-device-details.json b/monitoring/ceph-mixin/dashboards_out/osd-device-details.json index 384516fb0..359f5522c 100644 --- a/monitoring/ceph-mixin/dashboards_out/osd-device-details.json +++ b/monitoring/ceph-mixin/dashboards_out/osd-device-details.json @@ -63,6 +63,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "s" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -87,7 +96,7 @@ "lines": true, "linewidth": 1, "links": [ ], - "nullPointMode": "null", + "nullPointMode": "null as zero", "percentage": false, "pointradius": 5, "points": false, @@ -127,7 +136,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -161,6 +170,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "short" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -185,7 +203,7 @@ "lines": true, "linewidth": 1, "links": [ ], - "nullPointMode": "null", + "nullPointMode": "null as zero", "percentage": false, "pointradius": 5, "points": false, @@ -225,7 +243,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -259,6 +277,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "bytes" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -283,7 +310,7 @@ "lines": true, "linewidth": 1, "links": [ ], - "nullPointMode": "null", + "nullPointMode": "null as zero", "percentage": false, "pointradius": 5, "points": false, @@ -323,7 +350,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -376,6 +403,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "s" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -400,7 +436,7 @@ "lines": true, "linewidth": 1, "links": [ ], - "nullPointMode": "null", + "nullPointMode": "null as zero", "percentage": false, "pointradius": 5, "points": false, @@ -440,7 +476,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -474,6 +510,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "short" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -498,7 +543,7 @@ "lines": true, "linewidth": 1, "links": [ ], - "nullPointMode": "null", + "nullPointMode": "null as zero", "percentage": false, "pointradius": 5, "points": false, @@ -538,7 +583,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -572,6 +617,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "Bps" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -596,7 +650,7 @@ "lines": true, "linewidth": 1, "links": [ ], - "nullPointMode": "null", + "nullPointMode": "null as zero", "percentage": false, "pointradius": 5, "points": false, @@ -636,7 +690,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -670,6 +724,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "percentunit" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -722,7 +785,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", diff --git a/monitoring/ceph-mixin/dashboards_out/osds-overview.json b/monitoring/ceph-mixin/dashboards_out/osds-overview.json index b34c66422..b64307d32 100644 --- a/monitoring/ceph-mixin/dashboards_out/osds-overview.json +++ b/monitoring/ceph-mixin/dashboards_out/osds-overview.json @@ -58,6 +58,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "ms" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -124,7 +133,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -153,8 +162,82 @@ }, { "columns": [ ], - "datasource": "$datasource", - "description": "This table shows the osd's that are delivering the 10 highest read latencies within the cluster", + "datasource": "${datasource}", + "fieldConfig": { + "defaults": { + "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 + } + ] + } + ] + }, "gridPos": { "h": 8, "w": 4, @@ -163,63 +246,21 @@ }, "id": 3, "links": [ ], - "sort": { - "col": 2, - "desc": true - }, - "styles": [ - { - "alias": "OSD ID", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" + "options": { + "footer": { + "countRows": false, + "enablePagination": false, + "fields": "", + "reducer": [ + "sum" ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "ceph_daemon", - "thresholds": [ ], - "type": "string", - "unit": "short", - "valueMaps": [ ] + "show": false }, - { - "alias": "Latency (ms)", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "Value", - "thresholds": [ ], - "type": "number", - "unit": "none", - "valueMaps": [ ] - }, - { - "alias": "", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "/.*/", - "thresholds": [ ], - "type": "hidden", - "unit": "short", - "valueMaps": [ ] - } - ], + "frameIndex": 1, + "showHeader": true + }, + "pluginVersion": "10.4.0", + "styles": "", "targets": [ { "expr": "topk(10,\n (sort(\n (\n rate(ceph_osd_op_r_latency_sum{job=~\"$job\"}[$__rate_interval]) /\n on (ceph_daemon) rate(ceph_osd_op_r_latency_count{job=~\"$job\"}[$__rate_interval]) *\n 1000\n )\n ))\n)\n", @@ -233,7 +274,26 @@ "timeFrom": null, "timeShift": null, "title": "Highest READ Latencies", - "transform": "table", + "transformations": [ + { + "id": "merge", + "options": { + "reducers": [ ] + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "cluster": true + }, + "includeByName": { }, + "indexByName": { }, + "renameByName": { } + } + } + ], "type": "table" }, { @@ -245,6 +305,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "ms" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -311,7 +380,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -340,8 +409,117 @@ }, { "columns": [ ], - "datasource": "$datasource", + "datasource": "${datasource}", "description": "This table shows the osd's that are delivering the 10 highest write latencies within the cluster", + "fieldConfig": { + "defaults": { + "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": [ + { + "options": { + "NaN": { + "index": 0, + "text": "0.00" + } + }, + "type": "value" + } + ] + }, + { + "id": "unit", + "value": "none" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.align", + "value": null + } + ] + } + ] + }, "gridPos": { "h": 8, "w": 4, @@ -350,63 +528,21 @@ }, "id": 5, "links": [ ], - "sort": { - "col": 2, - "desc": true - }, - "styles": [ - { - "alias": "OSD ID", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" + "options": { + "footer": { + "countRows": false, + "enablePagination": false, + "fields": "", + "reducer": [ + "sum" ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "ceph_daemon", - "thresholds": [ ], - "type": "string", - "unit": "short", - "valueMaps": [ ] + "show": false }, - { - "alias": "Latency (ms)", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "Value", - "thresholds": [ ], - "type": "number", - "unit": "none", - "valueMaps": [ ] - }, - { - "alias": "", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "/.*/", - "thresholds": [ ], - "type": "hidden", - "unit": "short", - "valueMaps": [ ] - } - ], + "frameIndex": 1, + "showHeader": true + }, + "pluginVersion": "10.4.0", + "styles": "", "targets": [ { "expr": "topk(10,\n (sort(\n (rate(ceph_osd_op_w_latency_sum{job=~\"$job\"}[$__rate_interval]) /\n on (ceph_daemon) rate(ceph_osd_op_w_latency_count{job=~\"$job\"}[$__rate_interval]) *\n 1000)\n ))\n)\n", @@ -420,13 +556,47 @@ "timeFrom": null, "timeShift": null, "title": "Highest WRITE Latencies", - "transform": "table", + "transformations": [ + { + "id": "merge", + "options": { + "reducers": [ ] + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "cluster": true + }, + "includeByName": { }, + "indexByName": { }, + "renameByName": { } + } + } + ], "type": "table" }, { - "aliasColors": { }, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [ ] + }, + "overrides": [ ] + }, "gridPos": { "h": 8, "w": 4, @@ -434,13 +604,27 @@ "y": 8 }, "id": 6, - "legend": { - "percentage": true, - "show": true, - "values": true + "options": { + "displayLabels": [ + "percent" + ], + "legend": { + "calcs": [ ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "values": [ + "percent", + "value" + ] + }, + "pieType": "pie", + "reduceOptions": { }, + "tooltip": { + "mode": "single", + "sort": "none" + } }, - "legendType": "Under graph", - "pieType": "pie", "targets": [ { "expr": "count by (device_class) (ceph_osd_metadata{job=~\"$job\"})", @@ -451,15 +635,27 @@ } ], "title": "OSD Types Summary", - "type": "grafana-piechart-panel", - "valueName": "current" + "type": "piechart" }, { - "aliasColors": { - "Non-Encrypted": "#E5AC0E" - }, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [ ] + }, + "overrides": [ ] + }, "gridPos": { "h": 8, "w": 4, @@ -467,13 +663,27 @@ "y": 8 }, "id": 7, - "legend": { - "percentage": true, - "show": true, - "values": true + "options": { + "displayLabels": [ + "percent" + ], + "legend": { + "calcs": [ ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "values": [ + "percent", + "value" + ] + }, + "pieType": "pie", + "reduceOptions": { }, + "tooltip": { + "mode": "single", + "sort": "none" + } }, - "legendType": "Under graph", - "pieType": "pie", "targets": [ { "expr": "count(ceph_bluefs_wal_total_bytes{job=~\"$job\"})", @@ -491,13 +701,27 @@ } ], "title": "OSD Objectstore Types", - "type": "grafana-piechart-panel", - "valueName": "current" + "type": "piechart" }, { - "aliasColors": { }, "datasource": "$datasource", "description": "The pie chart shows the various OSD sizes used within the cluster", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [ ] + }, + "overrides": [ ] + }, "gridPos": { "h": 8, "w": 4, @@ -505,13 +729,27 @@ "y": 8 }, "id": 8, - "legend": { - "percentage": true, - "show": true, - "values": true + "options": { + "displayLabels": [ + "percent" + ], + "legend": { + "calcs": [ ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "values": [ + "percent", + "value" + ] + }, + "pieType": "pie", + "reduceOptions": { }, + "tooltip": { + "mode": "single", + "sort": "none" + } }, - "legendType": "Under graph", - "pieType": "pie", "targets": [ { "expr": "count(ceph_osd_stat_bytes{job=~\"$job\"} < 1099511627776)", @@ -578,8 +816,7 @@ } ], "title": "OSD Size Summary", - "type": "grafana-piechart-panel", - "valueName": "current" + "type": "piechart" }, { "aliasColors": { }, @@ -587,6 +824,15 @@ "dashLength": 10, "dashes": false, "datasource": "$datasource", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "short" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -640,7 +886,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": 20, "mode": "histogram", @@ -775,6 +1021,15 @@ "dashes": false, "datasource": "$datasource", "description": "Show the read/write workload profile overtime", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "short" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -834,7 +1089,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -863,73 +1118,106 @@ }, { "columns": [ ], - "datasource": "$datasource", + "datasource": "${datasource}", "description": "This table shows the 10 OSDs with the highest number of slow ops", + "fieldConfig": { + "defaults": { + "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 + } + ] + } + ] + }, "gridPos": { "h": 8, - "w": 4, + "w": 5, "x": 0, - "y": 20 + "y": 25 }, "id": 13, "links": [ ], - "sort": { - "col": 2, - "desc": true - }, - "styles": [ - { - "alias": "OSD ID", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "ceph_daemon", - "thresholds": [ ], - "type": "string", - "unit": "short", - "valueMaps": [ ] - }, - { - "alias": "Slow Ops", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" + "options": { + "footer": { + "countRows": false, + "enablePagination": false, + "fields": "", + "reducer": [ + "sum" ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "Value", - "thresholds": [ ], - "type": "number", - "unit": "none", - "valueMaps": [ ] + "show": false }, - { - "alias": "", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "/.*/", - "thresholds": [ ], - "type": "hidden", - "unit": "short", - "valueMaps": [ ] - } - ], + "frameIndex": 1, + "showHeader": true + }, + "pluginVersion": "10.4.0", + "styles": "", "targets": [ { "expr": "topk(10,\n (ceph_daemon_health_metrics{type=\"SLOW_OPS\", ceph_daemon=~\"osd.*\"})\n)\n", @@ -943,7 +1231,30 @@ "timeFrom": null, "timeShift": null, "title": "Top Slow Ops", - "transform": "table", + "transformations": [ + { + "id": "merge", + "options": { + "reducers": [ ] + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "__name__": true, + "cluster": true, + "instance": true, + "job": true, + "type": true + }, + "includeByName": { }, + "indexByName": { }, + "renameByName": { } + } + } + ], "type": "table" } ], diff --git a/monitoring/ceph-mixin/dashboards_out/pool-detail.json b/monitoring/ceph-mixin/dashboards_out/pool-detail.json index dc8b4152a..b43e38ccb 100644 --- a/monitoring/ceph-mixin/dashboards_out/pool-detail.json +++ b/monitoring/ceph-mixin/dashboards_out/pool-detail.json @@ -216,6 +216,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "ops" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -268,7 +277,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -305,6 +314,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "iops" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -369,7 +387,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -406,6 +424,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "Bps" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -470,7 +497,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -507,6 +534,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "short" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -559,7 +595,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", diff --git a/monitoring/ceph-mixin/dashboards_out/pool-overview.json b/monitoring/ceph-mixin/dashboards_out/pool-overview.json index 7f042aa5b..a819ca537 100644 --- a/monitoring/ceph-mixin/dashboards_out/pool-overview.json +++ b/monitoring/ceph-mixin/dashboards_out/pool-overview.json @@ -684,8 +684,458 @@ }, { "columns": [ ], - "datasource": "$datasource", - "description": "", + "datasource": "${datasource}", + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "filterable": true, + "inspect": false + }, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Time" + }, + "properties": [ + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "instance" + }, + "properties": [ + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "job" + }, + "properties": [ + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "name" + }, + "properties": [ + { + "id": "displayName", + "value": "Pool Name" + }, + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "pool_id" + }, + "properties": [ + { + "id": "displayName", + "value": "Pool ID" + }, + { + "id": "unit", + "value": "none" + }, + { + "id": "decimals", + "value": 2 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Value #A" + }, + "properties": [ + { + "id": "displayName", + "value": "Compression Factor" + }, + { + "id": "unit", + "value": "none" + }, + { + "id": "decimals", + "value": 2 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Value #D" + }, + "properties": [ + { + "id": "displayName", + "value": "% Used" + }, + { + "id": "unit", + "value": "percentunit" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } + }, + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(245, 54, 54, 0.9)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 70 + }, + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 85 + } + ] + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Value #B" + }, + "properties": [ + { + "id": "displayName", + "value": "Usable Free" + }, + { + "id": "unit", + "value": "bytes" + }, + { + "id": "decimals", + "value": 2 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Value #C" + }, + "properties": [ + { + "id": "displayName", + "value": "Compression Eligibility" + }, + { + "id": "unit", + "value": "percent" + }, + { + "id": "decimals", + "value": 2 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Value #E" + }, + "properties": [ + { + "id": "displayName", + "value": "Compression Savings" + }, + { + "id": "unit", + "value": "bytes" + }, + { + "id": "decimals", + "value": 2 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Value #F" + }, + "properties": [ + { + "id": "displayName", + "value": "Growth (5d)" + }, + { + "id": "unit", + "value": "bytes" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.cellOptions", + "value": { + "type": "color-text" + } + }, + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(245, 54, 54, 0.9)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 70 + }, + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 85 + } + ] + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Value #G" + }, + "properties": [ + { + "id": "displayName", + "value": "IOPS" + }, + { + "id": "unit", + "value": "none" + }, + { + "id": "decimals", + "value": 2 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Value #H" + }, + "properties": [ + { + "id": "displayName", + "value": "Bandwidth" + }, + { + "id": "unit", + "value": "Bps" + }, + { + "id": "decimals", + "value": 2 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "__name__" + }, + "properties": [ + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "type" + }, + "properties": [ + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "compression_mode" + }, + "properties": [ + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "description" + }, + "properties": [ + { + "id": "displayName", + "value": "Type" + }, + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Value #J" + }, + "properties": [ + { + "id": "displayName", + "value": "Stored" + }, + { + "id": "unit", + "value": "bytes" + }, + { + "id": "decimals", + "value": 2 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Value #I" + }, + "properties": [ + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Value #K" + }, + "properties": [ + { + "id": "displayName", + "value": "Compression" + }, + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + } + ] + } + ] + }, "gridPos": { "h": 6, "w": 24, @@ -694,363 +1144,21 @@ }, "id": 10, "links": [ ], - "sort": { - "col": 5, - "desc": true - }, - "styles": [ - { - "alias": "", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "Time", - "thresholds": [ ], - "type": "hidden", - "unit": "short", - "valueMaps": [ ] - }, - { - "alias": "", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "instance", - "thresholds": [ ], - "type": "hidden", - "unit": "short", - "valueMaps": [ ] - }, - { - "alias": "", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "job", - "thresholds": [ ], - "type": "hidden", - "unit": "short", - "valueMaps": [ ] - }, - { - "alias": "Pool Name", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "name", - "thresholds": [ ], - "type": "string", - "unit": "short", - "valueMaps": [ ] - }, - { - "alias": "Pool ID", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "pool_id", - "thresholds": [ ], - "type": "hidden", - "unit": "none", - "valueMaps": [ ] - }, - { - "alias": "Compression Factor", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "Value #A", - "thresholds": [ ], - "type": "number", - "unit": "none", - "valueMaps": [ ] - }, - { - "alias": "% Used", - "colorMode": "value", - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "Value #D", - "thresholds": [ - "70", - "85" - ], - "type": "number", - "unit": "percentunit", - "valueMaps": [ ] - }, - { - "alias": "Usable Free", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "Value #B", - "thresholds": [ ], - "type": "number", - "unit": "bytes", - "valueMaps": [ ] - }, - { - "alias": "Compression Eligibility", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" + "options": { + "footer": { + "countRows": false, + "enablePagination": false, + "fields": "", + "reducer": [ + "sum" ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "Value #C", - "thresholds": [ ], - "type": "number", - "unit": "percent", - "valueMaps": [ ] + "show": false }, - { - "alias": "Compression Savings", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "Value #E", - "thresholds": [ ], - "type": "number", - "unit": "bytes", - "valueMaps": [ ] - }, - { - "alias": "Growth (5d)", - "colorMode": "value", - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "Value #F", - "thresholds": [ - "0", - "0" - ], - "type": "number", - "unit": "bytes", - "valueMaps": [ ] - }, - { - "alias": "IOPS", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "Value #G", - "thresholds": [ ], - "type": "number", - "unit": "none", - "valueMaps": [ ] - }, - { - "alias": "Bandwidth", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "Value #H", - "thresholds": [ ], - "type": "number", - "unit": "Bps", - "valueMaps": [ ] - }, - { - "alias": "", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "__name__", - "thresholds": [ ], - "type": "hidden", - "unit": "short", - "valueMaps": [ ] - }, - { - "alias": "", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "type", - "thresholds": [ ], - "type": "hidden", - "unit": "short", - "valueMaps": [ ] - }, - { - "alias": "", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "compression_mode", - "thresholds": [ ], - "type": "hidden", - "unit": "short", - "valueMaps": [ ] - }, - { - "alias": "Type", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "description", - "thresholds": [ ], - "type": "string", - "unit": "short", - "valueMaps": [ ] - }, - { - "alias": "Stored", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "Value #J", - "thresholds": [ ], - "type": "number", - "unit": "bytes", - "valueMaps": [ ] - }, - { - "alias": "", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "Value #I", - "thresholds": [ ], - "type": "hidden", - "unit": "short", - "valueMaps": [ ] - }, - { - "alias": "Compression", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "Value #K", - "thresholds": [ ], - "type": "string", - "unit": "short", - "valueMaps": [ - { - "text": "ON", - "value": "1" - } - ] - } - ], + "frameIndex": 1, + "showHeader": true + }, + "pluginVersion": "10.4.0", + "styles": "", "targets": [ { "expr": "(\n ceph_pool_compress_under_bytes{job=~\"$job\"} /\n ceph_pool_compress_bytes_used{job=~\"$job\"} > 0\n) and on(pool_id) (\n (\n (ceph_pool_compress_under_bytes{job=~\"$job\"} > 0) /\n ceph_pool_stored_raw{job=~\"$job\"}\n ) * 100 > 0.5\n)\n", @@ -1151,7 +1259,41 @@ "timeFrom": null, "timeShift": null, "title": "Pool Overview", - "transform": "table", + "transformations": [ + { + "id": "merge", + "options": { } + }, + { + "id": "seriesToRows", + "options": { } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "Value #A": true, + "Value #B": false, + "Value #C": true, + "Value #D": false, + "Value #E": true, + "Value #I": true, + "Value #K": true, + "__name__": true, + "cluster": true, + "compression_mode": true, + "instance": true, + "job": true, + "pool_id": true, + "type": true + }, + "includeByName": { }, + "indexByName": { }, + "renameByName": { } + } + } + ], "type": "table" }, { @@ -1161,6 +1303,15 @@ "dashes": false, "datasource": "$datasource", "description": "This chart shows the sum of read and write IOPS from all clients by pool", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "short" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -1220,7 +1371,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -1254,6 +1405,15 @@ "dashes": false, "datasource": "$datasource", "description": "The chart shows the sum of read and write bytes from all clients, by pool", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "Bps" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -1306,7 +1466,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -1340,6 +1500,15 @@ "dashes": false, "datasource": "$datasource", "description": "Historical view of capacity usage, to help identify growth and trends in pool consumption", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "bytes" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -1392,7 +1561,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", diff --git a/monitoring/ceph-mixin/dashboards_out/radosgw-detail.json b/monitoring/ceph-mixin/dashboards_out/radosgw-detail.json index a0f8f3537..8c6ad6d68 100644 --- a/monitoring/ceph-mixin/dashboards_out/radosgw-detail.json +++ b/monitoring/ceph-mixin/dashboards_out/radosgw-detail.json @@ -69,6 +69,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "s" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -93,7 +102,7 @@ "lines": true, "linewidth": 1, "links": [ ], - "nullPointMode": "null", + "nullPointMode": "null as zero", "percentage": false, "pointradius": 5, "points": false, @@ -128,7 +137,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -162,6 +171,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "bytes" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -186,7 +204,7 @@ "lines": true, "linewidth": 1, "links": [ ], - "nullPointMode": "null", + "nullPointMode": "null as zero", "percentage": false, "pointradius": 5, "points": false, @@ -221,7 +239,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -261,6 +279,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "short" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -285,7 +312,7 @@ "lines": true, "linewidth": 1, "links": [ ], - "nullPointMode": "null", + "nullPointMode": "null as zero", "percentage": false, "pointradius": 5, "points": false, @@ -334,7 +361,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -362,15 +389,100 @@ ] }, { - "aliasColors": { - "Failures": "#bf1b00", - "GETs": "#7eb26d", - "Other (HEAD,POST,DELETE)": "#447ebc", - "PUTs": "#eab839", - "Requests": "#3f2b5b" - }, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [ ] + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Failures" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#bf1b00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "GETs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7eb26d", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Other (HEAD,POST,DELETE)" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#447ebc", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PUTs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#eab839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Requests" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#3f2b5b", + "mode": "fixed" + } + } + ] + } + ] + }, "gridPos": { "h": 8, "w": 4, @@ -378,13 +490,31 @@ "y": 1 }, "id": 6, - "legend": { - "percentage": true, - "show": true, - "values": true + "options": { + "displayLabels": [ ], + "legend": { + "calcs": [ ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "values": [ + "percent", + "value" + ] + }, + "pieType": "pie", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } }, - "legendType": "Under graph", - "pieType": "pie", "targets": [ { "expr": "rate(ceph_rgw_failed_req{job=~\"$job\"}[$__rate_interval]) *\n on (instance_id) group_left (ceph_daemon) ceph_rgw_metadata{job=~\"$job\", ceph_daemon=~\"$rgw_servers\"}\n", @@ -416,8 +546,7 @@ } ], "title": "Workload Breakdown", - "type": "grafana-piechart-panel", - "valueName": "current" + "type": "piechart" } ], "refresh": "30s", diff --git a/monitoring/ceph-mixin/dashboards_out/radosgw-overview.json b/monitoring/ceph-mixin/dashboards_out/radosgw-overview.json index 77d69e4f3..92e416764 100644 --- a/monitoring/ceph-mixin/dashboards_out/radosgw-overview.json +++ b/monitoring/ceph-mixin/dashboards_out/radosgw-overview.json @@ -63,6 +63,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "s" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -87,7 +96,7 @@ "lines": true, "linewidth": 1, "links": [ ], - "nullPointMode": "null", + "nullPointMode": "null as zero", "percentage": false, "pointradius": 5, "points": false, @@ -122,7 +131,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -156,6 +165,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "none" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -180,7 +198,7 @@ "lines": true, "linewidth": 1, "links": [ ], - "nullPointMode": "null", + "nullPointMode": "null as zero", "percentage": false, "pointradius": 5, "points": false, @@ -208,7 +226,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -242,6 +260,15 @@ "dashes": false, "datasource": "$datasource", "description": "Latencies are shown stacked, without a yaxis to provide a visual indication of GET latency imbalance across RGW hosts", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "s" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -266,7 +293,7 @@ "lines": true, "linewidth": 1, "links": [ ], - "nullPointMode": "null", + "nullPointMode": "null as zero", "percentage": false, "pointradius": 5, "points": false, @@ -294,7 +321,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -328,6 +355,15 @@ "dashes": false, "datasource": "$datasource", "description": "Total bytes transferred in/out of all radosgw instances within the cluster", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "bytes" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -352,7 +388,7 @@ "lines": true, "linewidth": 1, "links": [ ], - "nullPointMode": "null", + "nullPointMode": "null as zero", "percentage": false, "pointradius": 5, "points": false, @@ -387,7 +423,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -421,6 +457,15 @@ "dashes": false, "datasource": "$datasource", "description": "Total bytes transferred in/out through get/put operations, by radosgw instance", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "bytes" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -445,7 +490,7 @@ "lines": true, "linewidth": 1, "links": [ ], - "nullPointMode": "null", + "nullPointMode": "null as zero", "percentage": false, "pointradius": 5, "points": false, @@ -473,7 +518,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -507,6 +552,15 @@ "dashes": false, "datasource": "$datasource", "description": "Latencies are shown stacked, without a yaxis to provide a visual indication of PUT latency imbalance across RGW hosts", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "s" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -531,7 +585,7 @@ "lines": true, "linewidth": 1, "links": [ ], - "nullPointMode": "null", + "nullPointMode": "null as zero", "percentage": false, "pointradius": 5, "points": false, @@ -559,7 +613,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -612,6 +666,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "short" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -636,7 +699,7 @@ "lines": true, "linewidth": 1, "links": [ ], - "nullPointMode": "null", + "nullPointMode": "null as zero", "percentage": false, "pointradius": 5, "points": false, @@ -696,7 +759,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -730,6 +793,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "short" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -754,7 +826,7 @@ "lines": true, "linewidth": 1, "links": [ ], - "nullPointMode": "null", + "nullPointMode": "null as zero", "percentage": false, "pointradius": 5, "points": false, @@ -835,7 +907,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -869,6 +941,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "short" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -893,7 +974,7 @@ "lines": true, "linewidth": 1, "links": [ ], - "nullPointMode": "null", + "nullPointMode": "null as zero", "percentage": false, "pointradius": 5, "points": false, @@ -942,7 +1023,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -976,6 +1057,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "short" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -1000,7 +1090,7 @@ "lines": true, "linewidth": 1, "links": [ ], - "nullPointMode": "null", + "nullPointMode": "null as zero", "percentage": false, "pointradius": 5, "points": false, @@ -1056,7 +1146,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", diff --git a/monitoring/ceph-mixin/dashboards_out/radosgw-sync-overview.json b/monitoring/ceph-mixin/dashboards_out/radosgw-sync-overview.json index e0c3037d5..09227b958 100644 --- a/monitoring/ceph-mixin/dashboards_out/radosgw-sync-overview.json +++ b/monitoring/ceph-mixin/dashboards_out/radosgw-sync-overview.json @@ -44,6 +44,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "Bps" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -96,7 +105,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -130,6 +139,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "short" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -182,7 +200,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -216,6 +234,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "ms" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -268,7 +295,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -302,6 +329,15 @@ "dashes": false, "datasource": "$datasource", "description": "", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "short" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -354,7 +390,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", diff --git a/monitoring/ceph-mixin/dashboards_out/rbd-details.json b/monitoring/ceph-mixin/dashboards_out/rbd-details.json index f64de312a..36cd346a5 100644 --- a/monitoring/ceph-mixin/dashboards_out/rbd-details.json +++ b/monitoring/ceph-mixin/dashboards_out/rbd-details.json @@ -43,7 +43,16 @@ "dashLength": 10, "dashes": false, "datasource": "$datasource", - "description": "", + "description": "RBD per-image IO statistics are disabled by default.\n\nPlease refer to https://docs.ceph.com/en/latest/mgr/prometheus/#rbd-io-statistics for information about how to enable those optionally.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "iops" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -103,7 +112,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -136,7 +145,16 @@ "dashLength": 10, "dashes": false, "datasource": "$datasource", - "description": "", + "description": "RBD per-image IO statistics are disabled by default.\n\nPlease refer to https://docs.ceph.com/en/latest/mgr/prometheus/#rbd-io-statistics for information about how to enable those optionally.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "Bps" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -196,7 +214,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -229,7 +247,16 @@ "dashLength": 10, "dashes": false, "datasource": "$datasource", - "description": "", + "description": "RBD per-image IO statistics are disabled by default.\n\nPlease refer to https://docs.ceph.com/en/latest/mgr/prometheus/#rbd-io-statistics for information about how to enable those optionally.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "ns" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -289,7 +316,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", diff --git a/monitoring/ceph-mixin/dashboards_out/rbd-overview.json b/monitoring/ceph-mixin/dashboards_out/rbd-overview.json index e017280e0..dcef22ad3 100644 --- a/monitoring/ceph-mixin/dashboards_out/rbd-overview.json +++ b/monitoring/ceph-mixin/dashboards_out/rbd-overview.json @@ -55,7 +55,16 @@ "dashLength": 10, "dashes": false, "datasource": "$datasource", - "description": "", + "description": "RBD per-image IO statistics are disabled by default.\n\nPlease refer to https://docs.ceph.com/en/latest/mgr/prometheus/#rbd-io-statistics for information about how to enable those optionally.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "short" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -80,7 +89,7 @@ "lines": true, "linewidth": 1, "links": [ ], - "nullPointMode": "null", + "nullPointMode": "null as zero", "percentage": false, "pointradius": 5, "points": false, @@ -115,7 +124,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -148,7 +157,16 @@ "dashLength": 10, "dashes": false, "datasource": "$datasource", - "description": "", + "description": "RBD per-image IO statistics are disabled by default.\n\nPlease refer to https://docs.ceph.com/en/latest/mgr/prometheus/#rbd-io-statistics for information about how to enable those optionally.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "Bps" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -173,7 +191,7 @@ "lines": true, "linewidth": 1, "links": [ ], - "nullPointMode": "null", + "nullPointMode": "null as zero", "percentage": false, "pointradius": 5, "points": false, @@ -208,7 +226,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -241,7 +259,16 @@ "dashLength": 10, "dashes": false, "datasource": "$datasource", - "description": "", + "description": "RBD per-image IO statistics are disabled by default.\n\nPlease refer to https://docs.ceph.com/en/latest/mgr/prometheus/#rbd-io-statistics for information about how to enable those optionally.", + "fieldConfig": { + "defaults": { + "custom": { + "fillOpacity": 8, + "showPoints": "never" + }, + "unit": "ns" + } + }, "fill": 1, "fillGradient": 0, "gridPos": { @@ -266,7 +293,7 @@ "lines": true, "linewidth": 1, "links": [ ], - "nullPointMode": "null", + "nullPointMode": "null as zero", "percentage": false, "pointradius": 5, "points": false, @@ -301,7 +328,7 @@ "sort": 0, "value_type": "individual" }, - "type": "graph", + "type": "timeseries", "xaxis": { "buckets": null, "mode": "time", @@ -330,8 +357,107 @@ }, { "columns": [ ], - "datasource": "$datasource", - "description": "", + "datasource": "${datasource}", + "description": "RBD per-image IO statistics are disabled by default.\n\nPlease refer to https://docs.ceph.com/en/latest/mgr/prometheus/#rbd-io-statistics for information about how to enable those optionally.", + "fieldConfig": { + "defaults": { + "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": "pool" + }, + "properties": [ + { + "id": "displayName", + "value": "Pool" + }, + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.align", + "value": null + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "image" + }, + "properties": [ + { + "id": "displayName", + "value": "Image" + }, + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.align", + "value": null + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Value" + }, + "properties": [ + { + "id": "displayName", + "value": "IOPS" + }, + { + "id": "unit", + "value": "iops" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.align", + "value": null + } + ] + } + ] + }, "gridPos": { "h": 7, "w": 8, @@ -340,80 +466,21 @@ }, "id": 5, "links": [ ], - "sort": { - "col": 3, - "desc": true - }, - "styles": [ - { - "alias": "Pool", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "pool", - "thresholds": [ ], - "type": "string", - "unit": "short", - "valueMaps": [ ] - }, - { - "alias": "Image", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "image", - "thresholds": [ ], - "type": "string", - "unit": "short", - "valueMaps": [ ] - }, - { - "alias": "IOPS", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" + "options": { + "footer": { + "countRows": false, + "enablePagination": false, + "fields": "", + "reducer": [ + "sum" ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "Value", - "thresholds": [ ], - "type": "number", - "unit": "iops", - "valueMaps": [ ] + "show": false }, - { - "alias": "", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "/.*/", - "thresholds": [ ], - "type": "hidden", - "unit": "short", - "valueMaps": [ ] - } - ], + "frameIndex": 1, + "showHeader": true + }, + "pluginVersion": "10.4.0", + "styles": "", "targets": [ { "expr": "topk(10,\n (\n sort((\n rate(ceph_rbd_write_ops{job=~\"$job\"}[$__rate_interval]) +\n on (image, pool, namespace) rate(ceph_rbd_read_ops{job=~\"$job\"}[$__rate_interval])\n ))\n )\n)\n", @@ -427,13 +494,119 @@ "timeFrom": null, "timeShift": null, "title": "Highest IOPS", - "transform": "table", + "transformations": [ + { + "id": "merge", + "options": { + "reducers": [ ] + } + } + ], "type": "table" }, { "columns": [ ], - "datasource": "$datasource", - "description": "", + "datasource": "${datasource}", + "description": "RBD per-image IO statistics are disabled by default.\n\nPlease refer to https://docs.ceph.com/en/latest/mgr/prometheus/#rbd-io-statistics for information about how to enable those optionally.", + "fieldConfig": { + "defaults": { + "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": "pool" + }, + "properties": [ + { + "id": "displayName", + "value": "Pool" + }, + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.align", + "value": null + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "image" + }, + "properties": [ + { + "id": "displayName", + "value": "Image" + }, + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.align", + "value": null + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Value" + }, + "properties": [ + { + "id": "displayName", + "value": "Throughput" + }, + { + "id": "unit", + "value": "Bps" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.align", + "value": null + } + ] + } + ] + }, "gridPos": { "h": 7, "w": 8, @@ -442,80 +615,21 @@ }, "id": 6, "links": [ ], - "sort": { - "col": 3, - "desc": true - }, - "styles": [ - { - "alias": "Pool", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" + "options": { + "footer": { + "countRows": false, + "enablePagination": false, + "fields": "", + "reducer": [ + "sum" ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "pool", - "thresholds": [ ], - "type": "string", - "unit": "short", - "valueMaps": [ ] + "show": false }, - { - "alias": "Image", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "image", - "thresholds": [ ], - "type": "string", - "unit": "short", - "valueMaps": [ ] - }, - { - "alias": "Throughput", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "Value", - "thresholds": [ ], - "type": "number", - "unit": "Bps", - "valueMaps": [ ] - }, - { - "alias": "", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "/.*/", - "thresholds": [ ], - "type": "hidden", - "unit": "short", - "valueMaps": [ ] - } - ], + "frameIndex": 1, + "showHeader": true + }, + "pluginVersion": "10.4.0", + "styles": "", "targets": [ { "expr": "topk(10,\n sort(\n sum(\n rate(ceph_rbd_read_bytes{job=~\"$job\"}[$__rate_interval]) +\n rate(ceph_rbd_write_bytes{job=~\"$job\"}[$__rate_interval])\n ) by (pool, image, namespace)\n )\n)\n", @@ -529,13 +643,119 @@ "timeFrom": null, "timeShift": null, "title": "Highest Throughput", - "transform": "table", + "transformations": [ + { + "id": "merge", + "options": { + "reducers": [ ] + } + } + ], "type": "table" }, { "columns": [ ], - "datasource": "$datasource", - "description": "", + "datasource": "${datasource}", + "description": "RBD per-image IO statistics are disabled by default.\n\nPlease refer to https://docs.ceph.com/en/latest/mgr/prometheus/#rbd-io-statistics for information about how to enable those optionally.", + "fieldConfig": { + "defaults": { + "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": "pool" + }, + "properties": [ + { + "id": "displayName", + "value": "Pool" + }, + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.align", + "value": null + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "image" + }, + "properties": [ + { + "id": "displayName", + "value": "Image" + }, + { + "id": "unit", + "value": "short" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.align", + "value": null + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Value" + }, + "properties": [ + { + "id": "displayName", + "value": "Latency" + }, + { + "id": "unit", + "value": "ns" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.align", + "value": null + } + ] + } + ] + }, "gridPos": { "h": 7, "w": 8, @@ -544,80 +764,21 @@ }, "id": 7, "links": [ ], - "sort": { - "col": 3, - "desc": true - }, - "styles": [ - { - "alias": "Pool", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "pool", - "thresholds": [ ], - "type": "string", - "unit": "short", - "valueMaps": [ ] - }, - { - "alias": "Image", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" + "options": { + "footer": { + "countRows": false, + "enablePagination": false, + "fields": "", + "reducer": [ + "sum" ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "image", - "thresholds": [ ], - "type": "string", - "unit": "short", - "valueMaps": [ ] + "show": false }, - { - "alias": "Latency", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "Value", - "thresholds": [ ], - "type": "number", - "unit": "ns", - "valueMaps": [ ] - }, - { - "alias": "", - "colorMode": null, - "colors": [ - "rgba(245, 54, 54, 0.9)", - "rgba(237, 129, 40, 0.89)", - "rgba(50, 172, 45, 0.97)" - ], - "dateFormat": "YYYY-MM-DD HH:mm:ss", - "decimals": 2, - "mappingType": 1, - "pattern": "/.*/", - "thresholds": [ ], - "type": "hidden", - "unit": "short", - "valueMaps": [ ] - } - ], + "frameIndex": 1, + "showHeader": true + }, + "pluginVersion": "10.4.0", + "styles": "", "targets": [ { "expr": "topk(10,\n sum(\n rate(ceph_rbd_write_latency_sum{job=~\"$job\"}[$__rate_interval]) /\n clamp_min(rate(ceph_rbd_write_latency_count{job=~\"$job\"}[$__rate_interval]), 1) +\n rate(ceph_rbd_read_latency_sum{job=~\"$job\"}[$__rate_interval]) /\n clamp_min(rate(ceph_rbd_read_latency_count{job=~\"$job\"}[$__rate_interval]), 1)\n ) by (pool, image, namespace)\n)\n", @@ -631,7 +792,14 @@ "timeFrom": null, "timeShift": null, "title": "Highest Latency", - "transform": "table", + "transformations": [ + { + "id": "merge", + "options": { + "reducers": [ ] + } + } + ], "type": "table" } ], diff --git a/monitoring/ceph-mixin/prometheus_alerts.libsonnet b/monitoring/ceph-mixin/prometheus_alerts.libsonnet index b7ec0da2f..a6ab4c2a3 100644 --- a/monitoring/ceph-mixin/prometheus_alerts.libsonnet +++ b/monitoring/ceph-mixin/prometheus_alerts.libsonnet @@ -689,6 +689,71 @@ }, ], }, + { + name: 'hardware', + rules: [ + { + alert: 'HardwareStorageError', + 'for': '30s', + expr: 'ceph_health_detail{name="HARDWARE_STORAGE"} > 0', + labels: { severity: 'critical', type: 'ceph_default', oid: '1.3.6.1.4.1.50495.1.2.1.13.1' }, + annotations: { + summary: 'Storage devices error(s) detected%(cluster)s' % $.MultiClusterSummary(), + description: 'Some storage devices are in error. Check `ceph health detail`.', + }, + }, + { + alert: 'HardwareMemoryError', + 'for': '30s', + expr: 'ceph_health_detail{name="HARDWARE_MEMORY"} > 0', + labels: { severity: 'critical', type: 'ceph_default', oid: '1.3.6.1.4.1.50495.1.2.1.13.2' }, + annotations: { + summary: 'DIMM error(s) detected%(cluster)s' % $.MultiClusterSummary(), + description: 'DIMM error(s) detected. Check `ceph health detail`.', + }, + }, + { + alert: 'HardwareProcessorError', + 'for': '30s', + expr: 'ceph_health_detail{name="HARDWARE_PROCESSOR"} > 0', + labels: { severity: 'critical', type: 'ceph_default', oid: '1.3.6.1.4.1.50495.1.2.1.13.3' }, + annotations: { + summary: 'Processor error(s) detected%(cluster)s' % $.MultiClusterSummary(), + description: 'Processor error(s) detected. Check `ceph health detail`.', + }, + }, + { + alert: 'HardwareNetworkError', + 'for': '30s', + expr: 'ceph_health_detail{name="HARDWARE_NETWORK"} > 0', + labels: { severity: 'critical', type: 'ceph_default', oid: '1.3.6.1.4.1.50495.1.2.1.13.4' }, + annotations: { + summary: 'Network error(s) detected%(cluster)s' % $.MultiClusterSummary(), + description: 'Network error(s) detected. Check `ceph health detail`.', + }, + }, + { + alert: 'HardwarePowerError', + 'for': '30s', + expr: 'ceph_health_detail{name="HARDWARE_POWER"} > 0', + labels: { severity: 'critical', type: 'ceph_default', oid: '1.3.6.1.4.1.50495.1.2.1.13.5' }, + annotations: { + summary: 'Power supply error(s) detected%(cluster)s' % $.MultiClusterSummary(), + description: 'Power supply error(s) detected. Check `ceph health detail`.', + }, + }, + { + alert: 'HardwareFanError', + 'for': '30s', + expr: 'ceph_health_detail{name="HARDWARE_FANS"} > 0', + labels: { severity: 'critical', type: 'ceph_default', oid: '1.3.6.1.4.1.50495.1.2.1.13.6' }, + annotations: { + summary: 'Fan error(s) detected%(cluster)s' % $.MultiClusterSummary(), + description: 'Fan error(s) detected. Check `ceph health detail`.', + }, + }, + ], + }, { name: 'PrometheusServer', rules: [ diff --git a/monitoring/ceph-mixin/prometheus_alerts.yml b/monitoring/ceph-mixin/prometheus_alerts.yml index 4a3e6acf3..e491c753f 100644 --- a/monitoring/ceph-mixin/prometheus_alerts.yml +++ b/monitoring/ceph-mixin/prometheus_alerts.yml @@ -614,6 +614,68 @@ groups: labels: severity: "warning" type: "ceph_default" + - name: "hardware" + rules: + - alert: "HardwareStorageError" + annotations: + description: "Some storage devices are in error. Check `ceph health detail`." + summary: "Storage devices error(s) detected" + expr: "ceph_health_detail{name=\"HARDWARE_STORAGE\"} > 0" + for: "30s" + labels: + oid: "1.3.6.1.4.1.50495.1.2.1.13.1" + severity: "critical" + type: "ceph_default" + - alert: "HardwareMemoryError" + annotations: + description: "DIMM error(s) detected. Check `ceph health detail`." + summary: "DIMM error(s) detected" + expr: "ceph_health_detail{name=\"HARDWARE_MEMORY\"} > 0" + for: "30s" + labels: + oid: "1.3.6.1.4.1.50495.1.2.1.13.2" + severity: "critical" + type: "ceph_default" + - alert: "HardwareProcessorError" + annotations: + description: "Processor error(s) detected. Check `ceph health detail`." + summary: "Processor error(s) detected" + expr: "ceph_health_detail{name=\"HARDWARE_PROCESSOR\"} > 0" + for: "30s" + labels: + oid: "1.3.6.1.4.1.50495.1.2.1.13.3" + severity: "critical" + type: "ceph_default" + - alert: "HardwareNetworkError" + annotations: + description: "Network error(s) detected. Check `ceph health detail`." + summary: "Network error(s) detected" + expr: "ceph_health_detail{name=\"HARDWARE_NETWORK\"} > 0" + for: "30s" + labels: + oid: "1.3.6.1.4.1.50495.1.2.1.13.4" + severity: "critical" + type: "ceph_default" + - alert: "HardwarePowerError" + annotations: + description: "Power supply error(s) detected. Check `ceph health detail`." + summary: "Power supply error(s) detected" + expr: "ceph_health_detail{name=\"HARDWARE_POWER\"} > 0" + for: "30s" + labels: + oid: "1.3.6.1.4.1.50495.1.2.1.13.5" + severity: "critical" + type: "ceph_default" + - alert: "HardwareFanError" + annotations: + description: "Fan error(s) detected. Check `ceph health detail`." + summary: "Fan error(s) detected" + expr: "ceph_health_detail{name=\"HARDWARE_FANS\"} > 0" + for: "30s" + labels: + oid: "1.3.6.1.4.1.50495.1.2.1.13.6" + severity: "critical" + type: "ceph_default" - name: "PrometheusServer" rules: - alert: "PrometheusJobMissing" diff --git a/monitoring/ceph-mixin/tests_alerts/test_alerts.yml b/monitoring/ceph-mixin/tests_alerts/test_alerts.yml index 1aaea88e7..4768af7de 100644 --- a/monitoring/ceph-mixin/tests_alerts/test_alerts.yml +++ b/monitoring/ceph-mixin/tests_alerts/test_alerts.yml @@ -1886,3 +1886,147 @@ tests: documentation: https://docs.ceph.com/en/latest/rados/operations/health-checks/#recent-crash summary: One or more Ceph daemons have crashed, and are pending acknowledgement description: One or more daemons have crashed recently, and need to be acknowledged. This notification ensures that software crashes do not go unseen. To acknowledge a crash, use the 'ceph crash archive ' command. + - interval: 30s + input_series: + - series: 'ceph_health_detail{name="HARDWARE_STORAGE"}' + values: '1+0x40' + promql_expr_test: + - expr: ceph_health_detail{name="HARDWARE_STORAGE"} > 0 + eval_time: 2m + exp_samples: + - labels: '{__name__="ceph_health_detail", name="HARDWARE_STORAGE"}' + value: 1 + alert_rule_test: + - eval_time: 1m + alertname: HardwareStorageError + - eval_time: 5m + alertname: HardwareStorageError + exp_alerts: + - exp_labels: + name: HARDWARE_STORAGE + severity: critical + type: ceph_default + oid: 1.3.6.1.4.1.50495.1.2.1.13.1 + exp_annotations: + summary: Storage devices error(s) detected + description: "Some storage devices are in error. Check `ceph health detail`." + - interval: 30s + input_series: + - series: 'ceph_health_detail{name="HARDWARE_MEMORY"}' + values: '1+0x40' + promql_expr_test: + - expr: ceph_health_detail{name="HARDWARE_MEMORY"} > 0 + eval_time: 2m + exp_samples: + - labels: '{__name__="ceph_health_detail", name="HARDWARE_MEMORY"}' + value: 1 + alert_rule_test: + - eval_time: 1m + alertname: HardwareMemoryError + - eval_time: 5m + alertname: HardwareMemoryError + exp_alerts: + - exp_labels: + name: HARDWARE_MEMORY + severity: critical + type: ceph_default + oid: 1.3.6.1.4.1.50495.1.2.1.13.2 + exp_annotations: + summary: DIMM error(s) detected + description: "DIMM error(s) detected. Check `ceph health detail`." + - interval: 30s + input_series: + - series: 'ceph_health_detail{name="HARDWARE_PROCESSOR"}' + values: '1+0x40' + promql_expr_test: + - expr: ceph_health_detail{name="HARDWARE_PROCESSOR"} > 0 + eval_time: 2m + exp_samples: + - labels: '{__name__="ceph_health_detail", name="HARDWARE_PROCESSOR"}' + value: 1 + alert_rule_test: + - eval_time: 1m + alertname: HardwareProcessorError + - eval_time: 5m + alertname: HardwareProcessorError + exp_alerts: + - exp_labels: + name: HARDWARE_PROCESSOR + severity: critical + type: ceph_default + oid: 1.3.6.1.4.1.50495.1.2.1.13.3 + exp_annotations: + summary: Processor error(s) detected + description: "Processor error(s) detected. Check `ceph health detail`." + - interval: 30s + input_series: + - series: 'ceph_health_detail{name="HARDWARE_NETWORK"}' + values: '1+0x40' + promql_expr_test: + - expr: ceph_health_detail{name="HARDWARE_NETWORK"} > 0 + eval_time: 2m + exp_samples: + - labels: '{__name__="ceph_health_detail", name="HARDWARE_NETWORK"}' + value: 1 + alert_rule_test: + - eval_time: 1m + alertname: HardwareNetworkError + - eval_time: 5m + alertname: HardwareNetworkError + exp_alerts: + - exp_labels: + name: HARDWARE_NETWORK + severity: critical + type: ceph_default + oid: 1.3.6.1.4.1.50495.1.2.1.13.4 + exp_annotations: + summary: Network error(s) detected + description: "Network error(s) detected. Check `ceph health detail`." + - interval: 30s + input_series: + - series: 'ceph_health_detail{name="HARDWARE_POWER"}' + values: '1+0x40' + promql_expr_test: + - expr: ceph_health_detail{name="HARDWARE_POWER"} > 0 + eval_time: 2m + exp_samples: + - labels: '{__name__="ceph_health_detail", name="HARDWARE_POWER"}' + value: 1 + alert_rule_test: + - eval_time: 1m + alertname: HardwarePowerError + - eval_time: 5m + alertname: HardwarePowerError + exp_alerts: + - exp_labels: + name: HARDWARE_POWER + severity: critical + type: ceph_default + oid: 1.3.6.1.4.1.50495.1.2.1.13.5 + exp_annotations: + summary: Power supply error(s) detected + description: "Power supply error(s) detected. Check `ceph health detail`." + - interval: 30s + input_series: + - series: 'ceph_health_detail{name="HARDWARE_FANS"}' + values: '1+0x40' + promql_expr_test: + - expr: ceph_health_detail{name="HARDWARE_FANS"} > 0 + eval_time: 2m + exp_samples: + - labels: '{__name__="ceph_health_detail", name="HARDWARE_FANS"}' + value: 1 + alert_rule_test: + - eval_time: 1m + alertname: HardwareFanError + - eval_time: 5m + alertname: HardwareFanError + exp_alerts: + - exp_labels: + name: HARDWARE_FANS + severity: critical + type: ceph_default + oid: 1.3.6.1.4.1.50495.1.2.1.13.6 + exp_annotations: + summary: Fan error(s) detected + description: "Fan error(s) detected. Check `ceph health detail`." -- cgit v1.2.3