Grafana Enterprise Dashboard - Administrator Guide
🎯 Phase 1 Deployment - Complete
✅ Was wurde implementiert:
- Grafana OSS (latest) - Open Source, keine Lizenzkosten
- Prometheus (latest) - Metrics-Sammlung (90 Tage Retention)
- PostgreSQL Datasource - Direkter Zugriff auf solarlog_db
- Auto-Provisioning - Datasources & Dashboards automatisch geladen
- 6 Dashboard Panels:
- Current Total Power (Gauge)
- Today's Energy Production (Gauge)
- Power Production Last 24h (Time Series)
- Inverter Status Table
- Daily Energy Last 30 Days (Stacked Bars)
- Online Status Indicators (Stat Panels)
- Cloudflare Tunnel - Externe Erreichbarkeit via grafana.solarlog.karma.organic
- User Documentation - Vollständiges Benutzerhandbuch (GRAFANA_USER_MANUAL.md)
📁 Dateistruktur:
solarlog_20251022/
├── docker-compose.yml # Grafana + Prometheus Services
├── grafana/
│ ├── provisioning/
│ │ ├── datasources/
│ │ │ └── solarlog.yml # PostgreSQL Auto-Config
│ │ └── dashboards/
│ │ └── solarlog.yml # Dashboard Auto-Loader
│ └── dashboards/
│ └── solar-pv-enterprise.json # Haupt-Dashboard
├── prometheus/
│ └── prometheus.yml # Prometheus Scrape Config
├── deployment/
│ ├── cloudflare/
│ │ └── tunnel-config.yml # Tunnel mit Grafana-Route
│ └── scripts/
│ ├── setup-grafana-dns.sh # DNS-Setup für Grafana
│ └── restart-tunnel.sh # Tunnel-Neustart
└── docs/
├── GRAFANA_SETUP.md # Setup-Anleitung
├── GRAFANA_USER_MANUAL.md # Benutzerhandbuch
└── ENTERPRISE_UPGRADE_ANALYSIS.md # Vollständige Analyse (4 Phasen)
🚀 Deployment
Lokaler Start:
cd /Users/gm/Documents/XCITE_DEV_DOCKER/solarlog_20251022
# 1. Grafana-DB erstellen (nur einmal!)
docker compose exec postgres psql -U solarlog -d solarlog_db -c "CREATE DATABASE grafana_db;"
# 2. Grafana + Prometheus starten
docker compose up -d grafana prometheus
# 3. Status prüfen
docker compose ps grafana prometheus
docker compose logs -f grafana
# 4. Zugriff
# Local: http://localhost:3001
# Login: admin / solarlog_grafana_2024
Cloudflare Tunnel Setup:
# 1. DNS-Route hinzufügen
./deployment/scripts/setup-grafana-dns.sh
# 2. Tunnel neu starten (mit neuer Config)
./deployment/scripts/restart-tunnel.sh
# 3. Warten (1-2 Minuten DNS-Propagierung)
# 4. Testen
curl -I https://grafana.solarlog.karma.organic
# 5. Browser öffnen
open https://grafana.solarlog.karma.organic
🔧 Konfiguration
Umgebungsvariablen:
In docker-compose.yml:
environment:
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD:-solarlog_grafana_2024}
- GF_SERVER_ROOT_URL=https://grafana.solarlog.karma.organic
- GF_DATABASE_TYPE=postgres # Grafana Metadata in PostgreSQL
Passwort ändern:
# 1. .env erstellen/bearbeiten
echo "GRAFANA_ADMIN_PASSWORD=your_secure_password" >> .env
# 2. Grafana neu starten
docker compose restart grafana
Datasource-Konfiguration:
Datei: grafana/provisioning/datasources/solarlog.yml
datasources:
- name: SolarLog PostgreSQL
type: postgres
url: postgres:5432
database: solarlog_db
user: solarlog
secureJsonData:
password: 'solarlog_password'
isDefault: true
Wichtig: Password in Produktion ändern!
Dashboard-SQL-Queries:
Alle Queries nutzen production_data Tabelle:
Total Power (aktuell):
SELECT
COALESCE(SUM(pd.current_power), 0) / 1000.0 as "Total Power (kW)"
FROM production_data pd
JOIN inverters i ON pd.inverter_id = i.id
WHERE i.enabled = true
AND pd.timestamp = (
SELECT MAX(timestamp) FROM production_data WHERE inverter_id = i.id
)
Online Status:
-- Online = Daten jünger als 2 Minuten
CASE
WHEN timestamp > NOW() - INTERVAL '2 minutes' THEN 'Online'
ELSE 'Offline'
END
🛡️ Sicherheit
Zugriffskontrolle:
- Admin-Passwort ändern (siehe oben)
- Viewer-Accounts erstellen:
- Anonymous Access deaktiviert (Standard)
- Cloudflare Tunnel = automatisches SSL/TLS
Backup:
Dashboard-Export:
# In Grafana UI:
# Settings (⚙️) → JSON Model → Copy to clipboard
# Paste in: grafana/dashboards/backup-YYYYMMDD.json
Grafana-Datenbank-Backup:
Restore:
📊 Monitoring
Grafana-Logs:
# Live-Logs
docker compose logs -f grafana
# Letzte 100 Zeilen
docker compose logs --tail=100 grafana
# Fehler filtern
docker compose logs grafana | grep -i error
Prometheus-Metriken:
# Prometheus UI öffnen
open http://localhost:9090
# Queries testen:
# - up{job="solarlog-backend"} → Backend Status
# - up{job="prometheus"} → Prometheus Self-Check
Healthchecks:
# Grafana Health
curl http://localhost:3001/api/health
# Erwartete Antwort:
# {"commit":"...","database":"ok","version":"..."}
# PostgreSQL Connection
docker compose exec grafana curl -s http://localhost:3000/api/datasources/proxy/1/health
🔄 Updates
Grafana-Update:
# 1. Backup erstellen!
docker compose exec postgres pg_dump -U solarlog grafana_db > grafana_backup_$(date +%Y%m%d).sql
# 2. Dashboard JSON exportieren
# (siehe Backup-Sektion)
# 3. docker-compose.yml anpassen:
# image: grafana/grafana-oss:11.0.0 # Neue Version
# 4. Container neu erstellen
docker compose pull grafana
docker compose up -d --force-recreate grafana
# 5. Logs prüfen
docker compose logs -f grafana
# 6. Testen
open http://localhost:3001
Dashboard-Update:
# 1. JSON bearbeiten:
nano grafana/dashboards/solar-pv-enterprise.json
# 2. Grafana neu laden (holt neue JSON)
docker compose restart grafana
# 3. Browser-Cache leeren (Strg+F5)
# Alternative: UI-basiertes Update
# Dashboard → Settings → JSON Model → Paste & Save
🐛 Troubleshooting
Problem: Dashboard zeigt keine Daten
Diagnose:
# 1. Prüfe Datasource
docker compose exec grafana curl -s http://localhost:3000/api/datasources
# 2. Teste PostgreSQL-Verbindung
docker compose exec grafana curl -s http://localhost:3000/api/datasources/proxy/1/health
# 3. Prüfe Daten in DB
docker compose exec postgres psql -U solarlog -d solarlog_db -c "SELECT COUNT(*) FROM production_data WHERE timestamp > NOW() - INTERVAL '1 hour';"
Lösungen:
- Datasource neu provisionieren: docker compose restart grafana
- PostgreSQL-Password prüfen in grafana/provisioning/datasources/solarlog.yml
- Netzwerk prüfen: docker compose exec grafana ping postgres
Problem: Grafana startet nicht
Diagnose:
# Logs anschauen
docker compose logs grafana | tail -50
# Häufige Fehler:
# - "database grafana_db does not exist" → DB erstellen (siehe Deployment)
# - "permission denied" → Volumes-Permission prüfen
# - "port already in use" → Anderer Service auf Port 3001?
Lösungen:
# DB erstellen
docker compose exec postgres psql -U solarlog -d solarlog_db -c "CREATE DATABASE grafana_db;"
# Volumes zurücksetzen (ACHTUNG: Datenverlust!)
docker compose down
docker volume rm solarlog-grafana-data
docker compose up -d grafana
# Port ändern (docker-compose.yml):
# ports: "3002:3000" # Statt 3001
Problem: "Cannot connect to server"
Cloudflare Tunnel prüfen:
# Tunnel läuft?
pgrep -f cloudflared
# Tunnel-Logs
tail -f /tmp/cloudflared.log
# DNS-Auflösung
nslookup grafana.solarlog.karma.organic
# Tunnel neu starten
./deployment/scripts/restart-tunnel.sh
📈 Performance-Tuning
Query-Optimierung:
Wenn Dashboard langsam lädt:
-
Zeitbereich begrenzen:
-
Aggregation nutzen:
-
Indizes prüfen:
Prometheus-Retention anpassen:
In docker-compose.yml:
🎓 Best Practices
1. Regelmäßige Backups
# Cron-Job erstellen (täglich 3:00 Uhr)
0 3 * * * docker compose -f /path/to/docker-compose.yml exec postgres pg_dump -U solarlog grafana_db > /backups/grafana_$(date +\%Y\%m\%d).sql
2. Monitoring einrichten
- Uptime-Checks für https://grafana.solarlog.karma.organic
- Alert bei Grafana-Ausfall
- Disk-Space-Monitoring (Prometheus-Daten wachsen!)
3. Dokumentation aktualisieren
- Dashboard-Änderungen dokumentieren
- Neue Queries in Git committen
- User Manual bei Features updaten
4. Staging-Umgebung
# Kopie für Tests:
cp docker-compose.yml docker-compose.staging.yml
# Ports ändern: 3001 → 3003
# Starten: docker compose -f docker-compose.staging.yml up -d
🚀 Nächste Phasen
Phase 3: Battery Management (3-4 Tage)
- Battery-Tabelle in PostgreSQL
- Battery-API-Endpoints
- Grafana-Panels für Batteriedaten
- SOC, Lade-/Entladeleistung
Phase 4: Backup System (2-3 Tage)
- WAL-Archivierung
- Automatische Backups
- Disaster Recovery
Phase 2: NixOS Pi Image (5-7 Tage)
- Produktions-Image für Raspberry Pi 5
- LVGL Touchscreen UI
- Pre-loaded mit allen Daten
📞 Support
Internal:
- Dokumentation: /docs/
- Issues: Git-Repository
- Team: Slack #solarlog-enterprise
External (für Kunden):
- User Manual: docs/GRAFANA_USER_MANUAL.md
- Support-Mail: support@karma.organic
Version: 1.0.0 - Phase 1 Complete ✅
Deployment Date: 24. Oktober 2025
Next Review: Phase 3 Start