Systemd-Protokolle ('journalctl') sind zu groß und zu langsam

20

Meiner journalctlhält über 300 MB an Protokollen, wie von enthüllt journalctl --disk-usage. Alles scheint in Ordnung zu sein, wenn ich renne journalctl --verify:

$ journalctl --disk-usage
Archived and active journals take up 328.0M on disk.

$ journalctl --verify
PASS: /var/log/journal/d7b25a27fe064cadb75a2f2f6ca7764e/system.journal    
PASS: /var/log/journal/d7b25a27fe064cadb75a2f2f6ca7764e/user-65534.journal
PASS: /var/log/journal/d7b25a27fe064cadb75a2f2f6ca7764e/system@02f1aae76e32467390ab88ba03ae559e-0000000000000001-00056515dbdcd67e.journal
PASS: /var/log/journal/d7b25a27fe064cadb75a2f2f6ca7764e/user-1000.journal 
PASS: /var/log/journal/d7b25a27fe064cadb75a2f2f6ca7764e/user-65534@9838f64d6ee047bebec9d30d329064d4-00000000000005bb-00056515dbfe8d9d.journal

Mir ist aufgefallen, wie langsam das System ist, wenn ich von einer Pipe zu einer anderen pipe grepgehe journalctl.

Wie kann ich die Größe meiner Daten sinnvoll reduzieren journalctl?

Ursprüngliches GIF-Bild

WinEunuuchs2Unix
quelle

Antworten:

29

systemd kommt mit einem pfiffigen Staubsauger

Das Begrenzen von Protokolldateien auf eine bestimmte Größe systemdbietet die Möglichkeit vacuum, ältere Informationen aus Protokolldateien zu entfernen. Die zulässigen Parameter sind:

 --vacuum-size=BYTES   Reduce disk usage below specified size
 --vacuum-files=INT    Leave only the specified number of journal files
 --vacuum-time=TIME    Remove journal files older than specified time

Um beispielsweise den Verbrauch von 312 MB auf 200 MB (oder weniger) zu reduzieren, verwenden Sie:

$ journalctl --vacuum-size=200M
Deleted archived journal /var/log/journal/d7b25a27fe064cadb75a2f2f6ca7764e/[email protected]~ (56.0M).
Deleted archived journal /var/log/journal/d7b25a27fe064cadb75a2f2f6ca7764e/[email protected]~ (8.0M).
Deleted archived journal /var/log/journal/d7b25a27fe064cadb75a2f2f6ca7764e/user-1000@1bbb77599cf14c65a18af51646751696-000000000000064f-00056444d58433e1.journal (112.0M).
Vacuuming done, freed 176.0M of archived journals on disk.

Speicherplatz gespart

Die journalctlGröße wird wesentlich reduziert:

$ journalctl --disk-usage
Archived and active journals take up 136.0M on disk.

Die Größe ist von 312 MB auf 136 MB gesunken. Dies entspricht einer Einsparung von 176 MB und 64 MB mehr als erwartet. Dies ist wahrscheinlich eine einmalige Anomalie aufgrund einer außergewöhnlich großen einzelnen Protokolldatei. Ich werde diese Antwort nach einem Monat überarbeiten, wenn neue Informationen auftauchen.

Boot Logs reduziert

Die Anzahl der journalctlStartprotokolle betrug 32, jetzt sind es nur noch 26:

$ journalctl --list-boots
-26 0f230cc546fd4aec8f5233e0074ab3e1 Tue 2018-02-13 03:57:20 MST—Wed 2018-02-14 
-25 c0d2c0141dd840cbab75d3c2254f8781 Wed 2018-02-14 22:59:13 MST—Sat 2018-02-17 
-24 aafb2573a6374e019a7165cb8eee74a0 Sun 2018-02-18 06:02:03 MST—Mon 2018-02-19 
-23 8462f1969c6f4d61973e7e245014b846 Mon 2018-02-19 04:16:53 MST—Sat 2018-02-24 
-22 7f71ac2fb9714c49aa05989b741655f2 Sat 2018-02-24 04:24:36 MST—Sat 2018-02-24 
-21 b12a48c363474e5fb39311a166a98d54 Sat 2018-02-24 04:28:09 MST—Sun 2018-02-25 
-20 fbef1e659de64a0cbdcb9994f5a39457 Sun 2018-02-25 17:48:20 MST—Mon 2018-02-26 
-19 3d9b4c10f98d4ef7aab1cb2baa9b74e1 Mon 2018-02-26 08:37:01 MST—Mon 2018-02-26 
-18 4412b117dcc648aa9eceabcd0f205207 Mon 2018-02-26 08:38:00 MST—Mon 2018-02-26 
-17 f6794cbb7fb24213a6f2c3e368f666a1 Mon 2018-02-26 08:39:12 MST—Mon 2018-02-26 
-16 472f968506ed446ab12cf7abc65fa81a Mon 2018-02-26 08:49:37 MST—Mon 2018-02-26 
-15 d575c609d82e4ecd8dcebb70d40160d7 Mon 2018-02-26 17:07:36 MST—Mon 2018-02-26 
-14 878cfd9239a84dae80c62e7413c72951 Mon 2018-02-26 17:24:54 MST—Mon 2018-02-26 
-13 7f9913c7dbff46ab9bbd7c2cbefc4d7d Mon 2018-02-26 17:35:19 MST—Mon 2018-02-26 
-12 bf90829ef13a4e9fa1794bf0a88f4033 Mon 2018-02-26 17:45:12 MST—Wed 2018-02-28 
-11 fb879a836c7c459ab27f6332bee6013b Wed 2018-02-28 03:56:29 MST—Wed 2018-02-28 
-10 b0fec230765046f5bf3d654db1dc13ee Wed 2018-02-28 20:03:15 MST—Thu 2018-03-01 
 -9 72a2d6789eab4396be16348d9ead0408 Thu 2018-03-01 03:58:25 MST—Fri 2018-03-02 
 -8 8bccdc9b16124d26af05c34c8a30a0f5 Fri 2018-03-02 16:54:36 MST—Sat 2018-03-03 
 -7 40c2875db30349f5a9b1dfc849a47c05 Sat 2018-03-03 10:03:48 MST—Sat 2018-03-03 
 -6 781c79d2ec7946afba0fa2300e8ebe56 Sat 2018-03-03 10:04:34 MST—Sat 2018-03-03 
 -5 bb66dc875e414021940b7233072516d2 Sat 2018-03-03 17:43:08 MST—Tue 2018-03-06 
 -4 ba3bcfdc71584757b8bef9df16e7b0f6 Tue 2018-03-06 16:56:36 MST—Tue 2018-03-06 
 -3 60faa0fda99a4ef4b14b73c412d69e50 Tue 2018-03-06 17:00:47 MST—Tue 2018-03-06 
 -2 9b317bb8403344ca84dd2f288bc90410 Tue 2018-03-06 17:02:15 MST—Tue 2018-03-06 
 -1 dcb126be665a4531aae4312af7e51a34 Tue 2018-03-06 17:09:00 MST—Tue 2018-03-06 
  0 6a105af650d5442a9b03004165e58adf Tue 2018-03-06 17:42:45 MST—Wed 2018-03-07 

