Zum Hauptinhalt springen Zur Navigation springen Zur Fußzeile springen
Begrenzte Zeit: Design Partner Programm. BUSINESS Plan kostenlos für immer.

Überwachung

Maschinengesundheit, Container, Dienste, Repositories und Diagnose überwachen.

Überwachung

Rediacc bietet integrierte Überwachungsbefehle, um Maschinengesundheit, laufende Container, Dienste, Repository-Status und Systemdiagnose zu inspizieren.

Maschinengesundheit

Einen vollständigen Gesundheitsbericht für eine Maschine abrufen:

rdc machine health --name server-1

Dieser meldet:

  • System: Laufzeit, Festplattennutzung, Datastore-Auslastung
  • Container: Anzahl laufender, gesunder und ungesunder Container
  • Speicher: SMART-Gesundheitsstatus
  • Probleme: Erkannte Probleme

Verwenden Sie --output json für maschinenlesbare Ausgabe.

Container auflisten

Alle laufenden Container über alle Repositories auf einer Maschine anzeigen:

rdc machine containers --name server-1
SpalteBeschreibung
NameContainer-Name
StatusLaufzeit oder Beendigungsgrund
ZustandLaufend, beendet usw.
GesundheitGesund, ungesund, keine
CPUCPU-Auslastung in Prozent
SpeicherSpeicherauslastung / Limit
RepositoryWelchem Repository der Container gehört

Optionen:

  • --health-check, Aktive Gesundheitsprüfungen an Containern durchführen
  • --output json, Maschinenlesbare JSON-Ausgabe

Die JSON-Ausgabe enthält vollständige Containerdetails (labels, port_mappings, image, id) sowie repository (aufgelöster Name), repository_guid (ursprüngliche GUID), domain und autoRoute.

Dienste auflisten

Systemd-Dienste im Zusammenhang mit Rediacc auf einer Maschine anzeigen:

rdc machine services --name server-1
SpalteBeschreibung
NameDienstname
ZustandAktiv, inaktiv, fehlgeschlagen
UnterzustandLaufend, beendet usw.
NeustartsNeustart-Zähler
SpeicherSpeicherauslastung des Dienstes
RepositoryZugehöriges Repository

Optionen:

  • --stability-check, Instabile Dienste markieren (fehlgeschlagen, >3 Neustarts, automatischer Neustart)
  • --output json, Maschinenlesbare JSON-Ausgabe

Die JSON-Ausgabe enthält vollständige Dienstdetails mit repository (aufgelöster Name) und repository_guid (ursprüngliche GUID).

Repositories auflisten

Repositories auf einer Maschine mit detaillierten Statistiken anzeigen:

rdc machine repos --name server-1
SpalteBeschreibung
NameRepository-Name
GrößeDisk-Image-Größe
EingebundenEingebunden oder ausgehängt
DockerDocker-Daemon läuft oder gestoppt
ContainerContainer-Anzahl
FestplattennutzungTatsächliche Festplattennutzung innerhalb des Repositories
GeändertLetzte Änderungszeit

Optionen:

  • --search <text>, Nach Name oder Einbindungspfad filtern
  • --output json, Maschinenlesbare JSON-Ausgabe

Die JSON-Ausgabe enthält name (aufgelöst) und guid (ursprüngliche GUID) und verschachtelt für jedes Repository die Arrays containers (mit domain, autoRoute, repository/repository_guid) und services.

Speichergesundheit

BTRFS-Fragmentierung und Reflink-Freigabe über alle Repositories auf einer Maschine prüfen:

rdc machine query --name server-1 --storage-health
SpalteBeschreibung
QuotaDie maximale Größe des Repositories (seine Wachstumsobergrenze, gesetzt bei der Erstellung oder durch resize/auto-grow)
AllocatedWas das Sparse-Image aktuell tatsächlich im Pool belegt
UniqueTatsächlich einzigartige Daten, die nur diesem Repository gehören
SharedDatenblöcke, die über Repositories via BTRFS-Reflinks wiederverwendet werden (kostenlose Kopien)
ReclaimableDie Lücke zwischen belegtem und genutztem Speicher, die repo trim an den Pool zurückgeben kann. Zeigt - für unmountete Repositories
DiscardsOb das verschlüsselte Volume Discards durchleitet (on für jedes Repository, das mit einer aktuellen Version gemountet wurde)
DivergenceProzentualer Anteil des Images, der einzigartig für dieses Repository ist und nicht geteilt wird (höher bedeutet mehr rückgewinnbaren Speicher bei Löschung)
FragExtents pro GB im copy-on-write-Image (nur informativ)

