Metrics ist ein fully-functional, containerisiertes, modulares Monitoring-System geschrieben in 100% Rust. Es integriert eine eingebettete SurrealDB-Datenbank (unter Verwendung der persistenten, MVCC-fähigen SurrealKV Storage-Engine), dynamic library Plugin-Lade-Unterstützung via libloading und einen Axum-API-Server, der ein neon-accentuiertes, glassmorphes Single Page Application Dashboard bereitstellt.
Ziel ist es, Metriken aus verschiedenen Quellen (ZFS, Systemressourcen, Immich, etc.) zu sammeln und direkt in Prometheus (via Pushgateway) oder InfluxDB (Line Protocol) zu schreiben.
Das Projekt ist als Cargo-Workspace strukturiert:
Cargo.toml: Workspace-Konfiguration.metrics-api/: Shared API Crate, das die Module und dieMonitorModuleTrait Schnittstellen definiert:- Definiert das
MonitorModuleTrait,DbBackendKonfigurationen und diewrite_metricsHilfsfunktion.
- Definiert das
metrics-core/: Die zentrale Engine und der Scheduler-Koordinator:src/main.rs: Initialisiert Einstellungen, DB, UI-Router und Scheduler.src/db.rs: Verwaltet ACID-konforme SurrealDB/SurrealKV Schreib- und Lesezugriffe.src/loader.rs: Lädt und entlädt Plugin-Bibliotheken (.so/.dll) zur Laufzeit.src/scheduler.rs: Task-Scheduler, der Module im gewünschten Intervall ausführt.src/api.rs: Bietet JWT-Authentifizierung und die Endpoint-Kompilierung für neue Plugins.src/static/index.html: Poliertes, responsives Dashboard mit Live-Logs und Einstellungsformularen.
modules/: Curated Plugins:metrics-system/: Überwacht CPU, RAM und Festplattenbelegung viasysinfo.metrics-zfs/: Führtzpool listaus, um den Pool-Status und die Speichernutzung zu erfassen.metrics-immich/: Ruft Statistiken (Fotos, Videos, Speicher) von der Immich-API ab.- Hinweis: Alle Module besitzen einen
mock-Modus für schnelles lokales Testen.
.github/workflows/: Continuous Integration Workflow, der das Docker-Image bei Pushes aufmainbaut und an GitHub Container Registry (GHCR) pusht.
Das docker-compose Setup lädt automatisch das vorkompilierte Image aus der GitHub Container Registry herunter:
- Container im Hintergrund starten:
docker compose up -d
- Dashboard aufrufen:
- Öffnen Sie: http://localhost:3000
- Anmelden mit: Benutzername
adminund Standard-Passwortadmin123(Konfigurierbar viaADMIN_PASSWORDindocker-compose.yml).
- Workspace bauen:
cargo build --release
- Server starten:
- Windows:
$env:PORT="3000"; $env:ADMIN_PASSWORD="admin123"; $env:DB_PATH="./data"; .\target\release\metrics-core.exe
- Linux:
PORT=3000 ADMIN_PASSWORD=admin123 DB_PATH=./data ./target/release/metrics-core
- Windows:
Jedes Modul ist ein eigenständiges Rust-Crate, das die Shared Trait aus metrics-api implementiert.
- Erstellen Sie ein neues Cargo-Bibliotheksprojekt.
- Integrieren Sie
metrics-apials Abhängigkeit. - Fügen Sie in Ihrer
Cargo.tomlhinzu:[lib] crate-type = ["cdylib"]
- Implementieren Sie das
MonitorModule-Schnittstellentrait und exportieren Sie die Erstellungsmethode:#[no_mangle] #[allow(improper_ctypes_definitions)] pub extern "C" fn create_module() -> *mut dyn MonitorModule { let module = MyCustomModule::default(); let boxed = Box::new(module) as Box<dyn MonitorModule>; Box::into_raw(boxed) }
- Installieren Sie das Modul über die Web-UI, indem Sie die ID und Ihre Git-Repository-URL im Store eintragen. Metrics klont, kompiliert und lädt Ihr Modul vollautomatisch im laufenden Betrieb!