Apache HTTP Server/Protokollierung

Aus Mikiwiki
< Apache HTTP Server
Version vom 6. August 2009, 10:04 Uhr von 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...“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

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