Logfiles auswerten mit Ruby

Eine prima Sprache zum Auswerten von Logfiles ist Ruby. Dieser Beitrag zeigt, wie es geht und wie Sie dazu in Ruby Hashes einsetzen. Als Beispiel dient ein vom Apache-Server erzeugtes Standard-Logfile. Das Skript soll Referer jeweils von Google, Yahoo und MSN sowie die Zugriffe der entsprechenden Bots zählen. Als Eingabeparameter erwartet das Pro gramm ein Datum im Format 30/Dec. Zunächst öffnen Sie das Logfile für den Lesezugriff und schreiben den Eingabeparameter in die Variable logdate:

aFile = File.new(“access_w.log”, “r”)

logdate = ARGV[0] or raise “Fehlendes ArgumentnBeispiel: #{$0} 28/Dec”

Damit das Datum ausgewertet werden kann, verwandeln Sie die Variable in ein Objekt vom Typ Regexp. Danach füllen Sie einen Hash mit weiteren Regulären Ausdrücken. Die sollen später die gewünschten Einträge aus dem Logfile filtern. Als Schlüssel im Hash dienen die Bezeichnungen, unter de nen das Skript später die Ergebnisse zeigt:

logdate = Regexp.new(logdate)

patterns = {

“Googlebot” => /Googlebot/,

“MSNBot” => /msnbot/,

“Yahoo Slurp” => /Slurp/,

“Google Referer” => /google.(de|com)/search/,

“MSN Referer” => /search.msn.(de|com)/results.aspx/,

“Yahoo Referer” => /yahoo.(de|com)/search/

}

Um die Ergebnisse zu zählen, brauchen Sie noch einen weiteren Hash. Den initialisieren Sie zunächst und füllen ihn dann:

counter = {}

patterns.each_key {|name|

counter[name] = 0

}

Mit each_key holen Sie aus patterns einen Schlüssel nach dem anderen und weisen ihn izu. Ähnlich funktioniert das mit dem Auslesen der Datei.

Hier weisen Sie jede mit each_line ausgelesene Zeile der Variablen line zu.

Danach prüft das Skript, ob das Datum in der Zeile steht und arbeitet sich – falls das Datum stimmt – durch das Pattern-Hash. Für jeden Treffer wird der Counter um 1 erhöht:

aFile.each_line { |line|

if line =~ logdate

patterns.each { |name, regex|

if line =~ regex

counter[name] += 1

end

}

end

}

Um die Ergebnisse auszugeben, bearbeiten Sie patterns: Zunächst werden die Schlüssel (keys) sortiert und dann nacheinander mit each in name übernommen. Die Schleife druckt dann die Daten aus:

patterns.keys.sort.each { |name|

print name, “: “, counter[name], “n”

}

Ruby One Click Installer

Um Ruby-Programme unter Windows zu schreiben, verwenden Sie am besten den Ruby One-Click Installer. Das rund 15 MByte grosse Paket bringt den Ruby-Interpreter und eine komplette Ruby-IDE mit. Außerdem enthält er das Buch “Programming Ruby: The Pragmatic Programmer’s Guide” als Datei.

Hier finden Sie den Installer : http://rubyforge.org/frs/download.php/4174/ruby182-15.exe

Freeride für Windows nutzen

Damit Sie von der im One-Click-Installer enthaltenen Ruby IDE Freeride Ruby- Programme starten können, müssen Sie eine Option einschalten: Unter Edit – Preferences – Debugger/Run schalten Sie die Option Run Process in Terminal ein. Dann werden Skripte per Knopfdruck auf F5 in einem Windows-Kommandozeilenfenster gestartet.

Ähnliche Beiträge

    None Found