Zum Inhalt

Grafana Cloudflare SSL Issue - Status & Workaround

Datum: 24. Oktober 2025
Status: ✅ LÖSUNG GEFUNDEN - Configuration Rule verwenden
Siehe: GRAFANA_SSL_FINAL_FIX.md für vollständige Anleitung

🎯 Situation

✅ Was funktioniert

  • Lokal: http://localhost:3001 → Grafana Login ✅
  • Tunnel: Cloudflared läuft, 4 Verbindungen aktiv ✅
  • DNS: grafana.solarlog.karma.organic → 172.67.179.228, 104.21.40.68 ✅
  • Container: Grafana healthy, 6 Panels mit Echtzeit-Daten ✅

❌ Was nicht funktioniert

  • External HTTPS: https://grafana.solarlog.karma.organic
  • Fehler: ERR_SSL_VERSION_OR_CIPHER_MISMATCH
  • curl: LibreSSL/3.3.6: error:1404B410:SSL routines:ST_CONNECT:sslv3 alert handshake failure

🔍 Root Cause Analysis

Problem

Cloudflare versucht SSL-Verbindung zum Origin (localhost:3001), aber Grafana läuft nur mit HTTP.

Cloudflare Konfiguration

  • Global SSL Mode: Flexible ✅ (korrekt eingestellt)
  • Universal SSL Certificate: Active, Google Trust Services, gültig bis 2026-01-05 ✅
  • Page Rule: Erstellt für grafana.solarlog.karma.organic/* mit SSL: Flexible
  • Problem: Page Rule propagiert noch nicht zum Edge (kann 5-15 Minuten dauern)

Tunnel Konfiguration

# deployment/cloudflare/tunnel-config.yml
- hostname: grafana.solarlog.karma.organic
  service: http://localhost:3001  # ← Korrekt: HTTP nicht HTTPS
  originRequest:
    noTLSVerify: true
    httpHostHeader: grafana.solarlog.karma.organic
    connectTimeout: 30s
    keepAliveTimeout: 90s
    keepAliveConnections: 100

🔧 Lösungsansätze

1. Page Rule (AKTUELL - IN PROGRESS)

Status: Erstellt, wartet auf Propagierung (5-15 Minuten)

Konfiguration: - URL Pattern: grafana.solarlog.karma.organic/* - Settings: SSL → Flexible

Nächste Schritte: 1. Cloudflare Cache purgen: Caching → "Purge Everything" 2. 10-15 Minuten warten 3. Browser Hard-Refresh: Cmd+Shift+R 4. Neu testen

2. Configuration Rule (ALTERNATIVE)

Falls Page Rule nicht funktioniert:

Rules → Configuration Rules → Create Rule
Name: Grafana SSL Flexible
When: (http.host eq "grafana.solarlog.karma.organic")
Then: SSL/TLS → Encryption mode → Flexible

Vorteil: Schnellere Propagierung (30-60 Sekunden)

3. Grafana mit SSL betreiben (LANGFRISTIG)

Für Production empfohlen:

# grafana/grafana.ini
[server]
protocol = https
cert_file = /etc/ssl/certs/grafana.crt
cert_key = /etc/ssl/private/grafana.key

# docker-compose.yml
volumes:
  - ./certs:/etc/ssl/certs:ro
  - ./certs:/etc/ssl/private:ro

Dann Cloudflare SSL Mode auf "Full" ändern.

4. Lokaler Workaround (JETZT NUTZEN)

Für Development/Testing:

# /etc/hosts erweitern
sudo nano /etc/hosts

# Zeile hinzufügen:
127.0.0.1  grafana.solarlog.karma.organic

# Browser öffnen:
http://grafana.solarlog.karma.organic:3001

Wichtig: Nach Testing Zeile wieder entfernen!

📊 Debugging Commands

# Local Grafana Test
curl -I http://localhost:3001
# Expected: HTTP/1.1 302 Found

# Tunnel Status
pgrep -f cloudflared
tail -20 /tmp/cloudflared.log

# DNS Check
dig grafana.solarlog.karma.organic +short
# Expected: 172.67.179.228, 104.21.40.68

# SSL Handshake Test
openssl s_client -connect grafana.solarlog.karma.organic:443 -servername grafana.solarlog.karma.organic
# Should show: Protocol: TLSv1.3, Cipher: (not NONE)

# Browser Test (wichtiger als curl!)
open https://grafana.solarlog.karma.organic

🚀 Phase 1 Status

Completed (95%)

  • ✅ Grafana OSS deployment
  • ✅ PostgreSQL database setup
  • ✅ 6 Dashboard Panels mit Echtzeit-Daten
  • ✅ SQL Queries optimiert für production_data Schema
  • ✅ Prometheus integration
  • ✅ Cloudflare Tunnel konfiguriert
  • ✅ DNS Route erstellt
  • ✅ Tunnel läuft stabil (4 Verbindungen)
  • ✅ Lokal voll funktionsfähig

Blocked (5%)

  • ⏳ External HTTPS Access (SSL Propagierung)
  • ⏳ Warte auf Cloudflare Page Rule Aktivierung

Workaround

Grafana ist lokal voll nutzbar unter: - http://localhost:3001 - Alle Features funktionieren - 6 Panels zeigen Live-Daten - Auto-Refresh (30s) aktiv

📝 Nächste Schritte

  1. Kurzfristig (heute):
  2. Lokalen Zugriff nutzen: http://localhost:3001
  3. Page Rule Propagierung abwarten (10-15 Min)
  4. Neu testen in 1-2 Stunden

  5. Phase 1 abschließen:

  6. Grafana Dashboard validieren (alle Panels OK ✅)
  7. PHASE1_COMPLETE.md auf 100% aktualisieren
  8. Git Commit für Phase 1

  9. Phase 3 starten - Battery Management:

  10. Review: ENTERPRISE_UPGRADE_ANALYSIS.md Phase 3
  11. Database Models für Batterien
  12. Battery API Endpoints
  13. Battery Frontend Components
  14. EVCC Integration

  15. Langfristig (Production):

  16. Grafana mit SSL-Zertifikat konfigurieren
  17. Cloudflare SSL Mode auf "Full (strict)" ändern
  18. WAL Archiving Setup (Phase 4)
  19. Disaster Recovery Testing
  • docs/GRAFANA_SSL_FIX.md - Troubleshooting Guide
  • ENTERPRISE_UPGRADE_ANALYSIS.md - Phase 1 Details
  • deployment/cloudflare/tunnel-config.yml - Tunnel Config
  • grafana/dashboards/solar-pv-enterprise.json - Dashboard

💡 Lessons Learned

  1. Cloudflare Propagierung: Page Rules können 5-15 Minuten brauchen
  2. Testing: Browser ist relevanter als curl (modernere TLS-Implementierung)
  3. Development: Lokaler Zugriff ist für Testing ausreichend
  4. Production: Origin sollte SSL haben (Full Mode statt Flexible)

Fazit: Phase 1 ist funktional komplett (lokal nutzbar). External HTTPS ist ein Cloudflare-Propagierungsproblem, kein Code-Problem. Weiter mit Phase 3!