demokrit
Goto Top

Administrative Auswertung der Apache Logs

Auswertung von verbrauchter Zeit zur Auslieferung von Dateien, Erkennen von ungewöhnlichen Zugriffen, etc...

Bevor ich jetzt selber anfange was zu basteln, frag ich mal in die Runde:

Ich suche eigentlich eine Software, die mir aus den Apache-Logs für jeden Tag eine Übersicht generiert, welche Dateien wieviel Zeit im Durchschnitt zur Auslieferung verbraucht haben (in Kombination mit min/max-Werten und der Dateigröße). Ebenso wie eine Übersicht, auf welche Dateien über welchen Domainnamen am häufigsten zugegriffen wurde. Auch eine Länderübersicht der Zugriffe wäre praktisch, um Zugriffe z.B. aus Russland schnell erkennen zu können.

Gängige Tools wie awstats, etc... liefern diese Informationen leider nicht. Unique Visitor, etc... interessiert mich an dieser Stelle eher sekundär.

Oder hat jemand zufällig schon ein fertiges Skript, welches die Apachelogs in eine Datenbank überträgt?


Als setup schwebt mir z.B. folgendes vor:
Ein Skript holt in regelmäßigen Abständen (z.B. jede Stunde) vom Webserver die aktuellen apache logs und schreibt diese in eine Postgres-Datenbank (oder MySQL). Sobald ich die Daten in der DB habe, kann ich dann beliebige Auswertungen darüber fahren, auch in Verbindung mit einer zweiten GeoIP-Datenbank.


Danke und viele Grüße,
Kai

Content-ID: 174835

Url: https://administrator.de/contentid/174835

Ausgedruckt am: 23.11.2024 um 01:11 Uhr

Midivirus
Midivirus 08.11.2011 um 15:40:12 Uhr
Goto Top
Stichwort webalizer?
demokrit
demokrit 09.11.2011 um 08:19:18 Uhr
Goto Top
Ich hab jetzt nicht im Detail geschaut, aber der scheint ähnlich wie awstats auch eher auf Klickraten und ähnliches ausgelegt zu sein.

Es geht mir eher darum, herauszufinden, welche URLs brauchen im Mittel hohe Bandbreiten und im Vergleich dazu hohe Auslieferungszeiten.
Aus der kombinierten Analyse zwischen Bandbreite und Auslieferungszeit kann man z.B. Rückschlüsse auf die CPU-Belastung beim Aufruf ziehen. Das sind dann die Stellen, wo ich mal gezielt in den Code schaue und ggfs. diesen dem Programmierer um die Ohren haue ;)

Ich schreibe jetzt nächtlich die Logfiles in eine Postgresdatenbank und mach bei der Gelegenheit auch direkt noch ein Geotagging anhand der IP-Adresse. Über SQL-Abfragen kann ich darüber jetzt beliebige Auswertungen fahren.
Ist nur für Langzeitanalysen nicht so tauglich, da die Datenbank pro Tag ca. ein GB wächst ;)
Midivirus
Midivirus 09.11.2011 um 09:30:38 Uhr
Goto Top
Wir wäre es denn, wenn du eine Aufbauzeit mit in die Webseite mit einbaust und diese in das Logging nimmst?

So kann bsp bewertet werden, dass Benutzer X mit genau DIESER seite, incl. aller Parameter, ziemlich genau x Millisekunden benötigt hat!

und ich pers. weiß nicht, ob ein Apache überhaupt die Auslieferungszeit ins Logschreibt bzw. es dafür einen Parameter im Format der Datei gibt.

Denn hier sehe ich bsp keine Zeit
66.160.179.197 - - [09/Nov/2011:08:15:30 +0100] "GET /phpMyAdmin/scripts/setup.php HTTP/1.1" 302 338 "-" "ZmEu"


Bis dahin,
viel Erfolg!

Midi
demokrit
demokrit 09.11.2011 um 09:47:34 Uhr
Goto Top
Ich nutze Apache2 mit einer indivduellen Logkonfiguration:

LogFormat "%v %h %l %u %t \"%r\" %>s %B %D \"%{Referer}i\" \"%{User-agent}i\" \"%q\""

%D ist in diesem Fall die vom Apache zur Auslieferung benötigte Zeit in Microsekunden.
D.h. der Log sieht folgendermaßen aus:

www.xxx.de 138.246.2.xxx - - [09/Nov/2011:00:00:21 +0100] "GET / HTTP/1.1" 200 12518 561848 "http://www.google.de/url?sa=t&rct=j&q=4flow%20gehalt&source=web&cd=7&ved=0CE8QFjAG&url=http%3A%2F%2Fwww.xxx.de%2F&ei=MbS5TprvOo_ItAbp2K25Bg&usg=AFQjCNHmtRP1LsDw7WvA_JoWx0zjoyMXww&sig2=P6KP8XkUmNtsRaUooVxzMQ&cad=rja" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.106 Safari/535.2" ""

Die Auslieferung der Startseite hat also 561848 Microsekunden, sprich eine halbe Sekunde gedauert.
Midivirus
Midivirus 09.11.2011 um 10:26:06 Uhr
Goto Top
Nun,
durch eine Recherche mit diversen Suchworten kam für mich die Erkenntnis:
Apache kann eine Menge mehr, als der Standard verwendet. Aber Tools, die über den Standard hinausgehen, hab ich jetzt keine groß gefunden.
Aber: habe mich auch nur mit webalizer bzw. astats beschäftigt.

Midi
demokrit
demokrit 09.11.2011 um 10:43:21 Uhr
Goto Top
Meine Rede^^
Daher erstmal der Workaround mit der Eigenentwicklung. Das Frontend wird dann irgendwann mal die Aufgabe für meinen Azubi ;)
Midivirus
Midivirus 09.11.2011 um 10:48:32 Uhr
Goto Top
Womit machen wir es zu?
demokrit
demokrit 09.11.2011 um 10:59:19 Uhr
Goto Top
ist schon zugemacht. Aktuelle Lösung: Eigenentwicklung. Wenn jemand Bedarf hat, schicke ich gerne die Skripte.
Midivirus
Midivirus 09.11.2011 um 11:08:38 Uhr
Goto Top
war einfach nicht auf dem neusten Stand und ist mir später auch aufgefallen ;)
16568
16568 10.11.2011 um 09:30:25 Uhr
Goto Top
Es gibt ja auch die Möglichkeit, GLEICH/DIREKT in die DB zu loggen...


Lonesome Walker
Midivirus
Midivirus 10.11.2011 um 09:43:18 Uhr
Goto Top
Kollege ;)
demokrit
demokrit 10.11.2011 um 10:03:33 Uhr
Goto Top
Klar gibt es die.

Aber ich schreibe die Apache-Logs aus Performance-Gründen schon in eine Ramdisk. Da würde das Loggen direkt in die DB allen Performance-Optimierungen zuwider laufen. Das ist weder sonderlich performant, noch besonders ausgereift.
16568
16568 10.11.2011 um 13:24:09 Uhr
Goto Top
Man kann auch eine DB in einer RAM-Disk laufen lassen...

Lonesome Walker
demokrit
demokrit 10.11.2011 um 14:47:38 Uhr
Goto Top
Das ist richtig, aber deswegen ist das Logging in eine DB trotzdem langsamer als in eine Textdatei.
Zudem müsste man auch da eine Rotation in eine weitere DB basteln, da man bei 1GB Logs pro Tag schon eine verdammt große Ramdisk braucht, wenn man den Server länger betreiben möchte.