Apache HTTP Server/Protokollierung: Unterschied zwischen den Versionen
Michi (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „== Auswertung der Datei "access_log" == Um festzustellen, welche Seiten abgefragt wurden, wird die GET-Zeichenkette aus der Datei "/var/log/apache2/access_log" h...“) |
Michi (Diskussion | Beiträge) K (hat "Apache HTTP Server/Analyse der Logdateien" nach "Apache HTTP Server/Logdateien" verschoben) |
(kein Unterschied)
|
Version vom 6. August 2009, 08:06 Uhr
Auswertung der Datei "access_log"
Um festzustellen, welche Seiten abgefragt wurden, wird die GET-Zeichenkette aus der Datei "/var/log/apache2/access_log" herausgelöst.
Eine externe Logauswertung erfolgt mit folgendem Skript: Der Aufruf von "cat" liest zunächst die Logdatei vollständig ein und übergibt sie der for-Schleife als Parameterliste - die Bash muss den gesamten Dateiinhalt also erst mal zwischenspeichern. Anschliessend wird für jeden Logeintrag "cut" als externes Programm aufgerufen.
#!/bin/bash IFS=$'\n' for l in $(cat access_log) do IFS=" " echo "${l} " | cut -d" " -f7 done
Eine interne Logauswertung erfolgt mit folgendem, wesentlich schnellerem Skript. Es öffnet die Logdatei über den Dateideskriptor 3 und liest in der while-Schleife jeweils eine zeile in die Variable "Anfrage" - die Bash braucht also stets nur einen Logeintrag zwischenzuspeichern. Anschliessend werden vom Zeilenanfang bis einschliesslich "GET " und vom Ende alle Zeichen bis einschliesslich " HTTP/" entfernt.
#!/bin/bash exec 3<access_log while read -u 3 Anfrage do Anfrage="${Anfrage##*GET }" echo "${Anfrage%% HTTP/*}" done