|
|
|
@ -6,6 +6,7 @@ local template = grafana.template;
|
|
|
|
|
local graphPanel = grafana.graphPanel;
|
|
|
|
|
local grafana70 = import 'github.com/grafana/grafonnet-lib/grafonnet-7.0/grafana.libsonnet';
|
|
|
|
|
local gaugePanel = grafana70.panel.gauge;
|
|
|
|
|
local table = grafana70.panel.table;
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
@ -217,52 +218,195 @@ local gaugePanel = grafana70.panel.gauge;
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// TODO: Somehow partition this by device while excluding read-only devices.
|
|
|
|
|
local diskSpaceUsage =
|
|
|
|
|
graphPanel.new(
|
|
|
|
|
'Disk Space Usage',
|
|
|
|
|
table.new(
|
|
|
|
|
title='Disk Space Usage',
|
|
|
|
|
datasource='$datasource',
|
|
|
|
|
span=6,
|
|
|
|
|
format='bytes',
|
|
|
|
|
min=0,
|
|
|
|
|
fill=1,
|
|
|
|
|
stack=true,
|
|
|
|
|
)
|
|
|
|
|
.setFieldConfig(unit='decbytes')
|
|
|
|
|
.addThresholdStep(color='green', value=null)
|
|
|
|
|
.addThresholdStep(color='yellow', value=0.8)
|
|
|
|
|
.addThresholdStep(color='red', value=0.9)
|
|
|
|
|
.addTarget(prometheus.target(
|
|
|
|
|
|||
|
|
|
|
|
sum(
|
|
|
|
|
max by (device) (
|
|
|
|
|
node_filesystem_size_bytes{%(nodeExporterSelector)s, instance="$instance", %(fsSelector)s}
|
|
|
|
|
-
|
|
|
|
|
node_filesystem_avail_bytes{%(nodeExporterSelector)s, instance="$instance", %(fsSelector)s}
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
max by (mountpoint) (node_filesystem_size_bytes{%(nodeExporterSelector)s, instance="$instance", %(fsSelector)s})
|
|
|
|
|
||| % config,
|
|
|
|
|
legendFormat='used',
|
|
|
|
|
legendFormat='',
|
|
|
|
|
instant=true,
|
|
|
|
|
format='table'
|
|
|
|
|
))
|
|
|
|
|
.addTarget(prometheus.target(
|
|
|
|
|
|||
|
|
|
|
|
sum(
|
|
|
|
|
max by (device) (
|
|
|
|
|
node_filesystem_avail_bytes{%(nodeExporterSelector)s, instance="$instance", %(fsSelector)s}
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
max by (mountpoint) (node_filesystem_avail_bytes{%(nodeExporterSelector)s, instance="$instance", %(fsSelector)s})
|
|
|
|
|
||| % config,
|
|
|
|
|
legendFormat='available',
|
|
|
|
|
)) +
|
|
|
|
|
{
|
|
|
|
|
seriesOverrides: [
|
|
|
|
|
legendFormat='',
|
|
|
|
|
instant=true,
|
|
|
|
|
format='table'
|
|
|
|
|
))
|
|
|
|
|
.addOverride(
|
|
|
|
|
matcher={
|
|
|
|
|
id: 'byName',
|
|
|
|
|
options: 'Mounted on',
|
|
|
|
|
},
|
|
|
|
|
properties=[
|
|
|
|
|
{
|
|
|
|
|
id: 'custom.width',
|
|
|
|
|
value: 260,
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
)
|
|
|
|
|
.addOverride(
|
|
|
|
|
matcher={
|
|
|
|
|
id: 'byName',
|
|
|
|
|
options: 'Size',
|
|
|
|
|
},
|
|
|
|
|
properties=[
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
id: 'custom.width',
|
|
|
|
|
value: 93,
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
],
|
|
|
|
|
)
|
|
|
|
|
.addOverride(
|
|
|
|
|
matcher={
|
|
|
|
|
id: 'byName',
|
|
|
|
|
options: 'Used',
|
|
|
|
|
},
|
|
|
|
|
properties=[
|
|
|
|
|
{
|
|
|
|
|
id: 'custom.width',
|
|
|
|
|
value: 72,
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
)
|
|
|
|
|
.addOverride(
|
|
|
|
|
matcher={
|
|
|
|
|
id: 'byName',
|
|
|
|
|
options: 'Available',
|
|
|
|
|
},
|
|
|
|
|
properties=[
|
|
|
|
|
{
|
|
|
|
|
id: 'custom.width',
|
|
|
|
|
value: 88,
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
.addOverride(
|
|
|
|
|
matcher={
|
|
|
|
|
id: 'byName',
|
|
|
|
|
options: 'Used, %',
|
|
|
|
|
},
|
|
|
|
|
properties=[
|
|
|
|
|
{
|
|
|
|
|
id: 'unit',
|
|
|
|
|
value: 'percentunit',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: 'custom.displayMode',
|
|
|
|
|
value: 'gradient-gauge',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: 'max',
|
|
|
|
|
value: 1,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
alias: 'used',
|
|
|
|
|
color: '#E0B400',
|
|
|
|
|
id: 'min',
|
|
|
|
|
value: 0,
|
|
|
|
|
},
|
|
|
|
|
]
|
|
|
|
|
)
|
|
|
|
|
+ { span: 6 }
|
|
|
|
|
+ {
|
|
|
|
|
transformations: [
|
|
|
|
|
{
|
|
|
|
|
id: 'groupBy',
|
|
|
|
|
options: {
|
|
|
|
|
fields: {
|
|
|
|
|
'Value #A': {
|
|
|
|
|
aggregations: [
|
|
|
|
|
'lastNotNull',
|
|
|
|
|
],
|
|
|
|
|
operation: 'aggregate',
|
|
|
|
|
},
|
|
|
|
|
'Value #B': {
|
|
|
|
|
aggregations: [
|
|
|
|
|
'lastNotNull',
|
|
|
|
|
],
|
|
|
|
|
operation: 'aggregate',
|
|
|
|
|
},
|
|
|
|
|
mountpoint: {
|
|
|
|
|
aggregations: [],
|
|
|
|
|
operation: 'groupby',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
alias: 'available',
|
|
|
|
|
color: '#73BF69',
|
|
|
|
|
id: 'merge',
|
|
|
|
|
options: {},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: 'calculateField',
|
|
|
|
|
options: {
|
|
|
|
|
alias: 'Used',
|
|
|
|
|
binary: {
|
|
|
|
|
left: 'Value #A (lastNotNull)',
|
|
|
|
|
operator: '-',
|
|
|
|
|
reducer: 'sum',
|
|
|
|
|
right: 'Value #B (lastNotNull)',
|
|
|
|
|
},
|
|
|
|
|
mode: 'binary',
|
|
|
|
|
reduce: {
|
|
|
|
|
reducer: 'sum',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: 'calculateField',
|
|
|
|
|
options: {
|
|
|
|
|
alias: 'Used, %',
|
|
|
|
|
binary: {
|
|
|
|
|
left: 'Used',
|
|
|
|
|
operator: '/',
|
|
|
|
|
reducer: 'sum',
|
|
|
|
|
right: 'Value #A (lastNotNull)',
|
|
|
|
|
},
|
|
|
|
|
mode: 'binary',
|
|
|
|
|
reduce: {
|
|
|
|
|
reducer: 'sum',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: 'organize',
|
|
|
|
|
options: {
|
|
|
|
|
excludeByName: {},
|
|
|
|
|
indexByName: {},
|
|
|
|
|
renameByName: {
|
|
|
|
|
'Value #A (lastNotNull)': 'Size',
|
|
|
|
|
'Value #B (lastNotNull)': 'Available',
|
|
|
|
|
mountpoint: 'Mounted on',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: 'sortBy',
|
|
|
|
|
options: {
|
|
|
|
|
fields: {},
|
|
|
|
|
sort: [
|
|
|
|
|
{
|
|
|
|
|
field: 'Mounted on',
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
local networkReceived =
|
|
|
|
|
graphPanel.new(
|
|
|
|
|
'Network Received',
|
|
|
|
|