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': [