Hallo allerseits!
In diesem Artikel möchte ich darüber sprechen, wie ich den Archivierer ausgewählt habe, um die Protokolle unseres Front-Office-Systems zu komprimieren.
Die Abteilung, in der ich arbeite, befasst sich mit der Entwicklung und Pflege eines einheitlichen Front-Office-Systems der Bank. Ich bin verantwortlich für die Wartung, Überwachung und DevOps.
Unser System ist eine hochgeladene Anwendung, die täglich mehr als 5.000 einzelne Benutzer bedient. Heute ist es ein „Monolith“ mit all seinen Vor- und Nachteilen. Aber jetzt wird der Prozess der Übertragung von Funktionen auf Microservices aktiv fortgesetzt.
Täglich generiert unser System mehr als 130 GB Rohprotokolle. Obwohl wir den ENG-Stack (Elasticsearch Nxlog Graylog) verwenden, enthalten Dateiprotokolle viel mehr Informationen (z. B. Stack-Trace-Fehler) und erfordern daher Archivierung und Speicherung.
Da der Speicherplatz begrenzt ist, stellt sich die Frage: "Und welcher Archivierer wird diese Aufgabe am besten bewältigen."
Um dieses Problem zu beheben, habe ich ein PowerShell-Skript geschrieben, das die Analyse für mich durchgeführt hat.
Die Aufgabe des Skripts besteht darin, die Archivierungsprogramme rar, 7z und zip mit unterschiedlichen Komprimierungsparametern aufzurufen, um die Geschwindigkeit der Archivbildung sowie den verwendeten Speicherplatz zu berechnen.
Vorarbeiten:
Wir analysieren genauer
$table|Sort-Object -Property "Size %","Result %"|Format-Table -AutoSize
$table|Sort-Object -Property "Result %","Size %","Time %"|Format-Table -AutoSize
Das ergebnis:
Der sparsamste Speicherplatz war 7z mit einem Komprimierungsverhältnis von -mx = 8 und -mx = 9

Die schnellste Zeit zum Erstellen eines Archivs war 7z mit einer Komprimierungsrate von -mx = 1

Das Optimum in Bezug auf Geschwindigkeit und belegten Platz war 7z mit einem Kompressionsverhältnis von -mx = 3

Wir wählen 7z mit einer Komprimierungsrate von -mx = 8, da die Größe des Archivs -mx 9 ist, aber es funktioniert etwas schneller.
Gut, der Archivierer und das Komprimierungsverhältnis sind ausgewählt. Jetzt archivieren wir die Protokolle!
Wir müssen die folgenden Probleme lösen:
- Vermeiden Sie während des Betriebs eine hohe Serverlast.
- Verarbeiten Sie alle Ordner mit einem Unterordner Logs.
- Löschen Sie Archive, die älter als 30 Tage sind (um nicht zu wenig Speicherplatz zu haben).
- Erstellen Sie Archive nach Tag, je nachdem, wann die Dateien geändert wurden.
Hier werde ich nicht jede Zeile des Skripts (beschrieben in den Kommentaren) zeichnen, sondern mich nur auf die Set-MMTCore-Funktion konzentrieren, mit der wir die Anzahl der Threads für 7z berechnen können, um den Prozessor nicht auf unseren Server zu laden:
Function Set-MMTCore {
Ohne Verwendung der Set-MMTCore-Funktion
Es ist zu erkennen, dass die CPU zu 100% ausgelastet ist. Dies bedeutet, dass wir unweigerlich Probleme auf dem Server verursachen und eine Warnung vom Überwachungssystem erhalten.

Bei Verwendung der Set-MMTCore-Funktion
Es ist ersichtlich, dass die CPU 30-35% beträgt. Das bedeutet, dass Sie mit der Set-MMTCore-Funktion Dateien archivieren können, ohne den Betrieb des Servers zu beeinträchtigen.

Das Ergebnis des Backup-Skripts:
Ordner vor der Archivierung:

Ordner nach der Archivierung:

Dateien, die während des Archivierungsprozesses erstellt wurden:

Dateien im Archiv:

