Apache HTTP Server/Protokollierung: Unterschied zwischen den Versionen
Michi (Diskussion | Beiträge) K (hat "Apache HTTP Server/Logdateien" nach "Apache HTTP Server/Logging" verschoben) |
Michi (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 1: | Zeile 1: | ||
== Konfiguration == | |||
Zu den wichtigsten Einstellungen bezüglich des Logging des Apache HTTP Server gehören die folgenden. | |||
{| class=wiki | |||
! Parameter !! Beschreibung | |||
|- | |||
| <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>ErrorLog</tt> || Ort des Protokolls von Zugriffsfehlern (z. B. "/var/log/httpd/error.log"). | |||
|- | |||
| <tt>LogLevel</tt> || Menge der zu protokollierenden Daten. Mögliche Einstellungen sind: | |||
* "warn" ist üblicherweise völlig ausreichend. | |||
* "debug" liefert sehr viele Informationen. | |||
|- | |||
| <tt>LogFormat</tt> || Format der Logdateien. Mögliche Optionen sind die folgenden. | |||
{| class=wiki | |||
! Option !! Beschreibung | |||
|- | |||
| <tt>%h</tt> || (hots) Der zugreifende Rechner. | |||
|- | |||
| <tt>%l</tt> || Benutzername, soweit dieser übermittelt wird. | |||
|- | |||
| <tt>%u</tt> || (user) Benutzername, soweit dieser übermittelt wird. | |||
|- | |||
| <tt>%r</tt> || (request) Anfrage des Webbrowsers an den Webserver. | |||
|- | |||
| <tt>%>s</tt> || (status) Status der letzten Anfrage innerhalb der Sitzung. | |||
|- | |||
| <tt>%b</tt> || (bytes) Anzahl der gesendeten Bytes. | |||
|- | |||
| <tt>%{Referer}i</tt> || Herkunft des Zugriffs. | |||
|- | |||
| <tt>%{User-Agent}i</tt> || Art des zugreifenden Webbrowsers. | |||
|} | |||
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: | |||
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined | |||
LogFormat "%h %l %u %t \"%r\" %>s %b" common | |||
|- | |||
| <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. | |||
CustomLog "/var/log/httpd/access_log" common | |||
Ein Eintrag in dieser Logdatei 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. | |||
|} | |||
== Auswertung der Datei "access_log" == | == Auswertung der Datei "access_log" == | ||
Zeile 26: | Zeile 79: | ||
{{cat|Apache HTTP Server}} | {{cat|Apache HTTP Server}} | ||
{{cat|Logdateianalyse}} | {{cat|Logdateianalyse}} | ||
{{cat|Logging}} |
Version vom 6. August 2009, 08:38 Uhr
Konfiguration
Zu den wichtigsten Einstellungen bezüglich des Logging des Apache HTTP Server gehören die folgenden.
Parameter | Beschreibung | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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 Logdatei damit bei den Zugriffen nur die IP-Adresse, jedoch kann auch jedes bessere Logdateianalyseprogramm die Namensauflösung übernehmen. | ||||||||||||||||||
ErrorLog | Ort des Protokolls von Zugriffsfehlern (z. B. "/var/log/httpd/error.log"). | ||||||||||||||||||
LogLevel | Menge der zu protokollierenden Daten. Mögliche Einstellungen sind:
| ||||||||||||||||||
LogFormat | Format der Logdateien. Mögliche Optionen sind die folgenden.
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: LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common | ||||||||||||||||||
CustomLog | 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.
CustomLog "/var/log/httpd/access_log" common Ein Eintrag in dieser Logdatei 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. |
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