Oftmals benötigt man Informationen über die auftretenden Anfragen an den Webserver bzw. an die dahinter laufende Anwendung und möchte nicht auf client-seitig erzeugte Daten (Google Analytics oder Ähnliches) zurückgreifen. Da das Logfile des Apache-Servers ja vorhanden ist, kann dieses zur graphischen Auswertung herangezogen werden.
Wir interessieren uns für die Anzahl von Requests für ein festgelegtes Zeitintervall, beispielsweise innerhalb von fünf Minuten. Für die graphische Auswertung werden wir Gnuplot verwenden.
Falls nur bestimmte Requests von Interesse sind, kann das Logfile mit grep
oder awk
vorsortiert werden, bevor es an unser Shell-Skript übergeben wird.
Die Grundlegende Idee dahinter kann knapp so umrissen werden:
- Den Apache-Timestamp jeder Zeile in einen Unix-Timestamp konvertieren
- Startzeitpunkt des Intervalls festlegen
- Alle Zeilen zählen, die innerhalb des Startzeitpunkts + Intervalllänge liegen
- Startzeitpunkt des neuen Intervalls wieder um die Intervalllänge vorverlegen
Die technische Umsetzung mittels Ruby ist dann ziemlich einfach, erwähnenswert
ist jedoch die Verwendung von ARGF.
Dadurch kann das Logfile als Kommandozeilenargument oder per STDIN übergeben
werden, was die Vorfilterung mittels grep
oder anderen Shell-Utilities
erlaubt.
Für die Auswertung haben wir das gnuplot
-Gem verwendet, es wird ein einfaches
Histogramm erzeugt, bei dem die Zeiten auf der Abszisse und die Anzahl der
Requests auf der Ordinate aufgetragen sind.
Der Quellcode ist auch auf Github verfügbar!