Ein containerisiertes Internet-Monitoring-Tool, das die Verfügbarkeit Ihrer Internetverbindung kontinuierlich überwacht und in einer übersichtlichen Web-Oberfläche mit professionellen Diagrammen visualisiert.
# Direkt vom Docker Hub verwenden
docker run -d --name internet-monitor -p 8000:8000 syntaxsorcerer7/internet-monitor
# Oder mit lokaler Datenpersistierung
docker run -d --name internet-monitor -p 8000:8000 -v $(pwd)/data:/app syntaxsorcerer7/internet-monitor# Repository klonen
git clone <repository-url>
cd internet-check
# Mit einem Befehl starten
./build-and-run.shWeb-Interface: http://localhost:8000
- 📍 Detaillierter Verlauf: Minutengenaue Aufzeichnung aller Connectivity-Tests
- ⏰ 24-Stunden-Übersicht: Stündliche Aggregation mit Verfügbarkeitsprozenten
- 📅 30-Tage-Übersicht: Tägliche Langzeittrends für SLA-Monitoring
- 🟢 Exzellent (≥99,9%): Enterprise-Grade Verfügbarkeit
- 🟡 Gut (98,0-99,8%): Akzeptable Performance mit gelegentlichen Unterbrechungen
- 🔴 Problematisch (<98%): Häufige Ausfälle, sofortige Maßnahmen erforderlich
- 🔵 Keine Daten: Noch keine Messwerte verfügbar
- Echtzeit-Updates: Automatische Diagramm-Aktualisierung alle 60 Sekunden
- Responsive Design: Optimiert für Desktop, Tablet und Mobile
- Persistente Speicherung: SQLite-Datenbank mit automatischem Cleanup
- Container-Ready: Podman/Docker-basiert ohne komplexe Abhängigkeiten
- Hochperformant: Minimaler Ressourcenverbrauch durch Alpine Linux
Alle Einstellungen erfolgen über Umgebungsvariablen:
| Variable | Standard | Beschreibung |
|---|---|---|
CHECK_INTERVAL_SEC |
20 |
Intervall zwischen Connectivity-Tests (Sekunden) |
RETENTION_DAYS |
60 |
Aufbewahrungsdauer der Messdaten (Tage) |
TEST_URL |
https://1.1.1.1 |
Ziel-URL für Connectivity-Tests |
DB_PATH |
data.db |
Pfad zur SQLite-Datenbankdatei |
# Hochfrequentes Monitoring (alle 10 Sekunden)
podman run -d \
-p 8000:8000 \
-e CHECK_INTERVAL_SEC=10 \
-e RETENTION_DAYS=90 \
internet-monitor
# Monitoring verschiedener Ziele
podman run -d -p 8001:8000 -e TEST_URL=https://google.com --name monitor-google internet-monitor
podman run -d -p 8002:8000 -e TEST_URL=https://github.com --name monitor-github internet-monitorinternet-check/
├── monitor.py # Python-Backend (Flask-Server + Monitoring-Logic)
├── templates/
│ └── index.html # HTML-Frontend mit Chart.js Visualisierungen
├── Dockerfile # Container-Definition (Alpine Linux + Python)
├── build-and-run.sh # One-Click Start-Script (Podman/Docker)
├── auto-update.sh # Automatisches Update-Script
├── data.db # SQLite-Datenbank (wird beim ersten Start erstellt)
└── README.md # Diese Dokumentation
Das Projekt verwendet automatisches Semantic Versioning mit GitHub Actions:
- 🔄 Jeder Push zur main-Branch → Neue Patch-Version (z.B. v1.0.1)
- 🐳 Docker Images → Automatisch auf Docker Hub gepusht
- 📦 GitHub Releases → Mit Changelog und Download-Links
# Interaktives Release-Script
./release.sh
# Oder über GitHub Actions UI
# Wähle: patch (1.0.1) | minor (1.1.0) | major (2.0.0)# Neueste Version (empfohlen für Entwicklung)
docker pull syntaxsorcerer7/internet-monitor:latest
# Spezifische Version (empfohlen für Produktion)
docker pull syntaxsorcerer7/internet-monitor:1.2.3
# Major.Minor (automatische Patch-Updates)
docker pull syntaxsorcerer7/internet-monitor:1.2📖 Mehr Details: Siehe VERSIONING.md und GITHUB_ACTIONS_SETUP.md
Das Projekt ist jetzt modular strukturiert:
-
Backend (
monitor.py): Python Flask-Server mit SQLite-Integration- HTTP-Monitoring mit konfigurierbaren Intervallen
- REST-API für Datenabfrage (
/dataEndpoint) - Automatische Datenbereinigung nach konfigurierbarer Retention
- Multithreading für non-blocking Monitoring
-
Frontend (
templates/index.html): Responsive Web-Interface- Chart.js für professionelle Datenvisualisierung
- Echtzeit-Updates via AJAX alle 60 Sekunden
- Mobile-optimiertes Design
- Timezone-aware Darstellung (UTC → Ortszeit)
-
Container (
Dockerfile): Schlanke Alpine Linux-Basis- Python 3.12 mit minimalen Dependencies (Flask, Requests)
- UTC-Zeitzone für konsistente Timestamps
- Automatisches Kopieren der Quellcode-Dateien
- Multi-Platform Support (AMD64, ARM64)
-
CI/CD (
.github/workflows/): Automatisierte Container-Builds- Automatischer Build und Push zu Docker Hub bei commits
- Multi-Platform Builds (AMD64, ARM64)
- Automatische Tag-Verwaltung und Versionierung
- Docker Hub Beschreibung wird automatisch aktualisiert
CREATE TABLE status (
ts INTEGER PRIMARY KEY, -- Unix-Timestamp (Sekunden seit 1970)
up INTEGER -- 1=online, 0=offline
);GET /- Responsive Web-DashboardGET /data- JSON-API mit Roh- und Aggregationsdaten
- HTTP-Test: GET-Request an konfigurierte URL
- Timeout-Handling: 5 Sekunden maximale Wartezeit
- Bewertung: HTTP 2xx = Online | Timeout/Error = Offline
- Speicherung: Timestamp + Status in SQLite
- Retention: Automatisches Cleanup alter Daten
- 🏠 Heimnetzwerk: Überwachung der DSL/Glasfaser-Verbindung
- 🏢 Büronetzwerke: Dokumentation von Provider-Ausfällen
- 📋 SLA-Monitoring: Nachweis der Verfügbarkeit für Verträge
- 🔧 Troubleshooting: Root-Cause-Analyse bei Verbindungsproblemen
- 📈 Kapazitätsplanung: Langzeit-Trendanalyse für Upgrades
# Primäre Verbindung (Cloudflare DNS)
podman run -d --name monitor-primary -p 8000:8000 internet-monitor
# Backup-Verbindung (Google DNS)
podman run -d --name monitor-backup -p 8001:8000 \
-e TEST_URL=https://8.8.8.8 internet-monitor
# Provider-Website
podman run -d --name monitor-isp -p 8002:8000 \
-e TEST_URL=https://www.telekom.de internet-monitor# Datenbank-Backup
podman exec monitor-primary cp /app/data.db /tmp/
podman cp monitor-primary:/tmp/data.db ./backup_$(date +%Y%m%d).db
# CSV-Export für Excel-Analyse
podman exec monitor-primary sqlite3 /app/data.db \
"SELECT datetime(ts, 'unixepoch') as timestamp,
CASE up WHEN 1 THEN 'Online' ELSE 'Offline' END as status
FROM status ORDER BY ts;" \
-header -csv > connectivity_report.csv
# Statistiken abrufen
podman exec monitor-primary sqlite3 /app/data.db \
"SELECT
COUNT(*) as total_checks,
SUM(up) as successful_checks,
ROUND(SUM(up) * 100.0 / COUNT(*), 2) as uptime_percentage
FROM status WHERE ts >= strftime('%s', 'now', '-24 hours');"| Verfügbarkeit | Ausfallzeit/Jahr | Ausfallzeit/Monat | Ausfallzeit/Tag | Bewertung |
|---|---|---|---|---|
| 99,99% | 52,6 Minuten | 4,4 Minuten | 8,6 Sekunden | 🟢 Exzellent |
| 99,9% | 8,77 Stunden | 43,8 Minuten | 1,44 Minuten | 🟢 Exzellent |
| 99,5% | 43,8 Stunden | 3,65 Stunden | 7,2 Minuten | 🟡 Gut |
| 99,0% | 87,7 Stunden | 7,31 Stunden | 14,4 Minuten | 🟡 Gut |
| 98,0% | 175 Stunden | 14,6 Stunden | 28,8 Minuten | 🔴 Problematisch |
# Logs prüfen
podman logs <container-name>
# Port-Konflikte checken
netstat -tulpn | grep :8000
lsof -i :8000
# Container-Status prüfen
podman ps -a- Warten: Mindestens 1-2 Minuten nach dem Start warten
- Netzwerk: Container-Netzwerkverbindung prüfen
- URL: TEST_URL-Erreichbarkeit validieren
- Firewall: Ausgehende HTTP-Verbindungen erlauben
# Speicherverbrauch reduzieren
-e RETENTION_DAYS=7
# Höhere Frequenz für kritische Systeme
-e CHECK_INTERVAL_SEC=5
# Ressourcen-Limits setzen
podman run --memory=128m --cpus=0.5 internet-monitor# Datenbank-Größe prüfen
podman exec monitor-primary du -h /app/data.db
# Manuelle Bereinigung
podman exec monitor-primary sqlite3 /app/data.db \
"DELETE FROM status WHERE ts < strftime('%s', 'now', '-7 days');"
# Datenbank-Optimierung
podman exec monitor-primary sqlite3 /app/data.db "VACUUM;"Erstellen Sie ein GitHub Issue mit:
- Betriebssystem und Version
- Podman/Docker Version
- Container-Logs (
podman logs <container>) - Beschreibung des Problems
Wir freuen uns über Verbesserungsvorschläge! Bitte öffnen Sie ein Issue mit:
- Detaillierte Beschreibung der gewünschten Funktion
- Anwendungsfall/Nutzen
- Optionale Implementierungsideen
# Development-Setup
git clone https://github.com/SyntaxSorcerer7/internet-check.git
cd internet-check
# Lokale Entwicklung
podman build -t internet-monitor-dev .
podman run --rm -p 8000:8000 -v $(pwd):/app internet-monitor-dev
# Tests ausführen (falls vorhanden)
podman exec -it <container> python -m pytestDieses Projekt steht unter der MIT-Lizenz. Siehe LICENSE für Details.
Dank an alle Entwickler, die zu diesem Projekt beitragen!
Made with ❤️ for reliable internet monitoring