Protokolldateien

Zugriffsprotokoll

Das Serverzugriffsprotokoll zeichnet alle vom Server verarbeiteten Anforderungen auf. Der Speicherort und der Inhalt des Zugriffsprotokolls werden durch die CustomLog Direktive gesteuert. DieLogFormat Direktive kann verwendet werden, um die Auswahl des Inhalts der Protokolle zu vereinfachen. In diesem Abschnitt wird beschrieben, wie der Server für die Aufzeichnung von Informationen im Zugriffsprotokoll konfiguriert wird.

Das Speichern der Informationen im Zugriffsprotokoll ist natürlich nur der Beginn der Protokollverwaltung., Der nächste Schritt besteht darin, diese Informationen zu analysieren, um nützliche Statistiken zu erstellen. Die Protokollanalyse geht im Allgemeinen über den Rahmen dieses Dokuments hinaus und ist nicht wirklich Teil der Aufgabe des Webservers selbst. Weitere Informationen zu diesem Thema und zu Anwendungen, die eine Protokollanalyse durchführen, finden Sie im geöffneten Verzeichnis.

Verschiedene Versionen von Apache httpd haben andere Module und Direktiven verwendet, um die Zugriffsprotokollierung zu steuern, einschließlich mod_log_referer, mod_log_agent und derTransferLog Direktive., DieCustomLog Direktive subsumiert nun die Funktionalität aller älteren Direktiven.

Das Format des Zugriffsprotokolls ist hochgradig konfigurierbar. Das Format wird mit einer Formatzeichenfolge angegeben, die einer printf(1)-Formatzeichenfolge im C-Stil ähnelt. Einige Beispiele werden in den nächsten Abschnitten vorgestellt. Eine vollständige Liste der möglichen Inhalte der Formatzeichenfolge finden Sie unter mod_log_config Formatzeichenfolgen.

Allgemeines Protokollformat

Eine typische Konfiguration für das Zugriffsprotokoll könnte wie folgt aussehen.,

LogFormat "%h %l %u %t \"%r\" %>s %b" commonCustomLog logs/access_log common

