Files
grafana-dashboard/HomeLab/vyos-router.json
2025-10-27 19:03:20 +08:00

1966 lines
52 KiB
JSON

{
"apiVersion": "dashboard.grafana.app/v1beta1",
"kind": "Dashboard",
"metadata": {
"name": "9012547f-46a9-44d0-bbb0-a6e8d861fdd6"
},
"spec": {
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": {
"type": "grafana",
"uid": "-- Grafana --"
},
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations \u0026 Alerts",
"type": "dashboard"
}
]
},
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
"links": [],
"panels": [
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 0
},
"id": 1,
"panels": [],
"title": "System Overview",
"type": "row"
},
{
"datasource": {
"type": "prometheus",
"uid": "ff1qkncht70n4c"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"showValues": false,
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": 0
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 6,
"w": 8,
"x": 0,
"y": 1
},
"id": 2,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"pluginVersion": "12.2.1",
"targets": [
{
"expr": "100 - (avg by (instance) (rate(node_cpu_seconds_total{job=\"vyos\", mode=\"idle\", instance=~\"$instance\"}[5m])) * 100)",
"legendFormat": "{{instance}}",
"refId": "A"
}
],
"title": "CPU Usage (%)",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "ff1qkncht70n4c"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"showValues": false,
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": 0
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 6,
"w": 8,
"x": 8,
"y": 1
},
"id": 3,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"pluginVersion": "12.2.1",
"targets": [
{
"expr": "(1 - (node_memory_MemAvailable_bytes{job=\"vyos\", instance=~\"$instance\"} / node_memory_MemTotal_bytes{job=\"vyos\", instance=~\"$instance\"})) * 100",
"legendFormat": "{{instance}}",
"refId": "A"
}
],
"title": "Memory Usage (%)",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "ff1qkncht70n4c"
},
"description": "Disk usage percentage - monitor for low disk space",
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
"mappings": [],
"max": 100,
"min": 0,
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": 0
},
{
"color": "yellow",
"value": 70
},
{
"color": "orange",
"value": 85
},
{
"color": "red",
"value": 95
}
]
},
"unit": "percent"
},
"overrides": []
},
"gridPos": {
"h": 6,
"w": 4,
"x": 16,
"y": 1
},
"id": 21,
"options": {
"minVizHeight": 75,
"minVizWidth": 75,
"orientation": "auto",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"showThresholdLabels": false,
"showThresholdMarkers": true,
"sizing": "auto"
},
"pluginVersion": "12.2.1",
"targets": [
{
"expr": "(1 - (node_filesystem_avail_bytes{job=\"vyos\", instance=~\"$instance\", fstype!~\"tmpfs|fuse.lxcfs|squashfs|vfat\"} / node_filesystem_size_bytes{job=\"vyos\", instance=~\"$instance\", fstype!~\"tmpfs|fuse.lxcfs|squashfs|vfat\"})) * 100",
"legendFormat": "{{mountpoint}}",
"refId": "A"
}
],
"title": "Disk Usage (%)",
"type": "gauge"
},
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 7
},
"id": 18,
"panels": [],
"title": "System Health \u0026 Performance (High Priority)",
"type": "row"
},
{
"datasource": {
"type": "prometheus",
"uid": "ff1qkncht70n4c"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"showValues": false,
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": 0
},
{
"color": "red",
"value": 80
}
]
},
"unit": "KBs"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 24,
"x": 0,
"y": 8
},
"id": 12,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"pluginVersion": "12.2.1",
"targets": [
{
"expr": "sum by (device) (rate(node_network_receive_bytes_total{job=\"vyos\", instance=~\"$instance\", device=~\"pppoe0|wg0|wg1|eth1|eth1\\\\.20|eth1\\\\.40\"}[1m])) / 1000",
"legendFormat": "↓ {{device}}",
"refId": "A"
},
{
"expr": "sum by (device) (rate(node_network_transmit_bytes_total{job=\"vyos\", instance=~\"$instance\", device=~\"pppoe0|wg0|wg1|eth1|eth1\\\\.20|eth1\\\\.40\"}[1m])) / 1000",
"legendFormat": "↑ {{device}}",
"refId": "B"
}
],
"title": "Network Throughput (Brief)",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "ff1qkncht70n4c"
},
"description": "Connection tracking table usage - critical for router performance",
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
"mappings": [],
"max": 100,
"min": 0,
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": 0
},
{
"color": "yellow",
"value": 60
},
{
"color": "orange",
"value": 80
},
{
"color": "red",
"value": 90
}
]
},
"unit": "percent"
},
"overrides": []
},
"gridPos": {
"h": 6,
"w": 6,
"x": 0,
"y": 16
},
"id": 19,
"options": {
"minVizHeight": 75,
"minVizWidth": 75,
"orientation": "auto",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"showThresholdLabels": false,
"showThresholdMarkers": true,
"sizing": "auto"
},
"pluginVersion": "12.2.1",
"targets": [
{
"expr": "(node_nf_conntrack_entries{job=\"vyos\", instance=~\"$instance\"} / node_nf_conntrack_entries_limit{job=\"vyos\", instance=~\"$instance\"}) * 100",
"legendFormat": "{{instance}}",
"refId": "A"
}
],
"title": "Conntrack Usage (%)",
"type": "gauge"
},
{
"datasource": {
"type": "prometheus",
"uid": "ff1qkncht70n4c"
},
"description": "Connection tracking entries over time",
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "Connections",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "smooth",
"lineWidth": 2,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "never",
"showValues": false,
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": 0
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 6,
"w": 9,
"x": 6,
"y": 16
},
"id": 20,
"options": {
"legend": {
"calcs": [
"lastNotNull",
"max"
],
"displayMode": "table",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "multi",
"sort": "none"
}
},
"pluginVersion": "12.2.1",
"targets": [
{
"expr": "node_nf_conntrack_entries{job=\"vyos\", instance=~\"$instance\"}",
"legendFormat": "Current: {{instance}}",
"refId": "A"
},
{
"expr": "node_nf_conntrack_entries_limit{job=\"vyos\", instance=~\"$instance\"}",
"legendFormat": "Limit: {{instance}}",
"refId": "B"
}
],
"title": "Conntrack Entries",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "ff1qkncht70n4c"
},
"description": "System load averages over 1, 5, and 15 minutes",
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "Load",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "smooth",
"lineWidth": 2,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "never",
"showValues": false,
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": 0
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 6,
"w": 10,
"x": 0,
"y": 22
},
"id": 22,
"options": {
"legend": {
"calcs": [
"lastNotNull"
],
"displayMode": "table",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "multi",
"sort": "none"
}
},
"pluginVersion": "12.2.1",
"targets": [
{
"expr": "node_load1{job=\"vyos\", instance=~\"$instance\"}",
"legendFormat": "Load 1m",
"refId": "A"
},
{
"expr": "node_load5{job=\"vyos\", instance=~\"$instance\"}",
"legendFormat": "Load 5m",
"refId": "B"
},
{
"expr": "node_load15{job=\"vyos\", instance=~\"$instance\"}",
"legendFormat": "Load 15m",
"refId": "C"
}
],
"title": "System Load Average",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "ff1qkncht70n4c"
},
"description": "File descriptor usage - high usage can cause system issues",
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "%",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "smooth",
"lineWidth": 2,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "never",
"showValues": false,
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "line"
}
},
"mappings": [],
"max": 100,
"min": 0,
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": 0
},
{
"color": "yellow",
"value": 70
},
{
"color": "red",
"value": 90
}
]
},
"unit": "percent"
},
"overrides": []
},
"gridPos": {
"h": 6,
"w": 9,
"x": 10,
"y": 22
},
"id": 23,
"options": {
"legend": {
"calcs": [
"lastNotNull",
"max"
],
"displayMode": "table",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "multi",
"sort": "none"
}
},
"pluginVersion": "12.2.1",
"targets": [
{
"expr": "(node_filefd_allocated{job=\"vyos\", instance=~\"$instance\"} / node_filefd_maximum{job=\"vyos\", instance=~\"$instance\"}) * 100",
"legendFormat": "{{instance}}",
"refId": "A"
}
],
"title": "File Descriptors Usage (%)",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "ff1qkncht70n4c"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"showValues": false,
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": 0
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 24,
"x": 0,
"y": 28
},
"id": 6,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"pluginVersion": "12.2.1",
"targets": [
{
"expr": "sum by (device) (rate(node_network_receive_bytes_total{job=\"vyos\", instance=~\"$instance\", device!~\"lo\"}[1m]))",
"legendFormat": "↓ {{device}}",
"refId": "A"
},
{
"expr": "sum by (device) (rate(node_network_transmit_bytes_total{job=\"vyos\", instance=~\"$instance\", device!~\"lo\"}[1m]))",
"legendFormat": "↑ {{device}}",
"refId": "B"
}
],
"title": "Network Throughput (bytes/s)",
"type": "timeseries"
},
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 36
},
"id": 24,
"panels": [],
"title": "Network Quality Metrics (Medium Priority)",
"type": "row"
},
{
"datasource": {
"type": "prometheus",
"uid": "ff1qkncht70n4c"
},
"description": "Packet rate by interface",
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "Packets/s",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "smooth",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "never",
"showValues": false,
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": 0
}
]
},
"unit": "pps"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 16,
"x": 0,
"y": 37
},
"id": 25,
"options": {
"legend": {
"calcs": [
"mean",
"max"
],
"displayMode": "table",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "multi",
"sort": "desc"
}
},
"pluginVersion": "12.2.1",
"targets": [
{
"expr": "rate(node_network_receive_packets_total{job=\"vyos\", instance=~\"$instance\", device!~\"lo\"}[1m])",
"legendFormat": "↓ RX {{device}}",
"refId": "A"
},
{
"expr": "rate(node_network_transmit_packets_total{job=\"vyos\", instance=~\"$instance\", device!~\"lo\"}[1m])",
"legendFormat": "↑ TX {{device}}",
"refId": "B"
}
],
"title": "Network Packets Rate",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "ff1qkncht70n4c"
},
"description": "Interface operational status (1=up, 0=down)",
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
"mappings": [
{
"options": {
"0": {
"color": "red",
"index": 1,
"text": "DOWN"
}
},
"type": "value"
},
{
"options": {
"1": {
"color": "green",
"index": 0,
"text": "UP"
}
},
"type": "value"
}
],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "red",
"value": 0
},
{
"color": "green",
"value": 1
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 8,
"x": 16,
"y": 37
},
"id": 26,
"options": {
"colorMode": "background",
"graphMode": "none",
"justifyMode": "auto",
"orientation": "auto",
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"showPercentChange": false,
"textMode": "value_and_name",
"wideLayout": true
},
"pluginVersion": "12.2.1",
"targets": [
{
"expr": "node_network_up{job=\"vyos\", instance=~\"$instance\", device!~\"lo\"}",
"legendFormat": "{{device}}",
"refId": "A"
}
],
"title": "Interface Status",
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "ff1qkncht70n4c"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"showValues": false,
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": 0
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 24,
"x": 0,
"y": 45
},
"id": 7,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"pluginVersion": "12.2.1",
"targets": [
{
"expr": "sum by (device) (rate(node_network_receive_errs_total{job=\"vyos\", instance=~\"$instance\", device!~\"lo\"}[1m]))",
"legendFormat": "rx_err {{device}}",
"refId": "A"
},
{
"expr": "sum by (device) (rate(node_network_transmit_errs_total{job=\"vyos\", instance=~\"$instance\", device!~\"lo\"}[1m]))",
"legendFormat": "tx_err {{device}}",
"refId": "B"
},
{
"expr": "sum by (device) (rate(node_network_receive_drop_total{job=\"vyos\", instance=~\"$instance\", device!~\"lo\"}[1m]))",
"legendFormat": "rx_drop {{device}}",
"refId": "C"
},
{
"expr": "sum by (device) (rate(node_network_transmit_drop_total{job=\"vyos\", instance=~\"$instance\", device!~\"lo\"}[1m]))",
"legendFormat": "tx_drop {{device}}",
"refId": "D"
}
],
"title": "Interface Errors/Drops (per s)",
"type": "timeseries"
},
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 53
},
"id": 27,
"panels": [],
"title": "VPN Monitoring (Medium Priority)",
"type": "row"
},
{
"datasource": {
"type": "prometheus",
"uid": "ff1qkncht70n4c"
},
"description": "WireGuard VPN traffic by interface",
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 15,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "smooth",
"lineWidth": 2,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "never",
"showValues": false,
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": 0
}
]
},
"unit": "Bps"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 16,
"x": 0,
"y": 54
},
"id": 28,
"options": {
"legend": {
"calcs": [
"mean",
"max"
],
"displayMode": "table",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "multi",
"sort": "desc"
}
},
"pluginVersion": "12.2.1",
"targets": [
{
"expr": "rate(node_network_receive_bytes_total{job=\"vyos\", instance=~\"$instance\", device=~\"wg.*\"}[1m])",
"legendFormat": "↓ RX {{device}}",
"refId": "A"
},
{
"expr": "rate(node_network_transmit_bytes_total{job=\"vyos\", instance=~\"$instance\", device=~\"wg.*\"}[1m])",
"legendFormat": "↑ TX {{device}}",
"refId": "B"
}
],
"title": "WireGuard VPN Traffic",
"type": "timeseries"
},
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 62
},
"id": 13,
"panels": [],
"title": "Firewall Events (Firehol \u0026 Custom Rules)",
"type": "row"
},
{
"datasource": {
"type": "loki",
"uid": "ef1qnibjxb5z4a"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "Events/min",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"showValues": false,
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": 0
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 63
},
"id": 14,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "multi",
"sort": "desc"
}
},
"pluginVersion": "12.2.1",
"targets": [
{
"expr": "sum by (rule) (count_over_time({vyos=\"syslog\", appname=\"kernel\"} |~ \"IN=pppoe0\" | pattern `\u003c_\u003e[\u003crule\u003e]\u003c_\u003e` [1m]))",
"legendFormat": "{{rule}}",
"refId": "A"
}
],
"title": "Firewall Events by Rule (per min)",
"type": "timeseries"
},
{
"datasource": {
"type": "loki",
"uid": "ef1qnibjxb5z4a"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "Events/min",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 15,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "smooth",
"lineWidth": 2,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"showValues": false,
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": 0
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 63
},
"id": 15,
"options": {
"legend": {
"calcs": [
"last"
],
"displayMode": "table",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "multi",
"sort": "desc"
}
},
"pluginVersion": "12.2.1",
"targets": [
{
"expr": "sum by (proto) (count_over_time({vyos=\"syslog\", appname=\"kernel\"} |~ \"IN=pppoe0\" | pattern `\u003c_\u003ePROTO=\u003cproto\u003e` [1m]))",
"legendFormat": "{{proto}}",
"refId": "A"
}
],
"title": "Firewall Events by Protocol (per min)",
"type": "timeseries"
},
{
"datasource": {
"type": "loki",
"uid": "ef1qnibjxb5z4a"
},
"description": "Potential port scanning activity - IPs hitting multiple ports in short time",
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "Unique Ports Hit",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "bars",
"fillOpacity": 80,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "never",
"showValues": false,
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "line"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": 0
},
{
"color": "yellow",
"value": 10
},
{
"color": "red",
"value": 20
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 24,
"x": 0,
"y": 71
},
"id": 33,
"options": {
"legend": {
"calcs": [
"max"
],
"displayMode": "table",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "multi",
"sort": "desc"
}
},
"pluginVersion": "12.2.1",
"targets": [
{
"expr": "topk(15, count by (src_ip) (count_over_time({vyos=\"syslog\", appname=\"kernel\"} |~ \"IN=pppoe0\" | pattern `\u003c_\u003eSRC=\u003csrc_ip\u003e \u003c_\u003eDPT=\u003cdpt\u003e` [30s])))",
"legendFormat": "{{src_ip}}",
"refId": "A"
}
],
"title": "Port Scan Detection (Unique Ports per IP in 30s)",
"type": "timeseries"
},
{
"datasource": {
"type": "loki",
"uid": "ef1qnibjxb5z4a"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
"custom": {
"align": "auto",
"cellOptions": {
"type": "auto"
},
"footer": {
"reducers": []
},
"inspect": false
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": 0
},
{
"color": "yellow",
"value": 50
},
{
"color": "red",
"value": 100
}
]
}
},
"overrides": [
{
"matcher": {
"id": "byName",
"options": "Value"
},
"properties": [
{
"id": "displayName",
"value": "Count"
},
{
"id": "custom.cellOptions",
"value": {
"type": "color-background"
}
},
{
"id": "custom.width",
"value": 100
}
]
}
]
},
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 79
},
"id": 16,
"options": {
"cellHeight": "sm",
"footer": {
"fields": "",
"reducer": [
"sum"
],
"show": false
},
"showHeader": true,
"sortBy": [
{
"desc": true,
"displayName": "Count"
}
]
},
"pluginVersion": "12.2.1",
"targets": [
{
"expr": "topk(20, sum by (src_ip) (count_over_time({vyos=\"syslog\", appname=\"kernel\"} |~ \"IN=pppoe0\" | pattern `\u003c_\u003eSRC=\u003csrc_ip\u003e DST=\u003c_\u003e` [10m])))",
"instant": true,
"legendFormat": "",
"refId": "A"
}
],
"title": "Top 20 Blocked Source IPs (Last 10m)",
"transformations": [
{
"id": "labelsToFields",
"options": {
"keepLabels": [
"src_ip"
],
"mode": "columns"
}
},
{
"id": "organize",
"options": {
"excludeByName": {
"Time": true
},
"indexByName": {
"Value": 1,
"src_ip": 0
},
"renameByName": {
"Value": "Count",
"src_ip": "Source IP"
}
}
},
{
"id": "sortBy",
"options": {
"fields": {},
"sort": [
{
"desc": true,
"field": "Count"
}
]
}
}
],
"type": "table"
},
{
"datasource": {
"type": "loki",
"uid": "ef1qnibjxb5z4a"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
"custom": {
"align": "auto",
"cellOptions": {
"type": "auto"
},
"footer": {
"reducers": []
},
"inspect": false
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": 0
},
{
"color": "yellow",
"value": 20
},
{
"color": "red",
"value": 50
}
]
}
},
"overrides": [
{
"matcher": {
"id": "byName",
"options": "Value"
},
"properties": [
{
"id": "displayName",
"value": "Count"
},
{
"id": "custom.cellOptions",
"value": {
"type": "color-background"
}
},
{
"id": "custom.width",
"value": 100
}
]
}
]
},
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 79
},
"id": 17,
"options": {
"cellHeight": "sm",
"footer": {
"fields": "",
"reducer": [
"sum"
],
"show": false
},
"showHeader": true,
"sortBy": [
{
"desc": true,
"displayName": "Count"
}
]
},
"pluginVersion": "12.2.1",
"targets": [
{
"expr": "topk(20, sum by (dpt) (count_over_time({vyos=\"syslog\", appname=\"kernel\"} |~ \"IN=pppoe0\" | pattern `\u003c_\u003eDPT=\u003cdpt\u003e \u003c_\u003e` [10m])))",
"instant": true,
"legendFormat": "",
"refId": "A"
}
],
"title": "Top 20 Targeted Ports (Last 10m)",
"transformations": [
{
"id": "labelsToFields",
"options": {
"keepLabels": [
"dpt"
],
"mode": "columns"
}
},
{
"id": "organize",
"options": {
"excludeByName": {
"Time": true
},
"indexByName": {
"Value": 1,
"dpt": 0
},
"renameByName": {
"Value": "Count",
"dpt": "Port"
}
}
},
{
"id": "sortBy",
"options": {
"fields": {},
"sort": [
{
"desc": true,
"field": "Count"
}
]
}
}
],
"type": "table"
},
{
"datasource": {
"type": "loki",
"uid": "ef1qnibjxb5z4a"
},
"fieldConfig": {
"defaults": {},
"overrides": []
},
"gridPos": {
"h": 10,
"w": 24,
"x": 0,
"y": 87
},
"id": 11,
"options": {
"dedupStrategy": "none",
"enableInfiniteScrolling": false,
"enableLogDetails": true,
"prettifyLogMessage": false,
"showCommonLabels": false,
"showLabels": false,
"showTime": true,
"sortOrder": "Descending",
"wrapLogMessage": true
},
"pluginVersion": "12.2.1",
"targets": [
{
"expr": "{vyos=~\"$loki_vyos\"}",
"refId": "A"
}
],
"title": "Live Logs (filtered by $loki_vyos)",
"type": "logs"
}
],
"preload": false,
"refresh": "5s",
"schemaVersion": 42,
"tags": [
"vyos",
"prometheus",
"loki",
"network"
],
"templating": {
"list": [
{
"current": {
"text": "192.168.20.1:9100",
"value": "192.168.20.1:9100"
},
"datasource": {
"type": "prometheus",
"uid": "ff1qkncht70n4c"
},
"includeAll": false,
"name": "instance",
"options": [],
"query": "label_values(up{job=\"vyos\"}, instance)",
"refresh": 1,
"sort": 1,
"type": "query"
},
{
"current": {
"text": [
"All"
],
"value": [
"$__all"
]
},
"datasource": {
"type": "loki",
"uid": "ef1qnibjxb5z4a"
},
"includeAll": true,
"multi": true,
"name": "loki_vyos",
"options": [],
"query": "label_values(vyos)",
"refresh": 1,
"sort": 1,
"type": "query"
}
]
},
"time": {
"from": "now-15m",
"to": "now"
},
"timepicker": {},
"timezone": "browser",
"title": "VyOS Router"
}
}