Leistung verbessert

Die Zeit zur Überprüfung der journalctlIntegrität ist spürbar kürzer:

journalctl verify 2.png

Die Zeit wurde von 10 Sekunden auf 4 Sekunden reduziert.

Gutschrift zu dieser Quelle


Langfristige Lösungen

Ich habe einen cronJob geschaffen, um den Staubsauger einmal im Monat laufen zu lassen.

Eine andere Option, wie in den Kommentaren erwähnt, ist das Setzen SystemMaxUse=50Mvon /etc/systemd/journald.conf. Es gibt tatsächlich vier verschiedene Stellen, an denen Sie die Option einstellen können:

/etc/systemd/journald.conf
/etc/systemd/journald.conf.d/*.conf
/run/systemd/journald.conf.d/*.conf
/usr/lib/systemd/journald.conf.d/*.conf

Es gibt tatsächlich viele Optionen, die Sie für ähnliche Ziele verwenden können:

SystemMaxUse=, SystemKeepFree=, SystemMaxFileSize=, SystemMaxFiles=, RuntimeMaxUse=, RuntimeKeepFree=, RuntimeMaxFileSize=, RuntimeMaxFiles=
WinEunuuchs2Unix
quelle
5
Dies ist eine vorübergehende Korrektur, keine dauerhafte Lösung. Sie sollten /etc/systemd/journald.confSystemMaxUse=50M
phiresky
@phiresky Danke für den Hinweis. Ich habe die Antwort aktualisiert.
WinEunuuchs2Unix
2

Sie können journalctl anweisen, eine kleinere Menge an Material anzuzeigen. Hierfür gibt es verschiedene Möglichkeiten:

  • -u [unit]oder --unit=[unit]: dies weist journalctl an, nur Protokolle von einer Systemeinheit anzuzeigen. Sie können beispielsweise journalctl -u NetworkManager.serviceFolgendes eingeben und erhalten Protokolle von NetworkManager.
  • -s [time]oder --since=[time]: Dies weist journalctl an, alle Einträge von vor einer bestimmten Zeit zu ignorieren, angegeben als yyyy-mm-dd hh:mm:ss. Wenn Sie die Zeit weglassen möchten, verwendet journalctl 00:00:00. Wenn Sie das Datum weglassen, verwendet journalctl auch das aktuelle Datum. Hier ist ein Beispiel, von der man - Seite genommen: journalctl -s 2012-10-30 18:17:16.
  • -U [time]oder --until=[time]: Dies ähnelt dem oben genannten, mit der Ausnahme, dass Einträge nach dem angegebenen Zeitpunkt weggelassen werden. Argumente und Syntax sind identisch.
  • -n [x]oder --lines [x]: begrenzt die Anzahl der Ausgabezeilen, wobei "x" eine Ganzzahl ist. Bei der Eingabe journalctl -n 12werden nur die zwölf neuesten Protokolle angezeigt.

Sie können auch die Menge der gespeicherten Daten reduzieren, aber WinEunuuchs2Unix hat bereits darauf hingewiesen, sodass ich keine Zeit damit verschwenden werde, diese Informationen zu wiederholen.

TSJNachos117
quelle
Sieht aus wie journalctlhat eine Fülle von Optionen und jemand sollte ein zenityoder yadFrontend mit GUI-Dropdown-Menüs und Optionsfeldern / Kontrollkästchen zum Filtern schreiben . Ich bin irgendwie versucht, mich. +1 obwohl Antwort streunt Geist der Frage :)
WinEunuuchs2Unix