Andü: Apache Log auslesen und in MySQL reinschieben

Hallo.

Ich hab mir mit PHP und MySQL einen schönen Log Analyser geschrieben, der mit aus ner DB alle Daten raussucht, sodass ich nicht immer per cronjob die logs 1mal am Tag einlesen und dann neue Stats erstellen muss.
Nun würde ich ganz gern noch ein Perl-Skript laufen lassen, was sich per TAIL an die aktuelle Log-Datei ranklemmt und immer die letzten Änderungen mitließt, parsed und in meine DB anfügt.
Leider hab ich weder von Linux noch von Perl sonderlich viel Ahnung, weshalb ich gern wenigstens ein Grundgerüst für das Perl-Skript bekommen könnte, dann werde ich mich schon reinwurschteln.

Gut, man könnte nun die berechtigte Frage stellen, warum ich dann unbedingt Perl will... Ich hab mir die das so vorgestellt, dass das Perl-Skript als einzelner Prozess läuft und somit nicht unterbrochen wird, was ja bei PHP nach gewisser Zeit eintreten wird.

Hoffe es ist einer so freundlich und kann mir irgendwas kleines bereitstellen...

Gruß, Andü

  1. hallo,

    Ich hab mir mit PHP und MySQL einen schönen Log Analyser geschrieben

    Dan würde ich mir gerne anschauen ;-)

    , der mit aus ner DB alle Daten raussucht, sodass ich nicht immer per cronjob die logs 1mal am Tag einlesen und dann neue Stats erstellen muss.

    Leider hab ich weder von Linux noch von Perl sonderlich viel Ahnung

    Da ist nichts anderes zu machen, als daß du dir eben "Ahnung" zulegen mußt. Wenn du das mit PHP schon auf befriedigende Art hingekriegt hast, wirst du es mit Perl auch schaffen - die Grundprinzipien sind schließlich dieselben, nur lauten die unmittelbaren Befehle an einigen Stellen deutlich anders.

    Grüße aus Berlin

    Christoph S.

    --
    Visitenkarte
    ss:| zu:) ls:& fo:) va:) sh:| rl:|
    1. Hallo nochmal.

      Dan würde ich mir gerne anschauen ;-)

      , der mit aus ner DB alle Daten raussucht, sodass ich nicht immer per cronjob die logs 1mal am Tag einlesen und dann neue Stats erstellen muss.

      Ich weiß nicht genau worauf du genau hinaus willst, aber ich geh einfach mal davon aus, dass du etwas an der Performance eines solchen Projektes zweifelst. Richtig?
      Nunja, ich habe es im Moment testweise mit ca. 350000 Datensätzen (2 Jahren) laufen und die Abfragen dauern im Schnitt 4 Sekunden. Das ist eine Zeit mit der ich durchaus leben kann, wobei die Tabelle für die Daten einfach jede Zeile der Logdatei in atomare Werte teilt und diese in entsprechende Spalten aufteilt. Da lässt sich sicher noch einiges optimieren aber soweit bin ich noch nicht.
      Das mit dem cronjob spare ich mir halt dadurch, dass der jeder Änderung live bemerkt und in die DB einfügt (Thema tail).

      Da ist nichts anderes zu machen, als daß du dir eben "Ahnung" zulegen mußt. Wenn du das mit PHP schon auf befriedigende Art hingekriegt hast, wirst du es mit Perl auch schaffen - die Grundprinzipien sind schließlich dieselben, nur lauten die unmittelbaren Befehle an einigen Stellen deutlich anders.

      Sicher sind die Grundprinzipien gleich. Deshalb sagt ich ja, dass ich mich selbst reinfinden werde. Aber mit einem kleinem Anfang ist das sehr viel leichter und schöner als von Grund auf selbst alles zu entwerfen. ;)

      Wie dem auch sei... Ist an dem Grundkonzept erstmal was zu bemängeln, was mir nicht aufgefallen ist? Der große Pluspunkt ist einfach, dass ich die Abfragen nur ausführe wenn ich sie auch wirklich sehen will (bei cronjob wird auf "Verdacht" erstellt) und dass ich alle Zugriffe nahezu live mitverfolgen kann. Über den Sinn und Zweg kann man sicher streiten...

      Gruß, Andü

      1. hallo,

        Ist an dem Grundkonzept erstmal was zu bemängeln, was mir nicht aufgefallen ist?

        Das weiß ich nicht, da ich deinen Scriptcode nicht kenne.

        Grüße aus Berlin

        Christoph S.

        --
        Visitenkarte
        ss:| zu:) ls:& fo:) va:) sh:| rl:|
        1. Das weiß ich nicht, da ich deinen Scriptcode nicht kenne.

          Ich hab das Grundkonzept gemeint - sprich ob das technisch überhaupt gehen KANN. Aber egal...

          Gruß, Andü

  2. Hallo,

    Nun würde ich ganz gern noch ein Perl-Skript laufen lassen, was sich per TAIL an die aktuelle Log-Datei ranklemmt und immer die letzten Änderungen mitließt, parsed und in meine DB anfügt.

    Gemäß der Dokumentation von Mod_log ist es möglich die Log-EInträge an ein Script weiterzuleiten. Das kann durchaus auch ein Perl-Script Sein, welches dann die Daten in eine Datenbank schreibt.

    Ausserdem könnten Dir das entsprechende Kapitel in den perlfaq interessieren, falls obiges für Dich nicht in Frage kommt.

    Grüße
      Klaus