Graphische Auswertung der Requests aus dem Apache-Log

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.

Plot

Der Quellcode ist auch auf Github verfügbar!