diff --git a/grafana-dashboards/Makefile b/grafana-dashboards/Makefile index baeb102..b1a87a2 100644 --- a/grafana-dashboards/Makefile +++ b/grafana-dashboards/Makefile @@ -1,14 +1,15 @@ # Generate json dashboards TARGETS= pergamon.filesystem.sizes.json pergamon.cpu.usage.json \ pergamon.uptime.json pergamon.loadavg.json \ pergamon.memory.usage.json pergamon.swap.json \ - pergamon.network.traffic.json + pergamon.network.traffic.json pergamon.disk.iops.json \ + pergamon.disk.throughput.json grafanalib.disk.latency.json default: $(TARGETS) %.json: %.py generate-dashboard -o $@ $< clean: rm $(TARGETS) diff --git a/grafana-dashboards/grafanalib.disk.latency.py b/grafana-dashboards/grafanalib.disk.latency.py new file mode 100644 index 0000000..c293ca5 --- /dev/null +++ b/grafana-dashboards/grafanalib.disk.latency.py @@ -0,0 +1,68 @@ +from grafanalib.core import * + +def device_latency_graph(target, device, time_from=None): + if time_from is not None: + timeFrom = "%s" % (time_from,) + else: + timeFrom = None + return Graph( + title='Average latency for %s' % (device,), + dataSource="Prometheus", + timeFrom=timeFrom, + targets=[ + Target( + expr='rate(node_disk_io_time_weighted_seconds_total{instance="%s",device="%s"}[5m])' % (target, device), + legendFormat="io_time_weighted_seconds rate", + refId='A', + ), + Target( + expr='xrate(node_disk_io_time_weighted_seconds_total{instance="%s",device="%s"}[5m])' % (target, device), + legendFormat="io_time_weighted_seconds xrate", + refId='B', + ), + ], + yAxes=[ + YAxis(format='ms'), + YAxis(format=SHORT_FORMAT), + ], + legend=Legend(max=True, min=True, avg=True, current=True), + ) + +dashboard = Dashboard( + title="Diskstat latency auto-generated", + templating=Templating(list=[ + Template( + name="host", + label="", + query='node_uname_info{instance="$target"}', + regex='/nodename="([^"]*)"/', + dataSource='Prometheus', + ), + Template( + name="target", + label="", + query='node_disk_io_now', + regex='/instance="([^"]*)"/', + dataSource='Prometheus', + ), + Template( + name="device", + label="", + query='node_disk_io_now{instance="$target"}', + regex='/device="([sd|vd|dm|md][a-z0-9-]*)/', + dataSource='Prometheus', + includeAll=True, + default="All", + hide=2, + ), + ]), + rows=[ + Row( + title = '$device device', + panels=[ + device_latency_graph('$target', '$device'), + device_latency_graph('$target', '$device', "1y"), + ], + repeat = 'device', + ), + ],).auto_panel_ids() diff --git a/grafana-dashboards/pergamon.disk.iops.py b/grafana-dashboards/pergamon.disk.iops.py new file mode 100644 index 0000000..26715cd --- /dev/null +++ b/grafana-dashboards/pergamon.disk.iops.py @@ -0,0 +1,54 @@ +from grafanalib.core import * + +def device_iops_graph(device, time_from=None): + if time_from is not None: + timeFrom = "%s" % (time_from,) + else: + timeFrom = None + return Graph( + title='IOs for %s' % (device,), + dataSource="Prometheus", + timeFrom=timeFrom, + targets=[ + Target( + expr='rate(node_disk_reads_completed_total{instance="192.168.100.29:9100",device="%s"}[5m])' % (device), + legendFormat="reads per second", + refId='A', + ), + Target( + expr='rate(node_disk_writes_completed_total{instance="192.168.100.29:9100",device="%s"}[5m])' % (device), + legendFormat="writes per second", + refId='B', + ), + ], + yAxes=[ + YAxis(format=SHORT_FORMAT), + YAxis(format=SHORT_FORMAT), + ], + legend=Legend(max=True, min=True, avg=True, current=True), + ) + +dashboard = Dashboard( + title="Pergamon diskstat iops auto-generated", + templating=Templating(list=[ + Template( + name="device", + label="", + query='node_disk_io_now{instance="192.168.100.29:9100"}', + regex='/device="([s|v]d[a-z]*)/', + dataSource='Prometheus', + includeAll=True, + default="All", + hide = 2, + ), + ]), + rows=[ + Row( + title = 'device', + panels=[ + device_iops_graph('$device'), + device_iops_graph('$device', "1y"), + ], + repeat = 'device', + ), + ],).auto_panel_ids() diff --git a/grafana-dashboards/pergamon.disk.throughput.py b/grafana-dashboards/pergamon.disk.throughput.py new file mode 100644 index 0000000..b3b5c58 --- /dev/null +++ b/grafana-dashboards/pergamon.disk.throughput.py @@ -0,0 +1,55 @@ +from grafanalib.core import * + +def device_tput_graph(device, time_from=None): + if time_from is not None: + timeFrom = "%s" % (time_from,) + else: + timeFrom = None + return Graph( + title='Throughput for %s' % (device,), + dataSource="Prometheus", + timeFrom=timeFrom, + targets=[ + Target( + expr='irate(node_disk_read_bytes_total{instance="192.168.100.29:9100",device="%s"}[5m])' % (device), +# expr='node_disk_read_bytes_total{instance="192.168.100.29:9100",device="%s"}' % (device), + legendFormat="bytes read per second", + refId='A', + ), + Target( + expr='rate(node_disk_written_bytes_total{instance="192.168.100.29:9100",device="%s"}[23m])' % (device), + legendFormat="bytes written per second", + refId='B', + ), + ], + yAxes=[ + YAxis(format='bytes'), + YAxis(format=SHORT_FORMAT), + ], + legend=Legend(max=True, min=True, avg=True, current=True), + ) + +dashboard = Dashboard( + title="Pergamon diskstat throughput auto-generated", + templating=Templating(list=[ + Template( + name="device", + label="", + query='node_disk_io_now{instance="192.168.100.29:9100"}', + regex='/device="([s|v]d[a-z]*)/', + dataSource='Prometheus', + includeAll=True, + default="All", + hide = 2, + ), + ]), + rows=[ + Row( + title = 'device', + panels=[ + device_tput_graph('$device'), + device_tput_graph('$device', "1y"), + ], + repeat = 'device', + ), + ],).auto_panel_ids()