Logfile Tools

Kommandozeilen-Tools für die Auswertung großer Logdateien

Was haben Webmaster mit Mathematikern gemeinsam? Natürlich das Interesse an Statistiken; insbesondere die Besucherstatistiken des eigenen Blogs, an denen der Erfolg der Selbstdarstellung gemessen werden kann. Dies ist oft der einzige Antrieb, der den engagierten Webmaster, Redakteur und Pressereferenten in Personalunion zum Weitermachen antreibt.

Wenn der Erfolg nicht ausbleibt, steht der Betreiber bald vor Gigabyte umfassenden Logdateien, die einfach nicht mehr handlebar sind. Google Analytics ist im kommerziellen Umfeld ausgeschlossen, da Daten ohne Zustimmung der Besucher nicht in die USA übertragen werden dürfen. Dies geschieht aber bereits beim Aufruf der ersten Seite einer Internetpräsenz.

Update Dezember 2024

Den überarbeiteten Quellcode der Logfile Tools für 64-bit-CPUs finden Sie nun auf GitHub. Um die Installation zu vereinfachen, habe ich auch eine Setup-Datei erstellt. Einen Link finden Sie am Ende dieses Dokuments.

Was tun?

Logfile Tools

Mit den Logfile Tools sind Sie in der Lage, Standard-Logdateien des Apache Webserver in auswertbare Stücke zu schneiden, zu verbinden, zu sortieren und vieles mehr.

Bei den Logfile Tools handelt es sich um 64-bittige Kommandozeilenprogramme, die unter Windows XP(x64) bis Windows 11 ausführbar sind.

Um die Logfile Tools zu verwenden, kopieren Sie diese einfach zu Ihren Logdateien, oder in den Systempfad. Ein Installer steht Ihnen am Ende dieses Dokuments zur Verfügung.

SplitLog.exe

