loganalyzer selber proggn

C

C:S

Foren As
Moin,
ich will mir zwecks der Übung ein Loganalyzer tool selbst schreiben. Bin gerade am überlegen wie ich vorgehen soll, und würde gerne wissen was ihr davon haltet.

Ich würde es so machen, dass das Tool die logfiles durchgeht (z.B. apache error log), und dann jedes Feld in eine Datenbank schreibt. Im Falle Apache würde ich dann IP, Fehlergrund, Useragent usw speichern. Später kann ich dann die Werte aus der Datenbank lesen und auswerten, je nachdem wie ichs grad brauch (html, text und so).

Mir is klar dass das auf Dauer riesen Tabellen werden, aber auf Performance kommts ja auf erster Linie nicht an.

Meint ihr das haut so hin? Oder habt ihr bessere Ideen?
Gruß, CS
 
Mit welcher Sprache willst Du das denn bauen?
 
Hmm, das weiß ich noch nicht so genau, python oder c++, vll auch java. Mir gehts erstmal um die Struktur, und dann schau ich, welche Sprache sich so anbietet (wie gesagt, ich will hauptsächlich was bei lernen). Hab halt ziemlich viel Erfahrung im Webbereich, aber so mir "richtigen" Programmen habe ich noch nie soo viel zu tun gehabt.
 
Ich kann dir aus Erfahrung sagen, dass es mit SQL-Datenbanken jedenfalls nichts wird. Pro 4-5 Millionen Logeinträge brauchst du zum Parsen ca. 12-18 Stunden auf einem 2GHz-Rechner mit 2GB RAM. Daher... implementiere von Anfang an FAM in dein Tool, so dass sofort reagiert wird, wenn ein neuer Eintrag geschrieben wird und parse nicht via Cron o.ä. Mache also einen Daemon draus, der via FAM o.ä. dauerhaft die Logdateien überwacht und jeden Eintrag sofort auswertet. Solltest du statistische Berechnungen anstellen müssen, rechne mit jedem einzelnen Eintrag. Je mehr Einträge abgearbeitet werden müssen, umso länger dauert es. Ansonsten spar dir das Lesen und Schreiben von Werten aus dem Log in eine DB, sondern schreibe dein Tool lieber so, dass es die Logdatei wie eine DB handhabt (quasi die Log-Datei als Text-DB verwenden).

Gerade bei Apache solltest du ausserdem drauf achten, dass du irgendwoher (z.B. aus der Konfiguration) das Log-Format ausliest, so dass dein Tool auch bei Änderungen des Log-Formats noch funktioniert.

Bei den von dir genannten Sprachen würde ich Python bevorzugen, da es das schnellste und komfortabelste String-Handling von den drei hat. Ansonsten würde ich klar zu Perl raten. Nix geht über schnelle Perl-Regexen. ;)
 
okay, klingt schomal gut. Also sollte ich mir schonmal vorher gedanken machen welche Statistiken ich genau will, um diese dann immer gleich zu aktualisieren. Wobei ich dazu parallel ja die Sätze in die Datenbank einpfelegen kann, schadet ja nix. Vll ließe sich fürs Parsen auch was mit Indexen anfangen? Oder ich unterscheide die verschiedenen errors nochmal und hau die in verschiedene Tabellen, dadurch wirds auch schonmal überschaubarer.

Das mit FAM ist ne gute Idee, da habe ich gar nicht dran gedacht (sondern an cron ;-))

Wegen der Sprache, ich tendiere ja grad mehr zu java, gibts da konkret Gründe die dagegen sprechen?
Gruß CS
 
Wenn du wirklich sauber Java codest, gibt's eigentlich nicht's, was dagegen spricht. Wichtig ist halt, dass du den Garbage-Collector ordentlich ausnutzt, damit der RAM-Verbrauch nicht zu hoch wird. Ich persönlich versuche ja Java immer zu vermeiden, wenn es um's String-Handling geht, aber das ist wohl eher Geschmackssache. ;)
 
Hi,

Wegen der Sprache, ich tendiere ja grad mehr zu java, gibts da konkret Gründe die dagegen sprechen?

jain, so etwas laesst sich prinzipiell natuerlich auch mit Java machen. Aber ich vertrete genau die gleiche Meinung wie bitmuncher, von den drei genannten Sprachen wuerde ich Python nehmen, und wenn ich die freie Wahl haette, wuerde es Perl werden.
Im Allgemeinen mag ich Python viel lieber als Perl, aber Perl wurde genau fuer solche Zwecke entworfen und ist entsprechend gut in dem Bereich.

Java dagegen ist vergleichsweise streng und ausfuehrlich, was in diesem Fall wohl eher hinderlich ist. Du wirst in Java mindestens das doppelte (vermutlich mehr) an Code brauchen als in Python oder Perl.

mfg,
bytepool
 
okay, also langsam fangt ihr an mich zu überzeugen^^ naja, perl hab ich zwar noch nix gemacht, aber so schwer kanns ja net sein :brav:
 
also ich muss sagen, das ich gegen viele meinungen ein freund von java bin und auch gerne da projekte abwickle. Allerdings den verwendungszweck den du verfolgst, würde ich auch perl vorschlagen. Die arbeit mit zeichenketten ist perl sehr sehr schnell und auch sehr knapp gehalten. Vorallem kann es gut sein, das es schon libs oder ähnliches genau für diesen zweck, bei perl schon dabei sind oder sich installieren lassen.

greetz
 
ja, okay, also dann werd ichs wohl mir perl machen. Hat sich auf jeden Fall schomal gelohnt euch zu Fragen ;-)
Wenn jemand noch weitere Ideen hat, bitte posten :))
Gruß, CS
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

Woh, also bin beeindrukt, die Stringsachen gehen mit perl ja wirklich wie Butter...
 
Zuletzt bearbeitet:
ok, bevor ich nen neuen Thread auf mache, wie wandel ichn in perl die Zeit ausm apache log (hh:mm:ss) in nen unixtimestamp um? soll ja iwie mit localtime gehen, aber google spuckt nix aus...
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

ah, okay, habs jetzt doch rausgefunden (um das Selbstgespräch perfekt zu machen...)
 
Zuletzt bearbeitet:
Dafür setzt man am Besten das Module Time::Local ein und verwendet die Funktion timelocal().

Code:
$time = timelocal($sec,$min,$hours,$mday,$mon,$year);
 

Ähnliche Themen

Server-Monitoring mit RRDTool

Zurück
Oben