From 5cb0b1444ddbc6cc1838fbc7cc9f76f9ba5b3158 Mon Sep 17 00:00:00 2001 From: Michael Wyraz Date: Sun, 14 Nov 2021 13:43:45 +0100 Subject: [PATCH] victoriametrics + grafana --- mapserver/README.md | 12 + mapserver/docker-compose.yaml | 30 ++- mapserver/envfile.example | 10 + .../provisioning/dashboards/dashboards.yaml | 12 + .../provisioning/dashboards/nodes_public.json | 215 ++++++++++++++++++ .../datasources/victoriametrics.yaml | 12 + mapserver/yanic/entrypoint.sh | 6 +- 7 files changed, 295 insertions(+), 2 deletions(-) create mode 100644 mapserver/grafana/provisioning/dashboards/dashboards.yaml create mode 100644 mapserver/grafana/provisioning/dashboards/nodes_public.json create mode 100644 mapserver/grafana/provisioning/datasources/victoriametrics.yaml diff --git a/mapserver/README.md b/mapserver/README.md index 71c9e44..e228473 100644 --- a/mapserver/README.md +++ b/mapserver/README.md @@ -31,3 +31,15 @@ Umgebungsvariablen: Der Meshviewer-Container stellt die Meshviewer-Anwendung aus https://git.dezentrale.cloud/Freifunk-Leipzig/meshviewer/src/branch/ffle sowie die zugehörigen Meshviewer-Daten bereit. +### victoriametrics + +VictoriaMetrics ist eine Prometheus-kompatible, hoch performante Zeitreihen-Datenbank, welche das InfluxDB Protokoll unterstützt. Sie kommt zur Speicherung der Knoten-Metriken zum Einsatz. + +### grafana + +Grafana wird zur Visualisierung der Knoten-Metriken verwendet. Dabei werden die Datenquelle und die Dashboards automatisch beim Start provisioniert. + +Umgebungsvariablen: + +* GF_SECURITY_ADMIN_USER: initialier Admin-Benutzer für Grafana +* GF_SECURITY_ADMIN_PASSWORD: initiales Admin-Passwort (sollte beim ersten Login unbedingt geändert werden!) diff --git a/mapserver/docker-compose.yaml b/mapserver/docker-compose.yaml index c170436..2acad89 100644 --- a/mapserver/docker-compose.yaml +++ b/mapserver/docker-compose.yaml @@ -10,6 +10,7 @@ services: net.ipv6.conf.all.disable_ipv6: 0 # enable ipv6 withn container net.ipv6.conf.all.forwarding: 1 stop_grace_period: 0s + yanic: build: ./yanic network_mode: "service:fastd" @@ -23,4 +24,31 @@ services: volumes: - ./data/yanic/meshviewer:/usr/share/nginx/html/data - \ No newline at end of file + victoriametrics: + image: victoriametrics/victoria-metrics:v1.69.0 + command: | + -retentionPeriod=24 + -selfScrapeInterval=30s + volumes: + - ./data/victoriametrics:/victoria-metrics-data + + grafana: + image: grafana/grafana:8.2.3 + volumes: + - ./data/grafana:/var/lib/grafana + # https://blog.56k.cloud/provisioning-grafana-datasources-and-dashboards-automagically/ + - ./grafana/provisioning/datasources:/etc/grafana/provisioning/datasources + - ./grafana/provisioning/dashboards:/etc/grafana/provisioning/dashboards + env_file: envfile + environment: + GF_LOG_MODE: console + GF_AUTH_ANONYMOUS_ENABLED: "true" + ports: + - 81:3000 + user: root + entrypoint: + - /bin/sh + - -c + - | + chown grafana /var/lib/grafana + exec su grafana -s /bin/sh -c /run.sh diff --git a/mapserver/envfile.example b/mapserver/envfile.example index 5d01c76..33b86b1 100644 --- a/mapserver/envfile.example +++ b/mapserver/envfile.example @@ -18,3 +18,13 @@ FASTD_PEER1_REMOTE="gluon3.leipzig.freifunk.net" port 10061 FASTD_PEER1_KEY=1111111111111111111111111111111111111111111111111111111111111111 IPV6_PREFIX=fdef:ffc0:7030::/64 + + +# Grafana settings + +# Initial user for grafana +GF_SECURITY_ADMIN_USER=admin + +# Initial password for grafana (change at first login!) +GF_SECURITY_ADMIN_PASSWORD=admin + diff --git a/mapserver/grafana/provisioning/dashboards/dashboards.yaml b/mapserver/grafana/provisioning/dashboards/dashboards.yaml new file mode 100644 index 0000000..ba77956 --- /dev/null +++ b/mapserver/grafana/provisioning/dashboards/dashboards.yaml @@ -0,0 +1,12 @@ +apiVersion: 1 + +providers: + # https://grafana.com/docs/grafana/latest/administration/provisioning/#dashboards + - name: 'dashboard_provisioner' + # Org id. Default to 1 + orgId: 1 + updateIntervalSeconds: 10 + allowUiUpdates: false + options: + path: /etc/grafana/provisioning/dashboards + foldersFromFilesStructure: true diff --git a/mapserver/grafana/provisioning/dashboards/nodes_public.json b/mapserver/grafana/provisioning/dashboards/nodes_public.json new file mode 100644 index 0000000..db5b4eb --- /dev/null +++ b/mapserver/grafana/provisioning/dashboards/nodes_public.json @@ -0,0 +1,215 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "gnetId": null, + "graphTooltip": 0, + "id": 1, + "iteration": 1636893346139, + "links": [], + "liveNow": false, + "panels": [ + { + "datasource": null, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 4, + "interval": null, + "maxDataPoints": 1, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "name" + }, + "pluginVersion": "8.2.3", + "targets": [ + { + "exemplar": false, + "expr": "node_clients.total{nodeid=\"$node_id\"}", + "format": "time_series", + "instant": true, + "interval": "", + "legendFormat": "{{hostname}}", + "refId": "A" + } + ], + "timeFrom": "1y", + "timeShift": null, + "title": "hostname", + "type": "stat" + }, + { + "datasource": null, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 3 + }, + "id": 2, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "targets": [ + { + "exemplar": true, + "expr": "node_clients.total{nodeid=\"$node_id\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Connected clients", + "type": "timeseries" + } + ], + "schemaVersion": 31, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "allValue": null, + "datasource": null, + "definition": "label_values(nodeid)", + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "node_id", + "options": [], + "query": { + "query": "label_values(nodeid)", + "refId": "StandardVariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + } + ] + }, + "time": { + "from": "now-6h", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Node (public)", + "uid": "KoKOqJc7k", + "version": 3 + } \ No newline at end of file diff --git a/mapserver/grafana/provisioning/datasources/victoriametrics.yaml b/mapserver/grafana/provisioning/datasources/victoriametrics.yaml new file mode 100644 index 0000000..f0683d2 --- /dev/null +++ b/mapserver/grafana/provisioning/datasources/victoriametrics.yaml @@ -0,0 +1,12 @@ +# config file version +apiVersion: 1 + +datasources: + - name: Victoriametrics + type: prometheus + access: proxy + uid: victoriametrics + url: http://victoriametrics:8428 + isDefault: true + editable: false + version: 1 diff --git a/mapserver/yanic/entrypoint.sh b/mapserver/yanic/entrypoint.sh index 3f4190d..8dad328 100755 --- a/mapserver/yanic/entrypoint.sh +++ b/mapserver/yanic/entrypoint.sh @@ -56,7 +56,11 @@ delete_after = "60d" delete_interval = "1h" [[database.connection.influxdb]] -enable = false +enable = true +address = "http://victoriametrics:8428" +database = "nodes" +username = "" +password = "" [[database.connection.graphite]] enable = false