From 8300f48541bdddcadbc74e2ba7ceaeec272c120c Mon Sep 17 00:00:00 2001 From: Franziska Kunsmann Date: Mon, 18 Oct 2021 19:42:27 +0200 Subject: [PATCH] add bundle:ipmitool, add grafana dashboard row --- bundles/grafana/dashboard-rows/ipmitool.py | 228 +++++++++++++++++++++ bundles/grafana/items.py | 5 +- bundles/ipmitool/metadata.py | 27 +++ nodes/rx300.py | 3 +- 4 files changed, 260 insertions(+), 3 deletions(-) create mode 100644 bundles/grafana/dashboard-rows/ipmitool.py create mode 100644 bundles/ipmitool/metadata.py diff --git a/bundles/grafana/dashboard-rows/ipmitool.py b/bundles/grafana/dashboard-rows/ipmitool.py new file mode 100644 index 0000000..7aad924 --- /dev/null +++ b/bundles/grafana/dashboard-rows/ipmitool.py @@ -0,0 +1,228 @@ +def dashboard_row_ipmitool(panel_id, node): + return { + 'title': 'ipmitool', + 'collapse': False, + 'editable': False, + 'height': '250px', + 'panels': [ + { + 'aliasColors': {}, + 'bars': False, + 'dashLength': 10, + 'dashes': False, + 'datasource': None, + 'fieldConfig': { + 'defaults': { + 'displayName': '${__field.labels.name}' + }, + 'overrides': [] + }, + 'fill': 0, + 'fillGradient': 0, + 'hiddenSeries': False, + 'id': next(panel_id), + 'legend': { + 'alignAsTable': False, + 'avg': False, + 'current': False, + 'hideEmpty': True, + 'hideZero': True, + 'max': False, + 'min': False, + 'rightSide': False, + 'show': True, + 'total': False, + 'values': False + }, + 'lines': True, + 'linewidth': 1, + 'NonePointMode': 'None', + 'options': { + 'alertThreshold': True + }, + 'percentage': False, + 'pluginVersion': '7.5.5', + 'pointradius': 2, + 'points': False, + 'renderer': 'flot', + 'seriesOverrides': [], + 'spaceLength': 10, + 'span': 8, + 'stack': False, + 'steppedLine': False, + 'targets': [ + { + 'groupBy': [ + {'type': 'time', 'params': ['$__interval']}, + {'type': 'fill', 'params': ['linear']}, + ], + 'orderByTime': "ASC", + 'policy': "default", + 'query': f"""from(bucket: "telegraf") + |> range(start: v.timeRangeStart, stop: v.timeRangeStop) + |> filter(fn: (r) => + r["_measurement"] == "ipmi_sensor" and + r["unit"] == "degrees_c" and + r["host"] == "{node.name}" + ) + |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) + |> yield(name: "cpu")""", + 'resultFormat': 'time_series', + 'select': [[ + {'type': 'field', 'params': ['value']}, + {'type': 'mean', 'params': []}, + ]], + "tags": [] + }, + ], + 'thresholds': [], + 'timeRegions': [], + 'title': 'temperatures', + 'tooltip': { + 'shared': True, + 'sort': 0, + 'value_type': 'individual' + }, + 'type': 'graph', + 'xaxis': { + 'buckets': None, + 'mode': 'time', + 'name': None, + 'show': True, + 'values': [] + }, + 'yaxes': [ + { + 'format': 'celsius', + 'label': None, + 'logBase': 1, + 'max': None, + 'min': 0, + 'show': True, + }, + { + 'format': 'short', + 'label': None, + 'logBase': 1, + 'max': None, + 'min': None, + 'show': False, + } + ], + 'yaxis': { + 'align': False, + 'alignLevel': None + } + }, + { + 'aliasColors': {}, + 'bars': False, + 'dashLength': 10, + 'dashes': False, + 'datasource': None, + 'fieldConfig': { + 'defaults': { + 'displayName': '${__field.labels.name}' + }, + 'overrides': [] + }, + 'fill': 0, + 'fillGradient': 0, + 'hiddenSeries': False, + 'id': next(panel_id), + 'legend': { + 'alignAsTable': False, + 'avg': False, + 'current': False, + 'hideEmpty': True, + 'hideZero': True, + 'max': False, + 'min': False, + 'rightSide': False, + 'show': True, + 'total': False, + 'values': False + }, + 'lines': True, + 'linewidth': 1, + 'NonePointMode': 'None', + 'options': { + 'alertThreshold': True + }, + 'percentage': False, + 'pluginVersion': '7.5.5', + 'pointradius': 2, + 'points': False, + 'renderer': 'flot', + 'seriesOverrides': [], + 'spaceLength': 10, + 'span': 4, + 'stack': False, + 'steppedLine': False, + 'targets': [ + { + 'groupBy': [ + {'type': 'time', 'params': ['$__interval']}, + {'type': 'fill', 'params': ['linear']}, + ], + 'orderByTime': "ASC", + 'policy': "default", + 'query': f"""from(bucket: "telegraf") + |> range(start: v.timeRangeStart, stop: v.timeRangeStop) + |> filter(fn: (r) => + r["_measurement"] == "ipmi_sensor" and + r["unit"] == "rpm" and + r["host"] == "{node.name}" + ) + |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) + |> yield(name: "fan")""", + 'resultFormat': 'time_series', + 'select': [[ + {'type': 'field', 'params': ['value']}, + {'type': 'mean', 'params': []}, + ]], + "tags": [] + }, + ], + 'thresholds': [], + 'timeRegions': [], + 'title': 'fans', + 'tooltip': { + 'shared': True, + 'sort': 0, + 'value_type': 'individual' + }, + 'type': 'graph', + 'xaxis': { + 'buckets': None, + 'mode': 'time', + 'name': None, + 'show': True, + 'values': [] + }, + 'yaxes': [ + { + 'format': 'rotrpm', + 'label': None, + 'logBase': 1, + 'max': None, + 'min': 0, + 'show': True, + 'decimals': 0, + }, + { + 'format': 'short', + 'label': None, + 'logBase': 1, + 'max': None, + 'min': None, + 'show': False, + } + ], + 'yaxis': { + 'align': False, + 'alignLevel': None + } + }, + ], + } diff --git a/bundles/grafana/items.py b/bundles/grafana/items.py index 5ddda20..41a8fac 100644 --- a/bundles/grafana/items.py +++ b/bundles/grafana/items.py @@ -97,7 +97,10 @@ for rnode in repo.nodes: ], } - if rnode.has_bundle('lm-sensors'): + if rnode.has_bundle('ipmitool'): + dashboard['rows'].append(dashboard_row_ipmitool(panel_id, rnode)) + dashboard['tags'].add('ipmitool') + elif rnode.has_bundle('lm-sensors'): dashboard['rows'].append(dashboard_row_sensors(panel_id, rnode)) dashboard['tags'].add('lm-sensors') diff --git a/bundles/ipmitool/metadata.py b/bundles/ipmitool/metadata.py new file mode 100644 index 0000000..a340a7a --- /dev/null +++ b/bundles/ipmitool/metadata.py @@ -0,0 +1,27 @@ +defaults = { + 'apt': { + 'packages': { + 'ipmitool': {}, + }, + }, + 'telegraf': { + 'input_plugins': { + 'builtin': { + 'ipmi_sensor': [{ + 'interval': '30s', + 'metric_version': 2, + 'timeout': '20s', + 'use_sudo': True, + }], + }, + }, + 'sudo_commands': { + '/usr/bin/ipmitool *', + }, + }, + 'pacman': { + 'packages': { + 'ipmitool': {}, + }, + }, +} diff --git a/nodes/rx300.py b/nodes/rx300.py index ef0b0cd..4646487 100644 --- a/nodes/rx300.py +++ b/nodes/rx300.py @@ -11,6 +11,7 @@ nodes['rx300'] = { 'dovecot', 'element-web', 'gitea', + 'ipmitool', 'jenkins-ci', 'lm-sensors', 'matrix-dimension', @@ -52,8 +53,6 @@ nodes['rx300'] = { }, 'apt': { 'packages': { - 'ipmitool': {}, - # for franzi.business deployment 'ruby': {}, 'ruby-dev': {},