Apache HTTP Server/Protokollierung: Unterschied zwischen den Versionen

Aus Mikiwiki
Wechseln zu: Navigation, Suche
 
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
Eine Auswertung der Logdateien des Apache HTTP Server kann mit Programmen zur [[Logdateianalyse]] durchgeführt werden.
+
Eine Auswertung der [[Protokolldateien]] des Apache HTTP Server kann mit Programmen zur [[Protokolldateiauswertung]] durchgeführt werden.
  
 
== Konfiguration ==
 
== Konfiguration ==
  
Zu den wichtigsten Einstellungen bezüglich des Logging des Apache HTTP Server gehören die folgenden.
+
Zu den wichtigsten Einstellungen bezüglich der Protokollierung des Apache HTTP Server gehören die folgenden.
  
 
{| class=wiki width=100%
 
{| class=wiki width=100%
 
! Parameter !! Beschreibung
 
! Parameter !! Beschreibung
 
|-
 
|-
| <tt>CustomLog</tt> || Ort und Typ der Logdatei. Beispielsweise erzeugt der folgende Eintrag die Logdatei "access_log" im "Common Log Format / CLF" (das beim Parameter "LogFormat" beschrieben wurde), was für die meisten Anwendungen ausreicht.
+
| <tt>CustomLog</tt> || Ort und Typ der Protokolldatei. Beispielsweise erzeugt der folgende Eintrag die Protokolldatei "access_log" im "Common Log Format / CLF" (das beim Parameter "LogFormat" beschrieben wurde), was für die meisten Anwendungen ausreicht.
  
 
  CustomLog "/var/log/httpd/access_log" common
 
  CustomLog "/var/log/httpd/access_log" common
  
Ein Eintrag in dieser Logdatei sieht dann folgendermassen aus.
+
Ein Eintrag in dieser Protokolldatei sieht dann folgendermassen aus.
  
 
  127.0.0.1 - - [22/Mar/2009:00:42:01 +0100] "GET / HTTP/1.1" 200 1456
 
  127.0.0.1 - - [22/Mar/2009:00:42:01 +0100] "GET / HTTP/1.1" 200 1456
Zeile 20: Zeile 20:
 
| <tt>ErrorLog</tt> || Ort des Protokolls von Zugriffsfehlern (z. B. "/var/log/httpd/error.log").
 
| <tt>ErrorLog</tt> || Ort des Protokolls von Zugriffsfehlern (z. B. "/var/log/httpd/error.log").
 
|-
 
|-
| <tt>HostnameLookups</tt> || Der Wert "Off" schaltet die Auflösung von IP-Adressen in Rechner- und Domainnamen aus, da dies im Betrieb nur Ressourcen frisst. Zwar vermerkt die Logdatei damit bei den Zugriffen nur die IP-Adresse, jedoch kann auch jedes bessere Logdateianalyseprogramm die Namensauflösung übernehmen.
+
| <tt>HostnameLookups</tt> || Der Wert "Off" schaltet die Auflösung von IP-Adressen in Rechner- und Domainnamen aus, da dies im Betrieb nur Ressourcen frisst. Zwar vermerkt die Protokolldatei damit bei den Zugriffen nur die IP-Adresse, jedoch kann auch jedes bessere Protokolldateianalyseprogramm die Namensauflösung übernehmen.
 
|-
 
|-
| <tt>LogFormat</tt> || Format der Logdateien. Mögliche Optionen sind die folgenden.
+
| <tt>LogFormat</tt> || Format der Protokolldateien. Mögliche Optionen sind die folgenden.
  
 
{| class=wiki
 
{| class=wiki
Zeile 44: Zeile 44:
 
|}
 
|}
  
Der letzte Eintrag in der Zeile gibt den Typ der Logdatei an ("common" oder "combined"), in der die Protokolldaten landen. Der Ort der Logdatei wird über den Parameter "LogCustom" konfiguriert. Mögliche Formate der Logdateien sind beispielsweise die folgenden:
+
Der letzte Eintrag in der Zeile gibt den Typ der Protokolldatei an ("common" oder "combined"), in der die Protokolldaten landen. Der Ort der Protokolldatei wird über den Parameter "LogCustom" konfiguriert. Mögliche Formate der Protokolldateien sind beispielsweise die folgenden:
  
 
  LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
 
  LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
Zeile 58: Zeile 58:
 
Um festzustellen, welche Seiten abgefragt wurden, wird die GET-Zeichenkette aus der Datei "/var/log/apache2/access_log" herausgelöst.
 
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.
+
Eine externe Logauswertung erfolgt mit folgendem Skript: Der Aufruf von "cat" liest zunächst die Protokolldatei 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
 
  #!/bin/bash
Zeile 68: Zeile 68:
 
   done
 
   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.
+
Eine interne Protokolldateiauswertung erfolgt mit folgendem, wesentlich schnellerem Skript. Es öffnet die Protokolldatei ü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
 
  #!/bin/bash
Zeile 80: Zeile 80:
  
 
{{cat|Apache HTTP Server}}
 
{{cat|Apache HTTP Server}}
{{cat|Logdateianalyse}}
+
{{cat|Protokolldateiauswertung}}
{{cat|Logging}}
+
{{cat|Protokollierung}}

Aktuelle Version vom 6. August 2011, 19:28 Uhr

Eine Auswertung der Protokolldateien des Apache HTTP Server kann mit Programmen zur Protokolldateiauswertung durchgeführt werden.

Konfiguration

Zu den wichtigsten Einstellungen bezüglich der Protokollierung des Apache HTTP Server gehören die folgenden.

Parameter Beschreibung
CustomLog Ort und Typ der Protokolldatei. Beispielsweise erzeugt der folgende Eintrag die Protokolldatei "access_log" im "Common Log Format / CLF" (das beim Parameter "LogFormat" beschrieben wurde), was für die meisten Anwendungen ausreicht.
CustomLog "/var/log/httpd/access_log" common

Ein Eintrag in dieser Protokolldatei sieht dann folgendermassen aus.

127.0.0.1 - - [22/Mar/2009:00:42:01 +0100] "GET / HTTP/1.1" 200 1456

Um mehr anzuzeigen, kann anstelle von "common" das ebenfalls beim Parameter "LogFormat" beschriebene Format "combined" verwendet werden. Es ist auch möglich, für eine Datei mehr als ein Format gleichzeitig anzugeben, beispielsweise wenn die Referer oder Webbrowsertypen einzeln ausgewertet werden sollen.

ErrorLog Ort des Protokolls von Zugriffsfehlern (z. B. "/var/log/httpd/error.log").
HostnameLookups Der Wert "Off" schaltet die Auflösung von IP-Adressen in Rechner- und Domainnamen aus, da dies im Betrieb nur Ressourcen frisst. Zwar vermerkt die Protokolldatei damit bei den Zugriffen nur die IP-Adresse, jedoch kann auch jedes bessere Protokolldateianalyseprogramm die Namensauflösung übernehmen.
LogFormat Format der Protokolldateien. Mögliche Optionen sind die folgenden.
Option Beschreibung
%h (hots) Der zugreifende Rechner.
%l Benutzername, soweit dieser übermittelt wird.
%u (user) Benutzername, soweit dieser übermittelt wird.
%r (request) Anfrage des Webbrowsers an den Webserver.
%>s (status) Status der letzten Anfrage innerhalb der Sitzung.
%b (byte) Anzahl der gesendeten Byte.
%{Referer}i Herkunft des Zugriffs.
%{User-Agent}i Art des zugreifenden Webbrowsers.

Der letzte Eintrag in der Zeile gibt den Typ der Protokolldatei an ("common" oder "combined"), in der die Protokolldaten landen. Der Ort der Protokolldatei wird über den Parameter "LogCustom" konfiguriert. Mögliche Formate der Protokolldateien sind beispielsweise die folgenden:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogLevel Menge der zu protokollierenden Daten. Mögliche Einstellungen sind:
  • "warn" ist üblicherweise völlig ausreichend.
  • "debug" liefert sehr viele Informationen.

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 Protokolldatei 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 Protokolldateiauswertung erfolgt mit folgendem, wesentlich schnellerem Skript. Es öffnet die Protokolldatei ü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