3. (Opzionale) Generare un certificato SSL autofirmato
March 30, 2026 · View on GitHub
DockProbe
Dashboard leggera per il monitoraggio Docker con rilevamento anomalie e avvisi Telegram
Un container. Un comando. Visibilità completa.
English | 한국어 | 日本語 | Deutsch | Français | Español | Português | Italiano
Cos'è DockProbe?
DockProbe è una dashboard di monitoraggio Docker self-hosted che funziona come un singolo container. Raccoglie in tempo reale metriche di CPU, memoria, rete e disco da tutti i container e dalla macchina host — e visualizza tutto in un'interfaccia web pulita con tema scuro.
Il monitoraggio host con supporto GPU traccia la temperatura e l'utilizzo delle GPU NVIDIA insieme all'uso della CPU, alla memoria dell'host, alla pressione disco e alla media di carico — il tutto in grafici in tempo reale. Se esegui carichi di lavoro ML o container intensivi per GPU, DockProbe ti offre visibilità completa senza installare strumenti di monitoraggio GPU separati.
Quando qualcosa va storto, DockProbe lo rileva automaticamente. Sei regole integrate di rilevamento anomalie monitorano picchi di CPU, overflow di memoria, avvisi di temperatura, pressione disco, riavvii imprevisti e picchi di rete. Ogni avviso include azioni consigliate con comandi pronti all'uso — così sai esattamente cosa fare, non solo cosa è andato storto. Gli avvisi vengono inviati istantaneamente tramite Telegram, così puoi intervenire prima che gli utenti se ne accorgano.
Uno scanner di sicurezza integrato esegue 16 controlli automatizzati ogni 5 minuti — coprendo errori di configurazione dei container, esposizione di rete e hardening dell'host — per individuare le vulnerabilità prima che diventino incidenti.
Nessun agente da installare su ogni container, nessun database esterno, nessuna configurazione complessa. Basta montare il socket Docker, eseguire un comando, e avrai piena visibilità sul tuo ambiente Docker su https://localhost:9090. Serve accesso dall'esterno? Il supporto integrato per Cloudflare Tunnel offre HTTPS pubblico sicuro senza port-forwarding.
Avvio rapido
git clone https://github.com/deep-on/dockprobe.git && cd dockprobe && bash install.sh
Tutto qui. L'installer interattivo configura l'autenticazione, gli avvisi Telegram e HTTPS — poi apre https://localhost:9090.
Requisiti: Docker (con Compose v2), Git, OpenSSL
Eseguire da Docker Hub
Nessun git clone, nessun build — basta fare pull e avviare:
# 1. Scaricare il file Compose e il modello delle variabili d'ambiente
curl -fsSL https://raw.githubusercontent.com/deep-on/dockprobe/main/docker-compose.hub.yaml -o docker-compose.yaml
curl -fsSL https://raw.githubusercontent.com/deep-on/dockprobe/main/.env.example -o .env
# 2. Modificare .env con le proprie credenziali
vi .env
# 3. (Opzionale) Generare un certificato SSL autofirmato
mkdir -p certs && openssl req -x509 -newkey rsa:4096 -nodes \
-keyout certs/key.pem -out certs/cert.pem \
-days 825 -subj "/CN=dockprobe"
# 4. Avviare
docker compose up -d
Disponibile su Docker Hub:
deeponinc/dockprobe— Multi-arch (amd64 + arm64)
Anteprima della dashboard
Funzionalità
| Categoria | Cosa ottieni |
|---|---|
| Dashboard in tempo reale | Interfaccia web scura, aggiornamento automatico ogni 10s, tabelle ordinabili, grafici Chart.js |
| Monitoraggio container | CPU %, memoria %, I/O di rete, I/O di blocco, contatore riavvii |
| Monitoraggio host | Temperatura e utilizzo CPU/GPU, memoria, utilizzo disco, media di carico |
| Rilevamento anomalie | 6 regole con azioni consigliate — picco CPU, overflow memoria, alta temperatura, disco pieno, riavvio, picco di rete |
| Avvisi Telegram | Notifica istantanea con cooldown di 30 min per tipo di avviso |
| Sicurezza | Basic Auth, limitazione di frequenza (5 tentativi falliti = 60s di blocco), HTTPS |
| Scanner di sicurezza | 16 controlli automatizzati (container/host/rete), ciclo di scansione ogni 5 min, badge di severità |
| Gestione sessioni | Tracciamento connessioni attive, max connessioni configurabile, visualizzazione IP in tempo reale |
| Gestione password | Modifica utente/password dall'interfaccia della dashboard |
| Interfaccia impostazioni | Regolare max connessioni a runtime dalla dashboard |
| Modalità di accesso | SSL autofirmato (predefinito) o Cloudflare Tunnel (senza port forwarding) |
| Leggera | 4 pacchetti Python, singolo file HTML, SQLite con conservazione di 7 giorni |
Composizione della dashboard
| Sezione | Dettagli |
|---|---|
| Barra sessione | Utente connesso, IP, connessioni attive / limite massimo |
| Schede host | Temp CPU, temp GPU, CPU/GPU %, memoria host, disco %, media di carico |
| Tabella container | Ordinabile per CPU/memoria/rete, anomalie con codice colore |
| Grafici (5) | Tendenze CPU e memoria dei container, CPU/GPU % dell'host, temperatura e carico dell'host |
| Disco Docker | Immagini, cache di build, volumi, layer RW dei container |
| Storico avvisi | Ultime 24h con timestamp |
Regole di rilevamento anomalie
| Regola | Condizione | Azione |
|---|---|---|
| CPU container | >80% per 3 controlli consecutivi (30s) | Telegram + evidenziazione rossa |
| Memoria container | >90% del limite | Avviso immediato |
| Temperatura CPU host | >85°C | Avviso immediato |
| Disco host | >90% di utilizzo | Avviso immediato |
| Riavvio container | restart_count incrementato | Avviso immediato |
| Picco di rete | RX aumento 10x + >100MB | Avviso immediato |
Tutte le soglie sono configurabili tramite variabili d'ambiente.
Ogni anomalia include raccomandazioni attuabili con comandi specifici:
| Anomalia | Esempio di raccomandazione |
|---|---|
| Picco CPU | docker stats <name> · docker restart <name> · docker update --cpus=2 <name> |
| Overflow memoria | docker stats <name> · docker update --memory=2g <name> |
| Loop di riavvio | docker logs --tail 50 <name> · docker inspect <name> |
| Picco di rete | docker logs --tail 50 <name> · Verificare DDoS o traffico imprevisto |
| Alta temperatura | Controllare ventola/sistema di raffreddamento · sensors -u per dettagli |
| Disco pieno | docker system prune -f · docker builder prune -f · docker volume prune |
Scanner di sicurezza
DockProbe esegue 16 controlli di sicurezza automatizzati ogni 5 minuti e visualizza i risultati in una sezione dedicata della dashboard con badge di severità.
| Categoria | Controlli |
|---|---|
| Container (9) | Modalità privilegiata, esecuzione come root, capability pericolose, mount del socket Docker, mount di percorsi sensibili, rootfs in sola lettura, AppArmor/Seccomp disabilitati, segreti nelle variabili d'ambiente, nessun limite di memoria/CPU |
| Rete (3) | Modalità rete host, esposizione eccessiva di porte, esposizione della porta SSH (22) |
| Host (4) | Opzioni di sicurezza del daemon Docker, ASLR del kernel, inoltro IP, stato del Linux Security Module |
Livelli di severità:
- 🔴 Critico — Azione immediata richiesta (es. modalità privilegiata, socket Docker scrivibile)
- 🟡 Avvertimento — Miglioramento della sicurezza consigliato
- 🔵 Info — Risultati informativi
- 🟣 Non disponibile — Il controllo non può essere eseguito a causa di vincoli ambientali; mostra come abilitarlo
I controlli a livello host richiedono mount di volumi (
/proc:/host_proc:ro,/sys:/host_sys:ro). Se non montati, quei controlli vengono mostrati come Non disponibile con le istruzioni di configurazione.
Architettura
┌──────────────────────────────────────────────┐
│ DockProbe Container │
│ │
│ FastAPI + uvicorn (porta 9090) │
│ ├── collectors/ │
│ │ ├── containers.py (aiodocker) │
│ │ ├── host.py (/proc, /sys, GPU) │
│ │ └── images.py (system df) │
│ ├── alerting/ │
│ │ ├── detector.py (6 regole + azioni) │
│ │ └── telegram.py (httpx) │
│ ├── security/ │
│ │ └── scanner.py (16 checks) │
│ ├── storage/ │
│ │ └── db.py (SQLite WAL) │
│ └── static/ │
│ └── index.html (Chart.js) │
│ │
│ Volumi: │
│ docker.sock (ro), /sys (ro), /proc (ro), │
│ nvidia-smi (ro), SQLite named volume │
└──────────────────────────────────────────────┘
Dipendenze (solo 4 pacchetti):
fastapi— Framework webuvicorn— Server ASGIaiodocker— Client Docker API asincronohttpx— Client HTTP asincrono (API Telegram)
Configurazione
Tutte le impostazioni tramite file .env:
# Autenticazione (obbligatorio)
AUTH_USER=admin
AUTH_PASS=your-password
# Avvisi Telegram (opzionale)
TELEGRAM_BOT_TOKEN=your-bot-token
TELEGRAM_CHAT_ID=your-chat-id
# Soglie (opzionale, valori predefiniti mostrati)
CPU_THRESHOLD=80
MEM_THRESHOLD=90
# Limite connessioni (opzionale, 0 = illimitato)
MAX_CONNECTIONS=3
# Cloudflare Tunnel (opzionale)
CF_TUNNEL_TOKEN=your-tunnel-token
Modalità di accesso
Opzione 1: Rete locale (SSL autofirmato) — predefinito
bash install.sh # scegliere opzione 1
Accesso via https://localhost:9090 o https://<tuo-ip>:9090
Per accedere da altri dispositivi sulla stessa rete, usa l'IP LAN del server (es: https://192.168.1.100:9090). Se necessario:
- Aprire la porta nel firewall:
sudo ufw allow 9090/tcp - Accettare l'avviso del certificato autofirmato nel browser
Perché l'avviso del browser? DockProbe utilizza un certificato SSL autofirmato generato durante l'installazione. Poiché non è emesso da un'Autorità di Certificazione (CA) affidabile, il browser mostra un avviso "La connessione non è privata". Questo è normale — clicca su "Avanzate" → "Procedi al sito". Per eliminare questo avviso, usa Cloudflare Tunnel (Opzione 3) che fornisce automaticamente un certificato TLS affidabile.
Opzione 2: Accesso remoto tramite port forwarding
Per accesso esterno senza Cloudflare:
- Inoltrare la porta 9090 sul router all'IP LAN del server
- Accedere via
https://<tuo-ip-pubblico>:9090 - Usare un servizio DDNS (No-IP, DuckDNS, ecc.) se l'IP pubblico cambia
Nota: La porta viene esposta direttamente. Basic Auth + HTTPS sono attivi per impostazione predefinita, ma si consiglia Cloudflare Tunnel (Opzione 3) per maggiore sicurezza.
Opzione 3: Cloudflare Tunnel (consigliato per accesso remoto)
Nessun port forwarding, nessuna modifica al firewall, certificato TLS valido — il modo più semplice e sicuro per accedere da qualsiasi luogo.
bash install.sh # scegliere opzione 2, incollare token del tunnel
Procedura di configurazione:
- Creare un account gratuito su Cloudflare Zero Trust
- Andare su Networks > Tunnels > Create a tunnel
- Dare un nome al tunnel (es:
dockprobe) e copiare il token - Eseguire
bash install.she scegliere l'opzione Cloudflare Tunnel - Incollare il token
- Nel pannello Cloudflare, aggiungere un Public Hostname che punta a
http://localhost:9090 - Accedere via
https://your-domain.comcon certificato TLS valido
Endpoint API
| Endpoint | Metodo | Descrizione |
|---|---|---|
/ | GET | HTML della dashboard |
/api/current | GET | Ultimo snapshot (container + host + immagini + anomalie) |
/api/history/{name}?hours=1 | GET | Serie temporali dei container |
/api/history/host?hours=1 | GET | Serie temporali dell'host |
/api/alerts?hours=24 | GET | Storico avvisi |
/api/session | GET | Utente attuale, IP, connessioni attive |
/api/settings | GET/POST | Impostazioni a runtime (max_connections) |
/api/change-password | POST | Modifica utente/password |
/api/health | GET | Controllo di salute (senza autenticazione) |
Sicurezza
DockProbe è progettato per un self-hosting sicuro con più livelli di protezione:
Autenticazione e accesso
- Basic Auth su tutti gli endpoint (eccetto
/api/health) - PBKDF2-SHA256 hashing della password con salt casuale (600k iterazioni)
- Limitazione di frequenza — 5 tentativi di accesso falliti → 60s di blocco per IP
- Minimo 8 caratteri richiesti per la password
- Limite connessioni — Massimo utenti simultanei configurabile
Rete e trasporto
- HTTPS — RSA-4096 autofirmato (predefinito) o Cloudflare Tunnel
- CORS — Richieste cross-origin bloccate esplicitamente
- Protezione CSRF — Gli endpoint POST richiedono l'intestazione
X-Requested-With - Avviso fallback HTTP — La modalità testo in chiaro avvisa all'avvio (solo tunnel)
Rafforzamento del container
- Non root — Il container viene eseguito come
appuser, non come root - Mount in sola lettura — Docker socket, /sys, /proc tutti montati in read-only
- Protezione da path traversal — Il servizio di file statici valida i percorsi risolti
- Nessun accesso in scrittura — Solo monitoraggio, nessun controllo dei container
- Nessun OpenAPI/Swagger — Endpoint di documentazione API disabilitati in produzione
Limitazione di frequenza proxy-aware
X-Forwarded-Forè considerato attendibile solo dagli IP elencati nella variabile d'ambienteTRUSTED_PROXIES- Le connessioni dirette utilizzano sempre l'IP reale del client
Configurazione manuale
Se preferisci la configurazione manuale:
git clone https://github.com/deep-on/dockprobe.git
cd dockprobe
# Creare .env
cp .env.example .env
vi .env
# Generare certificato SSL (opzionale)
mkdir -p certs
openssl req -x509 -newkey rsa:2048 -nodes \
-keyout certs/key.pem -out certs/cert.pem \
-days 365 -subj "/CN=dockprobe"
# Avviare
docker compose up -d --build
Licenza
Apache License 2.0 — vedi LICENSE
Attribuzione: Le versioni modificate o ridistribuite devono mantenere il logo DeepOn e l'avviso "Powered by DeepOn Inc." nell'interfaccia.
Sviluppato da DeepOn Inc.