diff --git a/grafana-dashboards/Makefile b/grafana-dashboards/Makefile index 736d811..e297ec4 100644 --- a/grafana-dashboards/Makefile +++ b/grafana-dashboards/Makefile @@ -1,21 +1,22 @@ # Generate json dashboards TARGETS= \ + grafanalib.cpu.temperatures.json \ grafanalib.cpu.usage.json \ grafanalib.disk.iops.json \ grafanalib.disk.latency.json \ grafanalib.disk.throughput.json \ grafanalib.filesystem.sizes.json \ grafanalib.loadavg.json \ grafanalib.memory.usage.json \ grafanalib.network.traffic.json \ grafanalib.swap.json \ grafanalib.uptime.json default: $(TARGETS) %.json: %.py generate-dashboard -o $@ $< clean: rm $(TARGETS) diff --git a/grafana-dashboards/README.txt b/grafana-dashboards/README.txt index 1ea3fd4..47764f7 100644 --- a/grafana-dashboards/README.txt +++ b/grafana-dashboards/README.txt @@ -1,25 +1,25 @@ -Task: Grafana dashboards -======================== +Grafana dashboards +================== -Goal: replace munin graphs +These are meant to replace traditional Munin graphs 1. Grafanalib installation -------------------------- pip3 install --user grafanalib export PATH=$PATH:~/.local/bin 2. Define grafana graph programmaticaly --------------------------------------- Grafanalib invocation: generate-dashboard -o frontend.json frontend.dashboard.py 3. Import dashboard into Grafana -------------------------------- Cross on top of the left panel => "Import" diff --git a/grafana-dashboards/grafanalib.cpu.temperatures.py b/grafana-dashboards/grafanalib.cpu.temperatures.py new file mode 100644 index 0000000..a8a4957 --- /dev/null +++ b/grafana-dashboards/grafanalib.cpu.temperatures.py @@ -0,0 +1,62 @@ +from grafanalib.core import * + +def cpu_temperature_graph(target, node=0, time_from=None): + if time_from is not None: + timeFrom = "%s" % (time_from,) + else: + timeFrom = None + return Graph( + title='CPU node %s temperature' % (node,), + dataSource="Prometheus (Pergamon)", + timeFrom=timeFrom, + targets=[ + Target( + expr='node_hwmon_temp_celsius{chip="platform_coretemp_%s",sensor="temp1",instance="%s"}' % (node, target), + legendFormat="CPU temperature", + refId='A', + ), + ], + yAxes=[ + YAxis(format=SHORT_FORMAT), + YAxis(format=SHORT_FORMAT), + ], + ) + +dashboard = Dashboard( + title="CPU temperatures auto-generated", + templating=Templating(list=[ + Template( + name="host", + label="", + query='node_uname_info{instance="$target"}', + regex='/nodename="([^"]*)"/', + dataSource='Prometheus (Pergamon)', + ), + Template( + name="target", + label="", + query='node_hwmon_temp_celsius', + regex='/instance="([^"]*)"/', + dataSource='Prometheus (Pergamon)', + ), + Template( + name="cpu_node", + label="", + query='node_hwmon_temp_celsius{instance="$target"}', + regex='/chip="platform_coretemp_([0-9]*)"/', + dataSource='Prometheus (Pergamon)', + includeAll=True, + default="All", + hide = 2, + ), + ]), + rows=[ + Row( + title = 'CPU node $cpu_node', + panels=[ + cpu_temperature_graph('$target', '$cpu_node'), + cpu_temperature_graph('$target', '$cpu_node', "1y"), + ], + repeat = 'cpu_node', + ), + ],).auto_panel_ids()