Zum Inhalt springen

Parallelverarbeitung

Zwischen der abschnittsweisen Parallelverarbeitung einer einzelnen Protokolldatei und der parallelen Verarbeitung vieler Protokolle wählen

pgBadger bietet zwei einander ergänzende Modi für die Parallelverarbeitung. Wählen Sie den Modus anhand der Struktur Ihrer Eingabedaten und nicht allein nach der Anzahl der CPUs.

OptionParallelitätseinheitGeeignet fürWichtigste Einschränkung
-j N / --jobs NAbschnitte einer Protokolldateieine große Protokolldatei mit wahlfreiem ZugriffAn Abschnittsgrenzen kann eine geringe Anzahl von Abfragen doppelt gezählt oder ausgelassen werden
-J N / --Jobs Nvollständige Protokolldateienviele unabhängige Protokollenützlich nur, wenn genügend Dateien vorhanden sind, um die Worker auszulasten

Eine große Datei mit -j aufteilen

$ pgbadger -j 8 /var/log/postgresql/postgresql.log

Der Algorithmus des Originalprojekts teilt jede Datei in N Bytebereiche auf, startet für jeden Bereich einen eigenen Parser, schreibt temporäre Binärstatistiken und führt diese anschließend zum endgültigen Bericht zusammen.

for each log file
    divide the file into N chunks
    find each chunk's start and end offsets
    fork N parsers at those offsets
    write one temporary binary statistics file per parser
wait for the workers
merge the binary files and build the report

Da Protokolleinträge und mehrzeilige Anweisungen nicht genau an Byte-Offsets ausgerichtet sind, können an den Abschnittsgrenzen bis zu etwa N Abfragen pro Datei abgeschnitten, ausgelassen oder — häufiger — doppelt gezählt werden. Verwenden Sie diesen Modus für aggregierte Analysen sehr großer Dateien, nicht für Abläufe, die eine forensisch exakte Zählung jedes Protokolleintrags erfordern.

Mehrere Dateien mit -J verarbeiten

$ pgbadger -J 8 /var/log/postgresql/postgresql-*.log

Jeder Worker verarbeitet eine vollständige Datei, sodass dieser Modus Ungenauigkeiten an Abschnittsgrenzen vermeidet. Besonders nützlich ist er bei Hunderten kleiner Dateien und ausreichender CPU- sowie I/O-Kapazität. Die Dokumentation des Originalprojekts sieht -J auch für unabhängige komprimierte Dateien vor; das Aufteilen einer einzelnen Datei mit -j erfordert dagegen unkomprimierte Eingabedaten mit wahlfreiem Zugriff.

Benchmark des Originalprojekts

Das Handbuch des Originalprojekts nennt diese Messwerte für einen Host mit 8 CPUs. Betrachten Sie sie als Vergleich der beiden Algorithmen und nicht als Prognose für aktuelle Hardware.

Eine Datei mit 9.5 GB:

Option1 CPU2 CPU4 CPU8 CPU
-j1h41m1850m2525m3915m58
-J1h41m1854m2841m1634m45

Zweihundert Dateien à 10 MB, insgesamt 2 GB:

Option1 CPU2 CPU4 CPU8 CPU
-j20m159m565m204m20
-J20m159m495m002m40

In der Praxis empfiehlt sich -j für wenige große Dateien und -J für viele kleine Dateien. Sie können beide Modi kombinieren, sofern Eingabe und Plattform dies unterstützen. Messen Sie jedoch die Leistung dieser Kombination: Die Protokollanalyse kann eher durch den Durchsatz des Speichersystems als durch die CPU-Leistung begrenzt werden.

Einschränkungen und temporäre Dateien

  • -j ist für komprimierte oder CSV-Eingabedaten nicht verfügbar und setzt das Forken von Prozessen voraus; daher steht dieser Modus unter Windows nicht zur Verfügung.
  • Bei entfernten Eingaben unterstützt das Originalprojekt keine Verarbeitung von CSV-Dateien.
  • Die parallele Analyse erstellt im ausgewählten temporären Verzeichnis Dateien mit Namen wie tmp_pgbadgerXXXX.bin (standardmäßig im temporären Systemverzeichnis).
  • Löschen Sie diese Dateien nicht, während pgBadger läuft. Verwenden Sie --tempdir, um sie auf einem Speichermedium mit ausreichender Kapazität abzulegen.
  • Beginnen Sie mit einer moderaten Anzahl von Workern und überwachen Sie CPU-Auslastung, Lesedurchsatz, Verbrauch an temporärem Speicherplatz und Laufzeit.