Das Apache-Protokoll zeichnet Ereignisse auf, die vom Apache-Webserver verarbeitet wurden, einschließlich Anforderungen von anderen Computern, von Apache gesendete Antworten und Aktionen innerhalb des Apache-Servers. In diesem Abschnitt des Handbuchs werden die Grundlagen der Apache-Protokollierung erläutert, einschließlich der von Apache generierten Protokolltypen, in denen sie gespeichert sind, und deren Interpretation. Wir behandeln auch erweiterte Themen wie das Festlegen benutzerdefinierter Protokollformate und das Konfigurieren von Modulen, um umfangreichere Daten zu erhalten.,
Typen von Apache-Protokollen
Apache generiert zwei Arten von Protokollen: Zugriffsprotokolle und Fehlerprotokolle.
Zugriffsprotokoll
Das Zugriffsprotokoll enthält Informationen über Anfragen, die an den Webserver eingehen. Diese Informationen können enthalten, welche Seiten angezeigt werden, den Erfolgsstatus von Anforderungen und wie lange die Antwort des Servers gedauert hat. Hier ist ein Beispiel für einen typischen Zugriffsprotokolleintrag:
Fehlerprotokoll
Das Fehlerprotokoll enthält Informationen zu Fehlern, auf die der Webserver bei der Verarbeitung von Anforderungen gestoßen ist, z. B. fehlende Dateien., Es enthält auch Diagnoseinformationen über den Server selbst. Hier ist ein Beispiel für ein Fehlerprotokoll:
File does not exist: /var/www/favicon.ico
Protokollstandorte
Standardmäßig speichert Apache Zugriffs-und Fehlerprotokolle in separaten Dateien auf dem Server. Der genaue Speicherort hängt von Ihrem Betriebssystem ab., Sie können den Speicherort für Ihr Betriebssystem finden, indem Sie auf die folgenden Links klicken:
Debian/Ubuntu/Linux Mint
Redhat/Fedora/CentOS-Konfiguration
openSUSE
Apache-Protokolle konfigurieren
Apache verfügt über ein hoch konfigurierbares Protokollierungsframework, mit dem Sie das Protokollierungsverhalten global oder für jeden virtuellen Host anpassen können. Es gibt mehrere Anweisungen, mit denen Sie das Protokollierungsverhalten ändern können. Einige der gebräuchlicheren Anweisungen sind die Anweisungen Protokollebene und Protokollformat, die wir ausführlicher erläutern werden.,
Log Level Direktive
Die LogLevel
Direktive bestimmt den minimalen Schweregrad von Ereignissen, die an einem bestimmten Ziel protokolliert werden. Der Schweregrad gibt an, wie wichtig das Ereignis ist, und kann von „Emerg“ bis „Trace8“ reichen, wobei „Emerg“ Ereignisse darstellt, die zu Instabilität führen können, und „Trace8“ Nachrichten auf Trace-Ebene. Beispielsweise erlaubt LogLevel crit
Protokolle mit dem Schweregrad „Crit“, „Alert“ und „Emerg“, ignoriert jedoch alle anderen Ebenen.,
Protokollformat
DieLogFormat
– Direktive steuert das Layout und die Formatierung von Protokollereignissen. Apache verwendet standardmäßig das Common Log Format (CLF), Sie können jedoch eine eigene Formatzeichenfolge angeben, um die in jedem Protokoll enthaltenen Felder zu ändern.
Sie können auch die CustomLog
Direktive verwenden, um den Speicherort der Protokolldatei zu ändern. Unter Linux schreibt Apache üblicherweise Protokolle in die Verzeichnisse /var/log/apache2 oder /var/log/httpd, abhängig von Ihrem Betriebssystem und den Überschreibungen des virtuellen Hosts., Sie können auch eine LogFormat-Zeichenfolge nach dem Dateinamen definieren, die nur die Formatzeichenfolge auf diese Datei anwendet.
Die folgende Konfiguration schreibt beispielsweise Protokolle im Standardformat „common“ in logs/access_log
. Das logs / Unterverzeichnis ist relativ zu dem Verzeichnis, das in der ServerRoot-Direktive angegeben ist:
LogFormat "%h %l %u %t \"%r\" %>s %b" commonCustomLog "logs/access_log" common
CustomLog“ logs/access_log “ common
Eine vollständige Liste der Felder finden Sie in der Apache-Protokolldokumentation., Wir empfehlen, mindestens die folgenden fünf Felder zu verwenden, da sie für die Überwachung des Serverzustands und für die Fehlerbehebung wichtig sind:
-
%>s
– Der HTTP-Statuscode für die Anforderung. Dies zeigt den endgültigen Anforderungsstatus nach einer internen Umleitung an; Verwenden Sie für den ursprünglichen Status %s. -
%U
– Den angeforderten URL-Pfad, ohne zusätzliche URL-Parameter wie eine Abfragezeichenfolge. -
%a
– Die IP-Adresse des Clients, der die Anforderung., Dies ist nützlich, um Datenverkehr aus einer bestimmten Quelle zu identifizieren. -
%T
– Wie lange es dauerte, die Anfrage in Sekunden zu verarbeiten. Dies ist nützlich, um die Geschwindigkeit Ihrer Website zu messen. Verwenden Sie %D, um dieselbe Messung in Mikrosekunden durchzuführen. -
%{UNIQUE_ID}e
– Auch allgemein als Anforderungs-ID bekannt, protokolliert dies bei jeder Anforderung eine eindeutige Kennung. Dies ist nützlich, um eine Anfrage von Apache auf Ihren Webanwendungsserver zu verfolgen.,
Spitznamen zuweisen
LogFormat
Strings können Spitznamen zugewiesen werden, die Sie dann mit einer CustomLog
Direktive zum Schreiben von Protokollen im angegebenen Format verwenden können. Auf diese Weise können Sie dasselbe Protokollformat für mehrere Protokolldateien verwenden, ohne das Format jedes Mal neu definieren zu müssen. Dies ist besonders nützlich, wenn Sie verschiedene Protokolldateien für mehrere virtuelle Hosts verwenden.
Erstellen wir beispielsweise ein Beispielformat und nennen es “ vhost_combined.,“Wir erstellen dann eineCustomLog
– Direktive, die Protokolle im vhost_combined-Format in eine Datei schreibt.
LogFormat "%v:%p %h %l %u %t "%r" %>s %O "%{Referer}i" "%{User-Agent}i"" vhost_combinedCustomLog /var/log/apache2/vhost.log vhost_combined
Die Formatierung als JSON
Das Speichern Ihrer Protokolle als Klartext erleichtert das Scannen, falls Sie jemals Ihre Protokolldateien lesen müssen. Dies macht es jedoch schwierig, Tools wie Protokollverwaltungslösungen zum Lesen Ihrer Protokolle zu verwenden, da diese Tools wissen müssen, wie Ihre Protokolle formatiert sind. Die meisten Protokollverwaltungslösungen unterstützen das standardmäßige Apache-Protokollformat, aber wenn nicht, sollten Sie ein strukturiertes Format wie JSON verwenden.,
JSON (kurz für JavaScript Object Notation) ist ein flexibles Format zum Speichern strukturierter Daten. JSON speichert eine Sammlung von verschachtelbaren Name / Wert-Paaren, sodass Sie fast jeden Datentyp und jede Datenstruktur speichern können. JSON dokumentiert auch effektiv selbst, da der Name des Schlüssels die darin enthaltenen Daten beschreibt. JSON unterstützt viele grundlegende Datentypen, einschließlich Zeichenfolgen, Zahlen, Booleschen Werten, Arrays und Nullwerten.,
Hier ist ein Beispiel für eine LogFormat
, die Protokolle im JSON-Format speichert:
LogFormat "{ \"time\":\"%t\", \"remoteIP\":\"%a\", \"host\":\"%V\", \"request\":\"%U\", \"query\":\"%q\", \"method\":\"%m\", \"status\":\"%>s\", \"userAgent\":\"%{User-agent}i\", \"referer\":\"%{Referer}i\" }"
Standardmäßige Überschreibungen virtueller Hosts
Virtuelle Hosts (vhosts) werden verwendet, um mehr als eine Website auf einem einzelnen Apache-Server auszuführen. Sie können für jeden Vhost eine separate Protokollierungskonfiguration definieren, die Vorrang vor der globalen Protokollierungskonfiguration hat. So können Sie beispielsweise jede Website in einem separaten Verzeichnis anmelden. Wenn Sie diese Parameter auslassen, wird standardmäßig die globale Protokollierungskonfiguration verwendet.
Die folgende Konfiguration gilt beispielsweise für einen vhost.,com. Protokolle werden in separate access.log
und error.log
Dateien im Verzeichnis /var/www/example.com/logs
geschrieben:
Die folgenden Abschnitte zeigen die Standardkonfigurationsdateispeicherorte und-anweisungen, die in verschiedenen Linux-Distributionen verwendet werden.
Debian / Ubuntu / Linux Mint
Auf Debian-basierten Distributionen kann die standardmäßige vhost-Konfiguration für unverschlüsselte Sites (Port 80) unter /etc/apache2/sites-available/000-default.conf
gefunden werden. Die standardmäßige vhost-Konfiguration für Websites, die mit SSL/TLS (Port 443) verschlüsselt sind, ist /etc/apache2/sites-available/default-ssl.conf
.,
Tabelle der Standardanweisungen
* Bedingte Umgebungsvariable. Bietet Unterstützung für mehrere Apache-Serverinstanzen.
** Umgebungsvariable. Wird verwendet, um den anfänglichen Protokollpfad dynamisch festzulegen.
Red Hat / Fedora / CentOS
Bei Red Hat-basierten Distributionen befindet sich die Hauptkonfigurationsdatei unter /etc/httpd/conf/httpd.conf
. Sie können zusätzliche vhost-Konfigurationsdateien im Verzeichnis /etc/httpd/conf.d
ablegen, das beim Start automatisch vom Server gelesen wird.
Tabelle der Standardanweisungen
* Abhängig vom geladenen log_config_module.,
* * Bedingt durch geladenes logio_module.
openSUSE
In openSUSE befindet sich die Standard-vhost-Konfiguration für unverschlüsselte Sites (Port 80) unter /etc/apache2/default-vhost.conf
, während sich die Standardkonfiguration für Sites, die mit SSL/TLS verschlüsselt sind, unter /etc/apache2/default-vhost-ssl.conf
befindet.
Tabelle der Standardanweisungen
* Abhängig vom geladenen log_config_module.
* * Bedingt durch geladenes logio_module.
* * * Bedingt durch geladene mod_ssl.,
Protokollbezogene Module
Der Apache-Webserver bietet eine Reihe von Modulen, die entweder die Funktionsweise von Apache ändern oder seine Funktionen erweitern. Die folgenden Module fügen das Protokollierungsverhalten auf nützliche Weise hinzu oder ändern es.
mod_log_config
Dies ist das Basisprotokollierungsmodul, das Apache verwendet, und das, das wir in diesem Abschnitt des Handbuchs behandelt haben.
mod_log_debug
Dieses Modul bietet zusätzliche Optionen für die Protokollierung von debug-Meldungen., Sie können beispielsweise Ereignisse in einem bestimmten URL-Pfad protokollieren, Anforderungen nach der Verarbeitung protokollieren, Nachrichten von einem bestimmten Client protokollieren, wenn sie zu Zeitüberschreitungen führen, und vieles mehr. Beachten Sie, dass dieses Modul experimentell ist und möglicherweise nicht in Ihrer Apache-Distribution enthalten ist.
Die folgende Konfiguration protokolliert beispielsweise die IP-Adresse eines Clients, wenn er einen bestimmten Pfad anfordert:
mod_log_forensic
Dieses Modul ermöglicht die Protokollierung vor und nach der Verarbeitung einer Anforderung. Jedem Eintrag wird eine eindeutige ID zugewiesen, mit der Ereignisse zwischen dem forensischen Protokoll und dem normalen Protokoll verfolgt werden können., Der forensische Logger unterstützt jedoch keine benutzerdefinierten Formate. Dieses Modul ersetzt auch das Modul mod_unique_id.
Sobald das Modul aktiviert ist, können Sie mit dem Schlüsselwort forensic
angeben, welche Protokolldatei das forensische Protokoll ist. Sie können auch das %{forensic-id}
– Muster in anderen LogFormat
– Zeichenfolgen verwenden, um forensische Daten zu normalen Protokollen hinzuzufügen. Hier verwenden wir /var/www/example.com/logs/forensic.log
:
Jede Zeile im forensischen Protokoll beginnt entweder mit einem “ + „oder“ – “ Zeichen., „+“gibt die Eingabeprotokollzeile für diese bestimmte Anforderung und“ – “ nachfolgende Einträge für dieselbe Anforderung an.
Das folgende Eintragsprotokoll wurde beispielsweise durch Aufrufen von http://localhost unter Verwendung des Standardprotokollformats generiert:
Der Endprotokolleintrag derselben Anforderung wird wie folgt angezeigt:
-3264:55958cb4:0
Wenn kein Endeintrag im Protokoll angezeigt wird, wurde die Anforderung nicht abgeschlossen.
mod_logio
Dieses Modul bietet die Möglichkeit, die Anzahl der gesendeten und empfangenen Bytes pro Anforderung zu protokollieren., Dazu gehören empfangene, gesendete und übertragene Bytes (Kombination aus empfangenem und gesendetem Byte). Das Modul berücksichtigt auch Änderungen in der Größe aufgrund der SSL-und TLS-Verschlüsselung genau. Dieses Modul benötigt mod_log_config und ist in der Regel standardmäßig in Apache enthalten.
Dieses Modul fügt die LogIOTrackTTFB On|Off
– Direktive hinzu, mit der die Zeit auf das erste Byte (TTFB) umgeschaltet werden kann. TTFB ist die Zeitspanne, von der eine Anforderung empfangen wird, bis die Antwort zum ersten Mal an den Client gesendet wird., Sie können dann %^FB
, um die TTFB-Messung in eine LogFormat
– Zeichenfolge aufzunehmen.
mod_filter
Dieses Modul stellt kontextsensitive Filter für die Ausgabekette bereit, indem es eine beliebige Anzahl von Filteranbietern registriert. mod_filter ist nicht spezifisch für die Protokollierung, ermöglicht jedoch das Extrahieren spezifischer Anforderungen basierend auf dem Filteranbieter. Die Kontext-Container gehören: Haupt-apache-Konfiguration, die vhost-config, in
Die Verwendung dieses Moduls ermöglicht das Filtern von Anforderungen, die Elemente wie bestimmte Injektionskriterien enthalten und von welcher IP-Adresse sie stammen.
Dieses Modul wird standardmäßig in vielen Paketdistributionen bereitgestellt, muss jedoch möglicherweise aktiviert werden. Zum Zwecke der Protokollierung gibt die FilterTrace-Direktive Informationen in das Fehlerprotokoll ein.,li> FilterDeclare
– deklariert einen Smart Filter
FilterProtocol
– bewirkt, dass der mod_filter die Antwortheader korrekt verarbeitetFilterProvider
– registriert FilteranbieterFilterTrace
– ermöglicht das Debuggen/Diagnoseinformationen in einem Fehlerprotokoll.für die Anbieterverarbeitungwendet das folgende Beispiel die Filterung in einem vhost-Kontextcontainer bedingt auf filter und Include-Module an:
mod_unique_id:
Dieses Modul erstellt für jede Anforderung eine Umgebungsvariable und einen eindeutigen Bezeichner., Es ist oft in Paketdistributionen enthalten, muss jedoch möglicherweise aktiviert werden. Diese eindeutige Kennung wird in das Zugriffsprotokoll geschrieben.
Dieses Modul wurde für forensische Zwecke durch mod_log_forensic ersetzt, wird jedoch weiterhin für andere unterstützt.
Im Gegensatz zum forensischen Bezeichner wird der eindeutige Bezeichner über die Umgebungsvariable UNIQUE_ID an den Anwendungshandler übergeben. Auf diese Weise können Anwendungsentwickler eine Anfrage über den Webserver zum Anwendungsserver verfolgen. Es kann nützlich sein, um eine Anfrage zu debuggen.,
der Apache Ausgliederung Kind-Prozesse, um Anfragen zu Bearbeiten, und einen untergeordneten Instanz, die Prozesse, die mehrere Anforderungen gleichzeitig. Daher ist es manchmal wünschenswert, eine eindeutige Kennung zu verwenden, um eine einzelne Anforderung über mehrere Serverinstanzen und untergeordnete Prozesse hinweg zu identifizieren.
Nach der Aktivierung stellt das Modul standardmäßig eine Kennung für den Anwendungshandler bereit.,
Zum Beispiel:
UNIQUE_ID: Vaf3en8AAQEAAAtoQlAAAAAA
Der Bezeichner wird aus einer 32-Bit-IP-Adresse, einer 32-Bit-Prozess-ID und einem 32-Bit-Zeitstempel erstellt gekoppelt an einen 16-Bit-Zähler für eine engere Auflösung als einen 32-Bit-Thread-Index in einer Sekunde. Die Zeitstempelkomponente ist UTC, um Probleme mit Anpassungen der Sommerzeit zu vermeiden. Der Anwendungshandler sollte den Bezeichner nur als undurchsichtiges Token behandeln und nicht in Bestandteile zerlegen.
Sieh es dir an. Analysiere es. Inspiziere es. Lösen Sie es
Sehen Sie, was zählt.
KOSTENLOSE TESTVERSION STARTEN