Use grafanalib to generate Grafana dashboards
This commit is contained in:
454
assets/grafana/kubernetes-capacity-planning.dashboard.py
Normal file
454
assets/grafana/kubernetes-capacity-planning.dashboard.py
Normal file
@@ -0,0 +1,454 @@
|
||||
from grafanalib.core import *
|
||||
|
||||
|
||||
dashboard = Dashboard(
|
||||
title='Kubernetes Capacity Planning',
|
||||
version=4,
|
||||
gnetId=22,
|
||||
graphTooltip=0,
|
||||
refresh=False,
|
||||
schemaVersion=14,
|
||||
time=Time(start='now-1h'),
|
||||
timezone='browser',
|
||||
inputs=[
|
||||
{
|
||||
'name': 'DS_PROMETHEUS',
|
||||
'label': 'prometheus',
|
||||
'description': '',
|
||||
'type': 'datasource',
|
||||
'pluginId': 'prometheus',
|
||||
'pluginName': 'Prometheus',
|
||||
}
|
||||
],
|
||||
rows=[
|
||||
Row(
|
||||
height=250, title='New Row', showTitle=False,
|
||||
titleSize='h6', panels=[
|
||||
Graph(
|
||||
title='Idle CPU',
|
||||
id=3,
|
||||
dataSource='${DS_PROMETHEUS}',
|
||||
dashLength=10,
|
||||
dashes=False,
|
||||
isNew=False,
|
||||
spaceLength=10,
|
||||
span=6,
|
||||
tooltip=Tooltip(msResolution=False),
|
||||
yAxes=YAxes(
|
||||
YAxis(format='percent', label='cpu usage',),
|
||||
YAxis(format='short', min=None),
|
||||
),
|
||||
targets=[
|
||||
{
|
||||
'expr': 'sum(rate(node_cpu{mode=\"idle\"}[2m])) '
|
||||
'* 100',
|
||||
'hide': False,
|
||||
'intervalFactor': 10,
|
||||
'legendFormat': '',
|
||||
'refId': 'A',
|
||||
'step': 50,
|
||||
},
|
||||
],
|
||||
),
|
||||
Graph(
|
||||
title='System Load',
|
||||
id=9,
|
||||
dataSource='${DS_PROMETHEUS}',
|
||||
dashLength=10,
|
||||
dashes=False,
|
||||
isNew=False,
|
||||
spaceLength=10,
|
||||
span=6,
|
||||
tooltip=Tooltip(msResolution=False),
|
||||
yAxes=YAxes(
|
||||
YAxis(format='percentunit', min=None),
|
||||
YAxis(format='short', min=None),
|
||||
),
|
||||
targets=[
|
||||
{
|
||||
'expr': 'sum(node_load1)',
|
||||
'intervalFactor': 4,
|
||||
'legendFormat': 'load 1m',
|
||||
'refId': 'A',
|
||||
'step': 20,
|
||||
'target': '',
|
||||
},
|
||||
{
|
||||
'expr': 'sum(node_load5)',
|
||||
'intervalFactor': 4,
|
||||
'legendFormat': 'load 5m',
|
||||
'refId': 'B',
|
||||
'step': 20,
|
||||
'target': ''
|
||||
},
|
||||
{
|
||||
'expr': 'sum(node_load15)',
|
||||
'intervalFactor': 4,
|
||||
'legendFormat': 'load 15m',
|
||||
'refId': 'C',
|
||||
'step': 20,
|
||||
'target': '',
|
||||
},
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
height=250, title='New Row', showTitle=False,
|
||||
titleSize='h6', panels=[
|
||||
Graph(
|
||||
title='Memory Usage',
|
||||
id=4,
|
||||
dataSource='${DS_PROMETHEUS}',
|
||||
dashLength=10,
|
||||
dashes=False,
|
||||
isNew=False,
|
||||
spaceLength=10,
|
||||
span=9,
|
||||
stack=True,
|
||||
seriesOverrides=[
|
||||
{
|
||||
'alias': 'node_memory_SwapFree{instance='
|
||||
'\"172.17.0.1:9100\",job=\"prometheus\"}',
|
||||
'yaxis': 2,
|
||||
}
|
||||
],
|
||||
tooltip=Tooltip(
|
||||
msResolution=False, valueType='individual'
|
||||
),
|
||||
yAxes=YAxes(
|
||||
YAxis(format='bytes', min='0'),
|
||||
YAxis(format='short', min=None),
|
||||
),
|
||||
targets=[
|
||||
{
|
||||
'expr': 'sum(node_memory_MemTotal) - sum(node_'
|
||||
'memory_MemFree) - sum(node_memory_Buffers) - '
|
||||
'sum(node_memory_Cached)',
|
||||
'intervalFactor': 2,
|
||||
'legendFormat': 'memory usage',
|
||||
'metric': 'memo',
|
||||
'refId': 'A',
|
||||
'step': 10,
|
||||
'target': '',
|
||||
},
|
||||
{
|
||||
'expr': 'sum(node_memory_Buffers)',
|
||||
'interval': '',
|
||||
'intervalFactor': 2,
|
||||
'legendFormat': 'memory buffers',
|
||||
'metric': 'memo',
|
||||
'refId': 'B',
|
||||
'step': 10,
|
||||
'target': '',
|
||||
},
|
||||
{
|
||||
'expr': 'sum(node_memory_Cached)',
|
||||
'interval': '',
|
||||
'intervalFactor': 2,
|
||||
'legendFormat': 'memory cached',
|
||||
'metric': 'memo',
|
||||
'refId': 'C',
|
||||
'step': 10,
|
||||
'target': '',
|
||||
},
|
||||
{
|
||||
'expr': 'sum(node_memory_MemFree)',
|
||||
'interval': '',
|
||||
'intervalFactor': 2,
|
||||
'legendFormat': 'memory free',
|
||||
'metric': 'memo',
|
||||
'refId': 'D',
|
||||
'step': 10,
|
||||
'target': '',
|
||||
},
|
||||
],
|
||||
),
|
||||
SingleStat(
|
||||
title='Memory Usage',
|
||||
dataSource='${DS_PROMETHEUS}',
|
||||
id=5,
|
||||
format='percent',
|
||||
span=3,
|
||||
gauge=Gauge(show=True),
|
||||
thresholds='80, 90',
|
||||
valueMaps=[
|
||||
{
|
||||
'op': '=',
|
||||
'text': 'N/A',
|
||||
'value': 'null',
|
||||
},
|
||||
],
|
||||
rangeMaps=[
|
||||
{
|
||||
'from': 'null',
|
||||
'text': 'N/A',
|
||||
'to': 'null',
|
||||
},
|
||||
],
|
||||
targets=[
|
||||
{
|
||||
'expr': '((sum(node_memory_MemTotal) - '
|
||||
'sum(node_memory_MemFree) - sum('
|
||||
'node_memory_Buffers) - sum(node_memory_Cached)) '
|
||||
'/ sum(node_memory_MemTotal)) * 100',
|
||||
'intervalFactor': 2,
|
||||
'metric': '',
|
||||
'refId': 'A',
|
||||
'step': 60,
|
||||
'target': '',
|
||||
},
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
height=246, title='New Row', showTitle=False,
|
||||
titleSize='h6', panels=[
|
||||
Graph(
|
||||
title='Disk I/O',
|
||||
dataSource='${DS_PROMETHEUS}',
|
||||
id=6,
|
||||
dashLength=10,
|
||||
dashes=False,
|
||||
isNew=False,
|
||||
spaceLength=10,
|
||||
span=9,
|
||||
tooltip=Tooltip(msResolution=False),
|
||||
seriesOverrides=[
|
||||
{
|
||||
'alias': 'read',
|
||||
'yaxis': 1
|
||||
},
|
||||
{
|
||||
'alias': '{instance=\"172.17.0.1:9100\"}',
|
||||
'yaxis': 2,
|
||||
},
|
||||
{
|
||||
'alias': 'io time',
|
||||
'yaxis': 2,
|
||||
},
|
||||
],
|
||||
yAxes=YAxes(
|
||||
YAxis(format='bytes', min=None),
|
||||
YAxis(format='ms', min=None),
|
||||
),
|
||||
targets=[
|
||||
{
|
||||
'expr': 'sum(rate(node_disk_bytes_read[5m]))',
|
||||
'hide': False,
|
||||
'intervalFactor': 4,
|
||||
'legendFormat': 'read',
|
||||
'refId': 'A',
|
||||
'step': 20,
|
||||
'target': ''
|
||||
},
|
||||
{
|
||||
'expr': 'sum(rate(node_disk_bytes_written[5m]))',
|
||||
'intervalFactor': 4,
|
||||
'legendFormat': 'written',
|
||||
'refId': 'B',
|
||||
'step': 20
|
||||
},
|
||||
{
|
||||
'expr': 'sum(rate(node_disk_io_time_ms[5m]))',
|
||||
'intervalFactor': 4,
|
||||
'legendFormat': 'io time',
|
||||
'refId': 'C',
|
||||
'step': 20
|
||||
},
|
||||
],
|
||||
),
|
||||
SingleStat(
|
||||
title='Disk Space Usage',
|
||||
dataSource='${DS_PROMETHEUS}',
|
||||
id=12,
|
||||
span=3,
|
||||
format='percentunit',
|
||||
valueName='current',
|
||||
gauge=Gauge(
|
||||
maxValue=1,
|
||||
show=True,
|
||||
),
|
||||
thresholds='0.75, 0.9',
|
||||
rangeMaps=[
|
||||
{
|
||||
'from': 'null',
|
||||
'text': 'N/A',
|
||||
'to': 'null',
|
||||
},
|
||||
],
|
||||
targets=[
|
||||
{
|
||||
'expr': '(sum(node_filesystem_size{device!='
|
||||
'\"rootfs\"}) - sum(node_filesystem_free{'
|
||||
'device!=\"rootfs\"})) / sum(node_filesystem_size'
|
||||
'{device!=\"rootfs\"})',
|
||||
'intervalFactor': 2,
|
||||
'refId': 'A',
|
||||
'step': 60,
|
||||
'target': '',
|
||||
},
|
||||
],
|
||||
valueMaps=[
|
||||
{
|
||||
'op': '=',
|
||||
'text': 'N/A',
|
||||
'value': 'null',
|
||||
},
|
||||
],
|
||||
),
|
||||
]
|
||||
),
|
||||
Row(
|
||||
height=250, title='New Row', showTitle=False,
|
||||
titleSize='h6', panels=[
|
||||
Graph(
|
||||
title='Network Received',
|
||||
dataSource='${DS_PROMETHEUS}',
|
||||
id=8,
|
||||
dashLength=10,
|
||||
dashes=False,
|
||||
isNew=False,
|
||||
spaceLength=10,
|
||||
span=6,
|
||||
tooltip=Tooltip(msResolution=False),
|
||||
seriesOverrides=[
|
||||
{
|
||||
'alias': 'transmitted',
|
||||
'yaxis': 2,
|
||||
},
|
||||
],
|
||||
yAxes=YAxes(
|
||||
YAxis(format='bytes', min=None),
|
||||
YAxis(format='bytes', min=None),
|
||||
),
|
||||
targets=[
|
||||
{
|
||||
'expr': 'sum(rate(node_network_receive_bytes'
|
||||
'{device!~\"lo\"}[5m]))',
|
||||
'hide': False,
|
||||
'intervalFactor': 2,
|
||||
'legendFormat': '',
|
||||
'refId': 'A',
|
||||
'step': 10,
|
||||
'target': '',
|
||||
},
|
||||
],
|
||||
),
|
||||
Graph(
|
||||
title='Network Transmitted',
|
||||
dataSource='${DS_PROMETHEUS}',
|
||||
id=10,
|
||||
dashLength=10,
|
||||
dashes=False,
|
||||
isNew=False,
|
||||
spaceLength=10,
|
||||
span=6,
|
||||
tooltip=Tooltip(msResolution=False),
|
||||
seriesOverrides=[
|
||||
{
|
||||
'alias': 'transmitted',
|
||||
'yaxis': 2,
|
||||
},
|
||||
],
|
||||
yAxes=YAxes(
|
||||
YAxis(format='bytes', min=None),
|
||||
YAxis(format='bytes', min=None),
|
||||
),
|
||||
targets=[
|
||||
{
|
||||
'expr': 'sum(rate(node_network_transmit_bytes'
|
||||
'{device!~\"lo\"}[5m]))',
|
||||
'hide': False,
|
||||
'intervalFactor': 2,
|
||||
'legendFormat': '',
|
||||
'refId': 'B',
|
||||
'step': 10,
|
||||
'target': '',
|
||||
},
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
height=276, title='New Row', showTitle=False,
|
||||
titleSize='h6',
|
||||
panels=[
|
||||
Graph(
|
||||
title='Cluster Pod Utilization',
|
||||
dataSource='${DS_PROMETHEUS}',
|
||||
id=11,
|
||||
span=9,
|
||||
dashes=False,
|
||||
spaceLength=11,
|
||||
tooltip=Tooltip(
|
||||
msResolution=False,
|
||||
valueType='individual',
|
||||
),
|
||||
yAxes=YAxes(
|
||||
YAxis(format='short', min=None),
|
||||
YAxis(format='short', min=None),
|
||||
),
|
||||
targets=[
|
||||
{
|
||||
'expr': 'sum(kube_pod_info)',
|
||||
'format': 'time_series',
|
||||
'intervalFactor': 2,
|
||||
'legendFormat': 'Current number of Pods',
|
||||
'refId': 'A',
|
||||
'step': 10,
|
||||
},
|
||||
{
|
||||
'expr': 'sum(kube_node_status_capacity_pods)',
|
||||
'format': 'time_series',
|
||||
'intervalFactor': 2,
|
||||
'legendFormat': 'Maximum capacity of pods',
|
||||
'refId': 'B',
|
||||
'step': 10,
|
||||
}
|
||||
],
|
||||
),
|
||||
SingleStat(
|
||||
title='Pod Utilization',
|
||||
dataSource='${DS_PROMETHEUS}',
|
||||
id=7,
|
||||
span=3,
|
||||
format='percent',
|
||||
rangeMaps=[
|
||||
{
|
||||
'from': 'null',
|
||||
'text': 'N/A',
|
||||
'to': 'null',
|
||||
},
|
||||
],
|
||||
gauge=Gauge(
|
||||
show=True,
|
||||
),
|
||||
thresholds='80, 90',
|
||||
valueName='current',
|
||||
targets=[
|
||||
{
|
||||
'expr': '100 - (sum(kube_node_status_capacity_'
|
||||
'pods) - sum(kube_pod_info)) / sum(kube_node_'
|
||||
'status_capacity_pods) * 100',
|
||||
'format': 'time_series',
|
||||
'intervalFactor': 2,
|
||||
'legendFormat': '',
|
||||
'refId': 'A',
|
||||
'step': 60,
|
||||
'target': '',
|
||||
},
|
||||
],
|
||||
valueMaps=[
|
||||
{
|
||||
'op': '=',
|
||||
'text': 'N/A',
|
||||
'value': 'null',
|
||||
},
|
||||
],
|
||||
),
|
||||
]
|
||||
),
|
||||
],
|
||||
)
|
||||
Reference in New Issue
Block a user