Quota und Allocation sind bewusst unterschiedliche Werte: Ein Repository mit 20 GB Quota, das 6 GB Daten speichert, kostet den Pool nur das tatsächlich Belegte. Der Pool kann daher mehr Quota versprechen als er physisch besitzt, und die Reclaimable-Spalte zeigt, wie viel der Allocation jedes Repositories nicht mehr genutzt wird und zurückgetrimmt werden kann.

Unterhalb der Tabelle liefert eine Pool-Zusammenfassung den Füllstand des Datastores und wie viel Speicher Backup-Snapshots derzeit belegen:

Pool: 265.4 GB used, 95.2 GB free (73.6% full)
Backup snapshots pin 2.1 GB (1 active, 0 stale; stale ones are removed by 'rdc machine prune')

Während ein Backup läuft, referenziert sein Snapshot weiterhin jeden Block, den er mit aktiven Repositories teilt; Löschungen und Trims geben daher weniger Pool-Speicher frei, bis der Backup-Zyklus abgeschlossen und der Snapshot gelöscht ist. Veraltete Snapshots aus unterbrochenen Backups werden vom Storage-Maintainer innerhalb von Minuten automatisch entfernt.

Die Zusammenfassung zeigt Gesamteinsparungen durch BTRFS-Reflinks:

14 repos, 224.3 GB virtual size
Unique data: 323.7 MB | Shared: 224.0 GB | Efficiency: 99.9%
  • Virtuelle Größe ist die Summe aller Repository-Image-Größen. Dies zeigt, wie die Repositories aussehen, zählt jedoch gemeinsam genutzte Blöcke via Reflinks doppelt.
  • Einzigartige Daten sind der tatsächlich verbrauchte Speicher durch Repository-Daten, die nur in einem Repository vorhanden sind. Dies ist das, was beim Löschen eines Repositories freigegeben wird.
  • Geteilt sind Daten, die über Repositories via BTRFS-Reflinks wiederverwendet werden. Das Forken eines Repositories erstellt Reflink-Kopien, die Blöcke teilen, bis eine Seite neue Daten schreibt; dann divergieren die Blöcke.
  • Effizienz ist der Prozentsatz der via Reflinks wiederverwendeten Daten. Höher ist besser. Eine Maschine mit vielen Forks desselben Parent-Repositories zeigt eine Effizienz nahe 100%.

Die Frag-Spalte ist nur informativ. Sie zählt Extents der copy-on-write-Image-Datei, nicht die Dateien, die deine Anwendung darin liest, daher liest sie unter normalen zufälligen Schreib-Workloads (Datenbanken, Container-Layer) hoch und sagt auf SSD-gestütztem Speicher nichts über die Leseperformance aus. Rediacc bietet bewusst keinen Defragmentierungsbefehl an: btrfs filesystem defragment hebt die Reflinks von refgelinkten Forks und Snapshots auf, was auf einem nahezu vollen Pool die Nutzung dramatisch aufblähen kann, während Benchmarks keinen messbaren Lesegewinn zeigen. Die vollständigen Messungen und Begründungen findest du unter Deine Fragmentierungszahl sieht erschreckend aus. Ich habe gemessen, was sie kostet..

Der Scan läuft parallel und dauert je nach Anzahl und Größe der Repositories 5-15 Sekunden. Wenn --storage-health nicht angegeben ist, erscheint nach der Abfrageausgabe ein einzeiliger Hinweis als Erinnerung.

BTRFS-Scrub

Rediacc plant automatisch einen wöchentlichen BTRFS-Scrub auf jeder Maschine. Der Scrub liest jeden Datenblock im Datastore, prüft Prüfsummen und meldet Korruptionen. Dies erkennt stille Datenkorrumpierung (Bitrot), bevor sie sich auf Backups und Forks ausbreitet.

Der Scrub läuft jeden Sonntag um 02:00 Uhr Ortszeit (Maschinenzeitszone) mit einer zufälligen Verzögerung von bis zu 1 Stunde. Er läuft mit niedrigster I/O-Priorität (ionice idle, nice 19), sodass er laufende Dienste nicht beeinträchtigt. Auf SSD-gestützten Maschinen sind etwa 8 Minuten pro 100 GB Datastore zu erwarten.

Der Scrub-Timer wird automatisch beim ersten Daemon-Start nach einem renet-Upgrade installiert. Wenn sich die Scrub-Richtlinie in einer zukünftigen renet-Version ändert, aktualisiert sie sich beim nächsten Daemon-Start ohne Benutzereingriff.

Scrub-Status