Um eine Logdatei von mehreren Gigabyte zu bearbeiten ist meistens mehr Arbeitsspeicher notwendig, als man eingebaut hat (Murphy's Law #683).

Mit SplitLog können Sie eine einzelne Logdatei in kleine Happen zu je "n" Zeilen aufteilen.

SplitLog.exe <FileName> [Lines]

<FileName> - Filename of the logfile to process
[Lines]    - Number of lines in each split file

ConcatLog.exe

erzeugt aus mehreren Dateien eine zusammenhägende Logdatei, ist also der Gegenpart zu SplitLog. Es ist unbedingt darauf zu achten, daß ConcatLog die Dateien in alphabetischer Reihenfolge bearbeitet! Linux' Logrotate erstellt die Dateinamen der archivierten Logs allerdings in umgekehrter Reihenfolge: access.log.gz.1 liegt zeitlich also nach access.log.gz.2! Um dieses Problem zu beheben, blättern Sie bitte zum Programm "ReverseRename.exe" weiter.

ConcatLog.exe <SourceFileName> <DestFileName>

<SourceFileName> - File mask with place holder of files to process
<DestFileName>   - File name for concatenated results

ExtractLog.exe

Sucht man in einer umfangreichen Logdatei nach einem bestimmten Zugriff, dessen Uhrzeit man kennt, erlaubt ExtractLog, einen zeitlich umgrenzten Bereich einer Logdatei für die weitere Bearbeitung auszuschneiden. Es wird nach einer IP-Adresse oder einem Hostnamen gesucht (es wird aber keine Namensauflösung durchgeführt!)

Die Ausgabe erfolgt auf der Konsole und kann mit dem ">"-Operator in eine Datei umgeleitet werden.

Folgende Parameter können angegeben werden:

ExtractLog.exe <SourceFileName> [options]

<SourceFileName>            - File name of log file
-hvalue, /hostname:value    - Filtering for <hostname>, Required argument.
[-fvalue], [/from:value]    - From date/time in format: "YYYY-MM-DDTHH:MM" You
                              cannot omit the HH:MM part.
[-tvalue], [/to:value]      - To date/time in format: "YYYY-MM-DDTHH:MM" You
                              cannot omit the HH:MM part.
[-avalue], [/around:value]  - To date/time in format: "YYYY-MM-DDTHH:MM" You
                              cannot omit the HH:MM part.
[-mvalue], [/minutes:value] - Use a time range along with the /around
                              parameter.
[-q], [/quiet]              - No extra information, just the output.

SortLog.exe

SortLog.exe ist das vermutlich beste Tool für die Archivierung von Logdateien. Es liest eine Zahl von Logdateien ein und sortiert deren Inhalte nach Monaten in Unterdateien. Die Originaldateien bleiben unverändert.

Für die Sortierung nach Datum/Uhrzeit muß SortLog die einzelnen Zeilen der Logdateien einlesen und zumindest den Inhalt eines kompletten Monats im Arbeitsspeicher halten. Dabei ist der Speicher auf 4 Gigabyte beschränkt - und zwar unabhängig davon, wieviel Arbeitsspeicher Sie in Ihrem Computer eingebaut haben! (32-bit-Software!)

Um möglichst effizient zu arbeiten, schaut SortLog zunächst durch die Logdateien und berechnet deren kleinstes und höchstes Datum. Für die jeweiligen Monate werden im zweiten Sortierungsdurchgang nur diejenigen Logdateien behandelt, die für den jeweiligen Monat relevante Daten enthalten.

Als Eingangs-Dateien werden alle Dateien im aktuellen Verzeichnis herangezogen, die mit dem Wort "access" beginnen. Als Ausgabe erstellt SortLog.exe pro Monat eine Datei nach dem Schema: access.YYYY.MM.log.

SortLog.exe kommt somit ohne Parameter aus.

FilterLog.exe

Es ist oft sinnvoll, Zugriffe von Suchmaschinen aus der Statistik auszuklammern. Dies übernimmt FilterLog.exe für Sie.

Achtung!

FilterLog arbeitet destruktiv!

FilterLog liest zunächst eine Datei namens filter.dat zeilenweise ein.

Sodann werden die aus dem Wildcard-Parameter erkannten Dateien nacheinander eingelesen und aller Zeilen beraubt, in denen eines der in der filter.dat enthaltenen Suchbegriffe vorkommt, z.B. "GoogleBot", "Bing" etc.

In diesem Prozess gehen die Originaldateien verloren. Da FilterLog aber ursprünglich in einer Kaskade gemeinsam mit SortLog verwendet wurde, welches Duplikate der Quelldateien erstellte, wurde dieses Verhalten niemals geändert.

ReverseRename.exe

In der Unix-Umgebung kommt das Werkzeug "Logrotate" zum Einsatz, welches in regelmäßigen Abständen Logdateien komprimiert und archiviert. Archivierte Dateien bekommen dann die Endung ".gz.1" mit fortlaufenden Nummern. Dabei werden ältere Logdateien mit höheren Zahlen versehen. Um solche Dateien mit ConcatLog.exe in der korrekten Reihenfolge zu einer großen Datei zu verbinden, kann man das Tool ReverseRename verwenden.

Hat man zum Beispiel die Logdateien "access_log.gz.1" bis "access.log.gz.10", genügt die Eingabe von:

ReverseRename.exe access_log.*

um die Dateien in umgekehrter Reihenfolge umzubenennen, ohne die Uhrzeiten in den Logdateien chronologisch durcheinanderzubringen.

AnonLog.exe

anonymisiert und verkürzt ein Logfile, indem es die IP-Adresse durch einen (teilweisen) Hash-Wert ersetzt und die Browserinformationen entfernt. Ich weiß nicht mehr, warum ich dieses Tool überhaupt erstellt habe, aber es könnte für GDPR-Anfragen nützlich sein.

AnonLog.exe <SourceFileName> <DestFileName>

<SourceFileName> - File name of source log file
<DestFileName>   - File name of destination log file