Dies definiert den Spitznamen common und ordnet ihn einer bestimmten Protokollformatzeichenfolge zu. Die Formatzeichenfolge besteht aus Prozentanweisungen, von denen jede den Server anweisen, eine bestimmte Information zu protokollieren. Literalzeichen können auch in die Formatzeichenfolge eingefügt und direkt in die Protokollausgabe kopiert werden. Das Anführungszeichen (") muss maskiert werden, indem ein Backslash davor platziert wird, um zu verhindern, dass es als Ende der Formatzeichenfolge interpretiert wird., Die Formatzeichenfolge kann auch die Sondersteuerzeichen „\n“ für new-line und „\t“ für tab enthalten.

DieCustomLog – Direktive richtet eine neue Protokolldatei mit dem definierten Spitznamen ein. Der Dateiname für das Zugriffsprotokoll ist relativ zur ServerRoot, es sei denn, er beginnt mit einem Schrägstrich.

Die obige Konfiguration schreibt Protokolleinträge in einem Format, das als Common Log Format (CLF) bekannt ist. Dieses Standardformat kann von vielen verschiedenen Webservern erstellt und von vielen Protokollanalyseprogrammen gelesen werden., Die in CLF erzeugten Protokolldateieinträge sehen ungefähr so aus:

127.0.0.1 - frank "GET /apache_pb.gif HTTP/1.0" 200 2326

Jeder Teil dieses Protokolleintrags wird unten beschrieben.

127.0.0.1(%h) Dies ist die IP-Adresse des Clients (Remote-Host), der die Anforderung an den Server gestellt hat. WennHostnameLookupsaufOngesetzt ist, versucht der Server, den Hostnamen zu ermitteln und ihn anstelle der IP-Adresse zu protokollieren. Diese Konfiguration wird jedoch nicht empfohlen, da sie den Server erheblich verlangsamen kann., Stattdessen verwenden Sie am besten einen Protokoll-Postprozessor wielogresolve, um die Hostnamen zu bestimmen. Die hier gemeldete IP-Adresse ist nicht unbedingt die Adresse der Maschine, an der der Benutzer sitzt. Wenn ein Proxyserver zwischen dem Benutzer und dem Server vorhanden ist, ist diese Adresse die Adresse des Proxys und nicht die Ursprungsmaschine.-(%l) Der“ Bindestrich “ in der Ausgabe gibt an, dass die angeforderte Information nicht verfügbar ist., In diesem Fall ist die Information, die nicht verfügbar ist, die RFC 1413-Identität des Clients, die durchidentdauf dem Clientcomputer bestimmt wird. Diese Informationen sind äußerst unzuverlässig und sollten fast nie verwendet werden, außer in streng kontrollierten internen Netzwerken. Apache httpd versucht nicht einmal, diese Informationen zu ermitteln, es sei denn,IdentityCheckist aufOngesetzt.frank(%u) Dies ist die Benutzer-id der person, die das Dokument bestimmt durch HTTP-Authentifizierung., Der gleiche Wert wird normalerweise für CGI-Skripte in der UmgebungsvariablenREMOTE_USERbereitgestellt. Wenn der Statuscode für die Anforderung (siehe unten) 401 ist, sollte dieser Wert nicht vertrauenswürdig sein, da der Benutzer noch nicht authentifiziert ist. Wenn das Dokument nicht passwortgeschützt ist, lautet dieser Teil „-“ genau wie der vorherige.(%t) die Zeit, die Die Anforderung empfangen wurde., Das Format lautet:

Es ist möglich, die Zeit in einem anderen Format anzuzeigen, indem %{format}t in der Protokollformatzeichenfolge angegeben wird, wobei format entweder wie in strftime(3) aus der C-Standardbibliothek oder eines der unterstützten speziellen Token ist. Für details siehe mod_log_config format-strings.

"GET /apache_pb.gif HTTP/1.0"

(\"%r\") Die Anforderungszeile vom Client wird in doppelten Anführungszeichen angegeben. Die Anforderungszeile enthält viele nützliche Informationen., Erstens ist die vom Client verwendete MethodeGET. Zweitens forderte der Client die Ressource/apache_pb.gifan, und drittens verwendete der Client das ProtokollHTTP/1.0. Es ist auch möglich, einen oder mehrere Teile der Anforderungszeile unabhängig voneinander zu protokollieren. Beispielsweise protokolliert die Formatzeichenfolge „%m %U%q %H“ die Methode, den Pfad, die Abfragezeichenfolge und das Protokoll, was zu genau derselben Ausgabe wie „%r„.200(%>s) Dies ist der Statuscode, den der Server an den Client zurücksendet., Diese Informationen sind sehr wertvoll, da sie zeigen, ob die Anforderung zu einer erfolgreichen Antwort (Codes, die mit 2 beginnen), einer Umleitung (Codes, die mit 3 beginnen), einem vom Client verursachten Fehler (Codes, die mit 4 beginnen) oder einem Fehler im Server geführt hat (Codes, die mit 5 beginnen). Die vollständige Liste der möglichen Statuscodes finden Sie in der HTTP-Spezifikation (RFC2616 Abschnitt 10).2326(%b) Der letzte Teil gibt die Größe des an den Client zurückgegebenen Objekts an, ohne die Antwortheader., Wenn kein Inhalt an den Client zurückgegeben wurde, lautet dieser Wert „-„. Um „0“ für keinen Inhalt zu protokollieren, verwenden Sie stattdessen%B.

Kombiniertes Protokollformat

Eine andere häufig verwendete Formatzeichenfolge wird als kombiniertes Protokollformat bezeichnet. Es kann wie folgt verwendet werden.

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combinedCustomLog log/access_log combined

Dieses Format ist genau das gleiche wie das übliche Protokollformat, wobei zwei weitere Felder hinzugefügt werden. Jedes der zusätzlichen Felder verwendet die percent-Direktive %{header}i, wobei der Header ein beliebiger HTTP-Anforderungsheader sein kann., Das Zugriffsprotokoll in diesem Format sieht folgendermaßen aus:

Die zusätzlichen Felder sind:

"http://www.example.com/start.html"(\"%{Referer}i\") Der HTTP-Anforderungsheader „Referer“ (sic). Dies gibt die Site an, von der der Client meldet, dass er verwiesen wurde. (Dies sollte die Seite sein, die auf/apache_pb.gifverweist oder diese enthält.)"Mozilla/4.08 (Win98; I ;Nav)"(\"%{User-agent}i\") Der HTTP-Anforderungsheader des Benutzeragenten. Dies sind die identifizierenden Informationen, die der Clientbrowser über sich selbst meldet.,

Multiple Access Logs

Multiple access-logs die erstellt werden können, einfach durch Angabe von mehreren CustomLog Direktiven in der Konfigurationsdatei. Die folgenden Anweisungen erstellen beispielsweise drei Zugriffsprotokolle. Die erste enthält die grundlegenden CLF-Informationen, während die zweite und dritte Referer-und Browserinformationen enthalten. Die letzten beiden Zeilen CustomLog zeigen, wie die Auswirkungen der Direktiven und AgentLog imitiert werden.,

Dieses Beispiel zeigt auch, dass es nicht notwendig ist, einen Nickname mit der Direktive LogFormat zu definieren. Stattdessen kann das Protokollformat direkt in der Direktive CustomLog angegeben werden.

Bedingte Protokolle

Manchmal ist es zweckmäßig, bestimmte Einträge basierend auf den Merkmalen der Clientanforderung aus den Zugriffsprotokollen auszuschließen. Dies wird leicht mit Hilfe von Umgebungsvariablen erreicht. Zunächst muss eine Umgebungsvariable festgelegt werden, um anzuzeigen, dass die Anforderung bestimmte Bedingungen erfüllt., Dies wird normalerweise mit SetEnvIferreicht. Dann wird dieenv= – Klausel derCustomLog – Direktive verwendet, um Anforderungen einzuschließen oder auszuschließen, bei denen die Umgebungsvariable festgelegt ist. Einige Beispiele:

Betrachten Sie als weiteres Beispiel die Protokollierung von Anfragen von Englischsprachigen in einer Protokolldatei und von nicht englischsprachigen in einer anderen Protokolldatei.

SetEnvIf Accept-Language "en" englishCustomLog logs/english_log common env=englishCustomLog logs/non_english_log common env=!english

In einem Caching-Szenario möchte man über die Effizienz des Caches Bescheid wissen., Eine sehr einfache Methode, um dies herauszufinden, wäre:

SetEnv CACHE_MISS 1LogFormat "%h %l %u %t "%r " %>s %b %{CACHE_MISS}e" common-cacheCustomLog logs/access_log common-cache

mod_cache wird vor mod_env ausgeführt und liefert den Inhalt bei Erfolg ohne. In diesem Fall protokolliert ein Cache-Treffer -, während ein Cache-Fehler 1protokolliert.,

Zusätzlich zurenv= Syntax unterstütztLogFormat Logging-Werte, die vom HTTP-Antwortcode abhängig sind:

LogFormat "%400,501{User-agent}i" browserlogLogFormat "%!200,304,302{Referer}i" refererlog

Im ersten Beispiel wird dieUser-agent protokolliert, wenn der HTTP-Statuscode 400 oder 501 ist. In anderen Fällen wird stattdessen ein wörtliches „-“ protokolliert. Ebenso wird im zweiten Beispiel die Referer protokolliert, wenn der HTTP-Statuscode nicht 200, 204 oder 302 ist. (Beachten Sie die „!“vor den Statuscodes.,

Obwohl wir gerade gezeigt haben, dass die bedingte Protokollierung sehr leistungsfähig und flexibel ist, ist dies nicht die einzige Möglichkeit, den Inhalt der Protokolle zu steuern. Protokolldateien sind nützlicher, wenn sie eine vollständige Aufzeichnung der Serveraktivität enthalten. Es ist oft einfacher, die Protokolldateien einfach nachzubessern, um Anfragen zu entfernen, die Sie nicht berücksichtigen möchten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.