Das Ergebnis des letzten Scrubs wird außerhalb des BTRFS-Volumes gespeichert (unter /var/lib/rediacc/scrub-last-result.json), sodass es auch bei Problemen mit dem Volume lesbar bleibt. Die Ausgabe von rdc machine query --system enthält ein scrub_status-Feld:

"scrub_status": {
  "last_run_human": "3 days ago",
  "status": "ok",
  "total_errors": 0,
  "uncorrectable": 0,
  "duration_seconds": 312
}
StatusBedeutung
okLetzter Scrub abgeschlossen ohne Fehler
never_runScrub noch nicht gelaufen (Timer gerade installiert)
overdueLetzter Scrub war vor mehr als 14 Tagen
errors_foundScrub hat Prüfsummen-Fehler gefunden (prüfen Sie die Zähler total_errors und uncorrectable)
failedScrub-Prozess mit Nicht-Null-Code beendet

Wenn uncorrectable größer als null ist, können die betroffenen Blöcke nicht automatisch repariert werden (Einzeldisk-BTRFS hat keine redundante Kopie). Stellen Sie das betroffene Repository aus dem neuesten Backup wieder her.

Manueller Scrub

Um einen Scrub sofort auszuführen (z.B. nach einem Stromausfall oder einer Festplattenmigration):

rdc term connect -m server-1 -c "sudo renet maintenance scrub --datastore /mnt/rediacc"

Das Ergebnis wird in derselben JSON-Datei gespeichert und ist sofort im nächsten rdc machine query --system sichtbar.

Vault-Status

Einen vollständigen Überblick über eine Maschine einschließlich Bereitstellungsinformationen erhalten:

rdc machine vault-status --name server-1

Dies liefert:

  • Hostname und Laufzeit
  • Speicher-, Festplatten- und Datastore-Auslastung
  • Gesamtzahl der Repositories, Anzahl der eingebundenen und laufenden Docker-Instanzen
  • Detaillierte Informationen pro Repository

Verwenden Sie --output json für maschinenlesbare Ausgabe.

Verbindung testen

Nur Cloud-Adapter. Beim lokalen Adapter verwenden Sie rdc term connect -m server-1 -c "hostname", um die Konnektivität zu prüfen.

SSH-Konnektivität zu einer Maschine überprüfen:

rdc machine test-connection --ip 203.0.113.50 --user deploy

Meldet:

  • Verbindungsstatus (Erfolg/Fehlgeschlagen)
  • Verwendete Authentifizierungsmethode
  • SSH-Schlüssel-Konfiguration
  • Status der Public-Key-Bereitstellung
  • Known-Hosts-Eintrag

Optionen:

  • --port <number>, SSH-Port (Standard: 22)
  • --save -m server-1, Verifizierten Host-Schlüssel in der Maschinenkonfiguration speichern

Diagnose (doctor)

Eine vollständige Diagnoseprüfung Ihrer Rediacc-Umgebung durchführen:

rdc doctor
KategoriePrüfungen
UmgebungNode.js-Version, CLI-Version, SEA-Modus, Go-Installation, Docker-Verfügbarkeit
RenetBinary-Standort, Version, CRIU, rsync, SEA eingebettete Assets
KonfigurationAktive Konfiguration, Adapter, Maschinen, SSH-Schlüssel
VirtualisierungPrüft, ob Ihr System lokale virtuelle Maschinen ausführen kann (rdc ops)

Jede Prüfung meldet OK, Warnung oder Fehler. Verwenden Sie dies als ersten Schritt bei der Fehlerbehebung jeglicher Probleme.

Exit-Codes: 0 = alles bestanden, 1 = Warnungen, 2 = Fehler.

Bereitschaftsprüfung der Dienste

Während repo up wartet renet darauf, dass HTTP-Dienste Verbindungen akzeptieren, bevor sie als bereit deklariert werden. Die Wartelogik berücksichtigt dabei Docker-Healthchecks:

  • Container, die Docker als healthy meldet, werden sofort als bereit akzeptiert, ohne TCP-Probe.
  • Container, die sich noch innerhalb des start_period ihres Healthchecks befinden, lösen eine informative Meldung aus, keine Warnung; der Proxy versucht weiterhin, die Verbindung herzustellen.
  • Compose-Dienste ohne laufenden Container (etwa hinter einem inaktiven Profil) werden übersprungen.
  • Alle anderen Dienste werden per TCP für bis zu 15 Sekunden geprüft (änderbar mit REDIACC_READINESS_TIMEOUT in Sekunden).

Wer auf langsam startenden Diensten einen Docker-Healthcheck definiert, gibt renet ein verlässliches Bereitschaftssignal und vermeidet überflüssige Probe-Meldungen in der Deploy-Ausgabe.