v0.1.12
Logs étape par étape : détection devices, exit code smartctl, taille stdout/stderr, résultat parse JSON. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Nanometrics
Système client-serveur de surveillance matérielle (CPU, RAM, disque) conçu pour une empreinte quasi nulle sur les machines Debian.
Architecture
┌─────────────────┐ UDP / MQTT ┌──────────────────────────┐
│ Agent Rust │ ─────────────────────▶ │ Serveur Go │
│ ~1 Mo binaire │ │ SQLite · Prometheus │
│ systemd │ │ REST API · WebSocket │
└─────────────────┘ └──────────┬───────────────┘
│ HTTP
┌──────────▼───────────────┐
│ Dashboard Nginx │
│ HTML/CSS/JS · temps réel │
└──────────────────────────┘
Fonctionnalités
- Métriques collectées : CPU, RAM (libre/utilisée), disque (total/libre/utilisé), uptime, réseau, température, SMART (si
smartctldisponible) - Double protocole : UDP (fire-and-forget) et/ou MQTT (bidirectionnel, compatible Home Assistant auto-discovery)
- Temps réel : WebSocket — mise à jour des tuiles sans rechargement
- Historique : SQLite avec rétention configurable (7 à 365 jours)
- Dashboard interactif : grille responsive, popup détail avec courbes, configuration par agent depuis l'UI
- Empreinte agent minimale : pas de runtime async (pas de Tokio), boucle mono-thread,
sysinfosans threads de fond - Sécurité systemd :
DynamicUser=yes,ProtectSystem=strict,ProtectHome=read-only
Installation de l'agent Rust
Prérequis
# Rust (si non installé)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Compilation
cargo build --release --manifest-path agent/Cargo.toml
# Binaire produit : agent/target/release/nanometrics-agent (~1 Mo)
Configuration
Créer /etc/nanometrics/config.toml :
[server]
ip = "10.0.0.50" # IP du serveur Go
port = 9999 # Port UDP du serveur
[mqtt]
enabled = false
host = "10.0.0.3"
port = 1883
topic_base = "nanometrics/agents"
auto_discovery = true
birth_message = true
last_will = true
[metrics.cpu]
enabled = true
udp = true
mqtt = false
[metrics.memory]
enabled = true
udp = true
mqtt = false
[metrics.disk]
enabled = true
udp = true
mqtt = false
[metrics.smart]
enabled = true # nécessite smartctl installé
udp = true
mqtt = false
[metrics.uptime]
enabled = true
udp = true
mqtt = false
[metrics.network]
enabled = true
udp = true
mqtt = false
[metrics.temperature]
enabled = true
udp = true
mqtt = false
Déploiement systemd
# Copier le binaire
sudo cp agent/target/release/nanometrics-agent /usr/local/bin/
# Créer le répertoire de config
sudo mkdir -p /etc/nanometrics
sudo cp agent/config.toml /etc/nanometrics/config.toml
# Installer le service
sudo cp deploy/nanometrics-agent.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now nanometrics-agent
# Vérifier
sudo systemctl status nanometrics-agent
journalctl -u nanometrics-agent -f
Pour SMART, installer smartmontools sur la machine cible :
sudo apt install smartmontools
Installation du serveur Go + dashboard
Prérequis
- Docker et Docker Compose
Lancement
cd server
docker compose up -d
Le dashboard est disponible sur http://<ip-serveur> (port 80).
Variables d'environnement
| Variable | Défaut | Description |
|---|---|---|
UDP_ADDR |
0.0.0.0:9999 |
Adresse d'écoute UDP |
HTTP_ADDR |
0.0.0.0:8080 |
Adresse du serveur HTTP |
DB_PATH |
/data/nanometrics.db |
Chemin de la base SQLite |
MQTT_BROKER |
tcp://10.0.0.3:1883 |
Adresse du broker MQTT |
MQTT_TOPIC_BASE |
nanometrics/agents |
Topic MQTT de base |
Endpoints exposés
| Endpoint | Description |
|---|---|
GET /api/agents |
Liste de tous les agents |
GET /api/agents/{id}/history |
Historique des métriques |
GET /api/agents/{id}/config |
Configuration d'un agent |
PUT /api/agents/{id}/config |
Modifier la config d'un agent |
POST /api/agents/{id}/icon |
Upload d'icône (JPG/PNG/WEBP) |
GET /api/config |
Configuration serveur |
PUT /api/config |
Modifier la configuration serveur |
GET /metrics |
Métriques Prometheus |
WS /ws |
WebSocket temps réel |
Commandes de développement
# Agent Rust — build, tests, lint
cargo build --release --manifest-path agent/Cargo.toml
cargo test --manifest-path agent/Cargo.toml
cargo clippy --manifest-path agent/Cargo.toml
# Serveur Go — tests, vet
go test ./server/...
go vet ./server/...
# Serveur Go — lancement local (sans Docker)
cd server
DB_PATH=/tmp/nm.db HTTP_ADDR=0.0.0.0:8080 UDP_ADDR=0.0.0.0:9999 go run .
# Simuler un agent avec netcat
echo '{"hostname":"test-01","ip":"127.0.0.1","status":"online","cpu_percent":42.5,"memory_used":3000000000,"memory_total":8000000000,"hdd_used":60000000000,"hdd_total":200000000000,"uptime":86400}' \
| nc -u 127.0.0.1 9999
Description
Releases
16
Languages
HTML
66.9%
JavaScript
12.8%
Go
6.6%
Rust
6%
CSS
5.7%
Other
1.9%