From 7eff2aa76e82b43f3d01b78862cf687263f42a87 Mon Sep 17 00:00:00 2001 From: mwiegand Date: Sun, 4 Jul 2021 22:55:43 +0200 Subject: [PATCH] wip --- bundles/grafana/items.py | 14 +++++++++++--- bundles/telegraf/items.py | 2 +- bundles/telegraf/metadata.py | 2 ++ data/grafana/flux.mako | 3 +++ data/grafana/panel.py | 17 +---------------- data/grafana/rows/cpu.py | 2 ++ data/grafana/rows/disk_io.py | 2 ++ data/grafana/rows/net_io.py | 34 ++++++++++++++++++++++++++++++++++ libs/dns.py | 2 ++ 9 files changed, 58 insertions(+), 20 deletions(-) create mode 100644 data/grafana/rows/net_io.py diff --git a/bundles/grafana/items.py b/bundles/grafana/items.py index 71d0af2..dd21d2f 100644 --- a/bundles/grafana/items.py +++ b/bundles/grafana/items.py @@ -112,10 +112,17 @@ for dashboard_id, monitored_node in enumerate(monitored_nodes, start=1): if 'display_name' in panel_config: panel['fieldConfig']['defaults']['displayName'] = '${'+panel_config['display_name']+'}' - if panel_config.get('stacked', False): + if panel_config.get('stacked'): panel['fieldConfig']['defaults']['custom']['stacking']['mode'] = 'normal' - else: - panel['fieldConfig']['defaults']['custom']['stacking']['mode'] = 'none' + + if 'unit' in panel_config: + panel['fieldConfig']['defaults']['unit'] = panel_config['unit'] + + if 'min' in panel_config: + panel['fieldConfig']['defaults']['min'] = panel_config['min'] + if 'max' in panel_config: + panel['fieldConfig']['defaults']['max'] = panel_config['max'] + for query_name, query_config in panel_config['queries'].items(): panel['targets'].append({ @@ -123,6 +130,7 @@ for dashboard_id, monitored_node in enumerate(monitored_nodes, start=1): 'query': flux_template.render( bucket=bucket, host=monitored_node.name, + negative=query_config.get('negative', False), filters={ 'host': monitored_node.name, **query_config['filters'], diff --git a/bundles/telegraf/items.py b/bundles/telegraf/items.py index 6036a94..9210db8 100644 --- a/bundles/telegraf/items.py +++ b/bundles/telegraf/items.py @@ -1,7 +1,7 @@ from tomlkit import dumps files['/etc/telegraf/telegraf.conf'] = { - 'content': dumps(node.metadata.get('telegraf/config')), + 'content': dumps(node.metadata.get('telegraf/config'), sort_keys=True), 'triggers': [ 'svc_systemd:telegraf:restart', ], diff --git a/bundles/telegraf/metadata.py b/bundles/telegraf/metadata.py index 5d887ec..2d36aa0 100644 --- a/bundles/telegraf/metadata.py +++ b/bundles/telegraf/metadata.py @@ -44,12 +44,14 @@ defaults = { 'processes': [{}], 'swap': [{}], 'system': [{}], + 'net': [{}], }, }, }, 'grafana_rows': [ 'cpu', 'disk_io', + 'net_io', ], } diff --git a/data/grafana/flux.mako b/data/grafana/flux.mako index 92c2056..d8ffa5c 100644 --- a/data/grafana/flux.mako +++ b/data/grafana/flux.mako @@ -8,5 +8,8 @@ from(bucket: "${bucket}") |> derivative() % else: |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) +% endif +% if negative: + |> map(fn: (r) => ({r with _value: r._value * - 1.0})) % endif |> yield(name: "mean") diff --git a/data/grafana/panel.py b/data/grafana/panel.py index a5eea50..4c652bd 100644 --- a/data/grafana/panel.py +++ b/data/grafana/panel.py @@ -23,10 +23,9 @@ 'showPoints': 'never', 'pointSize': 5, 'stacking': { - 'mode': 'normal', + 'mode': 'none', 'group': 'A' }, -# 'axisPlacement': 'hidden', 'axisLabel': '', 'scaleDistribution': { 'type': 'linear' @@ -46,22 +45,8 @@ 'color': { 'mode': 'palette-classic', }, - 'thresholds': { - 'mode': 'percentage', - 'steps': [ - { - 'color': 'green', - 'value': None, - }, - { - 'color': 'dark-red', - 'value': 80, - }, - ], - }, 'mappings': [], 'displayName': '${__field.name}', - 'unit': 'percent', }, 'overrides': [], }, diff --git a/data/grafana/rows/cpu.py b/data/grafana/rows/cpu.py index 35ebbe8..ba3e44e 100644 --- a/data/grafana/rows/cpu.py +++ b/data/grafana/rows/cpu.py @@ -15,6 +15,8 @@ 'function': 'mean', }, }, + 'min': 0, + 'max': 100, }, 'load': { 'stacked': False, diff --git a/data/grafana/rows/disk_io.py b/data/grafana/rows/disk_io.py index ce36abf..deca33d 100644 --- a/data/grafana/rows/disk_io.py +++ b/data/grafana/rows/disk_io.py @@ -12,6 +12,7 @@ 'function': 'derivative', }, }, + 'unit': 'decbytes', 'display_name': '__field.labels.name' }, 'write': { @@ -27,6 +28,7 @@ 'function': 'derivative', }, }, + 'unit': 'decbytes', 'display_name': '__field.labels.name' }, } diff --git a/data/grafana/rows/net_io.py b/data/grafana/rows/net_io.py new file mode 100644 index 0000000..cb8fc63 --- /dev/null +++ b/data/grafana/rows/net_io.py @@ -0,0 +1,34 @@ +{ + 'in': { + 'stacked': True, + 'queries': { + 'in': { + 'filters': { + '_measurement': 'net', + '_field': [ + 'bytes_recv', + ], + }, + 'function': 'derivative', + }, + }, + 'unit': 'decbytes', + 'display_name': '__field.labels.interface' + }, + 'out': { + 'stacked': True, + 'queries': { + 'out': { + 'filters': { + '_measurement': 'net', + '_field': [ + 'bytes_sent', + ], + }, + 'function': 'derivative', + }, + }, + 'unit': 'decbytes', + 'display_name': '__field.labels.interface' + }, +} diff --git a/libs/dns.py b/libs/dns.py index f761f9f..7af9cf3 100644 --- a/libs/dns.py +++ b/libs/dns.py @@ -1,3 +1,5 @@ +from ipaddress import ip_interface + def get_a_records(metadata): return { 'A': [