So konfigurieren Sie benutzerdefinierte Zugriffs- und Fehlerprotokollformate in Nginx

So konfigurieren Sie benutzerdefinierte Zugriffs- und Fehlerprotokollformate in Nginx

Nginx http Der Server verfügt über eine phänomenale Protokollierungsanlage, die sehr anpassbar ist. In diesem Artikel erläutert wir, wie Sie Ihre eigenen Formate für Zugriffs- und Fehlerprotokolle für Nginx unter Linux konfigurieren können.

Ziel dieser Anleitung ist es, Ihnen zu helfen, zu verstehen, wie Protokolle generiert werden, um benutzerdefinierte Protokollformate für die Zwecke des Debuggens, Fehlerbehebung oder Analyse dessen zu konfigurieren, was sich auf Ihrem Webserver entfaltet (wie z. B. Anforderungen an die Verfolgung).

Lesen Sie auch: 4 gute Open -Source -Protokoll -Überwachungs- und -management -Tools für Linux

Dieser Artikel besteht aus drei Abschnitten, die Sie über das Konfigurieren aufklären werden Zugriffs-/Fehlerprotokolle und wie man eine bedingte Protokollierung in Nginx aktiviert.

Konfigurieren von Zugriffsprotokollen in Nginx

Unter Nginx, Alle Clientanfragen an den Server werden in der recoriert Zugriff auf Protokoll in einem bestimmten Format mit dem ngx_http_log_module Modul.

Die Standardprotokolldatei ist Protokoll/Zugriff.Protokoll (normalerweise /var/log/nginx/access_log auf Linux -Systemen) und das Standardformat für die Protokollierung ist normalerweise das kombinierte oder Hauptformat (dies kann von einer Distribution zu einer anderen variieren).

Der Access_log Richtlinie (in der HTTP, Server, Ort, sofern und Grenze, außer Kontext anwendbar) wird verwendet, um die Protokolldatei und die festzulegen log_format Die Richtlinie (nur im HTTP -Kontext anwendbar) wird verwendet, um das Protokollformat festzulegen. Das Protokollformat wird durch gemeinsame Variablen und Variablen beschrieben, die nur zu dem Zeitpunkt erzeugt werden, an dem ein Protokoll geschrieben wird.

Die Syntax zum Konfigurieren eines Protokollformats lautet:

log_format format_name 'set_of_variables_to_define_format'; 

und die Syntax zum Konfigurieren des Zugriffsprotokolls lautet:

access_log/path/to/log_file format_name; #Simplest Form oder Access_log/path/to/log_file [Format [buffer = Größe] [gzip [= stufe]] [flush = time] [if = condition]]; 

Im Folgenden finden Sie einen Auszug aus der Standard -Nginx -Konfigurationsdatei /etc/nginx/nginx.Conf An Centos 7.

/etc/nginx/nginx.Conf
http #main log format log_format main '$ remote_addr - $ remote_user [$ time_local] "$ request" "$ status $ body_bytes_sent" $ http_referer "" "$ http_user_agent" $ http_x_fordarded_ford_ford_ford_ford_ford_ford_ford_ford_ford_ford_ford_ford_ford_fored_Fored_Fored_Ford_Fored_Fored_Fored_Fored_Fored. access_log/var/log/nginx/greifen zugreifen.Protokoll;  

Dieses Protokollformat ergibt den folgenden Protokolleintrag.

127.0.0.1 - DBMANAGER [20/Nov/2017: 18: 52: 17 +0000] "get/http/1.1 "401 188"-"" Mozilla/5.0 (x11; Ubuntu; Linux x86_64; RV: 47.0) Gecko/20100101 Firefox/47.0 " 

Das Folgende ist ein weiteres nützliches Protokollierungsformat, mit dem wir Anforderungen an unsere Webanwendungen unter Verwendung einiger der Standardvariablen nachverfolgen können.

/etc/nginx/nginx.Conf
log_format custom '$remote_addr - $remote_user [$time_local]""$request" $status $body_bytes_sent""$http_referer" "$http_user_agent"""$http_x_forwarded_for" $request_id"$geoip_country_name $geoip_country_code"$geoip_region_name $geoip_city '; 

Sie können es so verwenden:

access_log/var/log/nginx/greifen zugreifen.Log Custom; 

Dies erzeugt einen Protokolleintrag, der so erscheint.

153.78.107.192 - - [21/Nov/2017: 08: 45: 45 +0000] "post/ngx_pagespeed_beakon?URL = https%3a%2f%2fwww.Beispiel.com%2fads%2ffresh-oranges-1509260795 HTTP/2.0 "204 0" https: // www.Suasell.com/ads/frisch-oranges-1509260795 "" Mozilla/5.0 (x11; Ubuntu; Linux x86_64; RV: 47.0) Gecko/20100101 Firefox/47.0 ""-"A02B2DEA9CF06344A25611C1D7AD72DB UGANA UG KAMPALA KAMPALA 

Sie können mehrere Protokolle mit dem angeben Access_log Anweisungen auf derselben Ebene verwenden wir hier mehr als eine Protokolldatei im HTTP -Kontext.

/etc/nginx/nginx.Conf
http ##default log format log_format main '$remote_addr - $remote_user [$time_local] "$request""$status $body_bytes_sent "$http_referer"""$http_user_agent" "$http_x_forwarded_for"'; ##request tracing using custom format log_format custom '$remote_addr - $remote_user [$time_local]""$request" $status $body_bytes_sent""$http_referer" "$http_user_agent"""$http_x_forwarded_for" $request_id"$geoip_country_name $geoip_country_code" $ geoip_region_name $ geoip_city '; ## Hier.Protokoll; ## Dies verwendet das benutzerdefinierte Protokollformat Access_log/var/log/nginx/custom_log benutzerdefinierte;  

Im Folgenden finden Sie Beispiele für erweiterte Protokollierungskonfigurationen, die für Protokollformate nützlich sind, die kompressionsbezogene Variablen enthalten und zum Erstellen komprimierter Protokolldateien:

access_log/var/log/nginx/custom_log benutzerdefinierten Puffer 32K; access_log/path/to/log.GZ -Kompression Gzip Flush = 5m; 

Fehlerprotokolle in Nginx konfigurieren

Falls Nginx Erfährt alle Störungen, es werden Informationen über sie im Fehlerprotokoll aufgezeichnet. Diese Probleme fallen unter unterschiedliche Schweregradniveaus: debuggen, die Info, Notiz, warnen, Fehler (Dies ist die Standardebene und funktioniert weltweit), kritisch, Alarm, oder aufkommen.

Die Standardprotokolldatei ist Protokoll/Fehler.Protokoll, aber es liegt normalerweise in /var/log/nginx/ auf Linux -Verteilungen. Der Fehlerprotokoll Die Anweisung wird verwendet, um die Protokolldatei anzugeben und kann im Haupt-, HTTP-, Mail-, Stream-, Server- und Standortkontext verwendet werden (in dieser Reihenfolge).

Sie sollten auch beachten, dass:

  • Konfigurationen im Hauptkontext werden in der obigen Reihenfolge immer durch niedrigere Ebenen vererbt.
  • und Konfigurationen in den unteren Ebenen überschreiben die Konfigurationen, die von den höheren Ebenen geerbt wurden.

Sie können die Fehlerprotokollierung mithilfe der folgenden Syntax konfigurieren:

ERROR_LOG/PATH/TO/LOG_FILE LOG_LEVEL; 

Zum Beispiel:

ERROR_LOG/VAR/LOG/NGINX/ERROR_LOG WARN; 

Dadurch wird Nginx angewiesen, alle Typnachrichten vom Typ zu protokollieren warnen und schwereres Protokollspiegel kritisch, Alarm, Und aufkommen Mitteilungen.

Im nächsten Beispiel Nachrichten von kritisch, Alarm, Und aufkommen Levels werden protokolliert.

ERROR_LOG/VAR/WWW/EXEME111.com/log/error_log krit; 

Betrachten Sie die folgende Konfiguration. Hier haben wir die Fehlerprotokollierung auf verschiedenen Ebenen definiert (im HTTP- und Serverkontext). Bei einem Fehler wird die Nachricht nur in ein Fehlerprotokoll geschrieben, wobei derjenige, der der Ebene am nächsten liegt, auf der der Fehler angezeigt wurde.

/etc/nginx/nginx.Conf
http log_format compression '$ remote_addr - $ remote_user [$ time_local] "$ request" $ status $ body_bytes_sent "" $ http_referer "" $ http_user_agent "$ gzip_ratio"; ERROR_LOG/VAR/LOG/NGINX/ERROR_LOG CRIT; Server Listen 80; server_name Beispiel1.com; #Diese protokolliert Fehlermeldungen zum Beispiel1.Com nur error_log/var/log/nginx/Beispiel111.ERROR_LOG WARN;… Server Hören 80; Server_Name Beispiel2.com; #Diese protokolliert Fehlermeldungen für Beispiel2.Com nur error_log/var/log/nginx/Beispiel111.Fehlerprotokoll;… .  

Wenn Sie mehr als einen verwenden Fehlerprotokoll Anweisungen wie in der folgenden Konfiguration (gleiche Ebene) werden die Nachrichten an alle angegebenen Protokolle geschrieben.

/etc/nginx/nginx.Conf
Server Listen 80; server_name Beispiel1.com; ERROR_LOG/VAR/WWW/EXEME111.com/log/error_log warn; ERROR_LOG/VAR/LOG/NGINX/EXEME111.ERROR_LOG CRIT;… 

Konfigurieren der bedingten Protokollierung in Nginx

In einigen Fällen möchten wir möglicherweise, dass Nginx eine bedingte Protokollierung von Nachrichten durchführt. Nicht jede Nachricht muss von Nginx protokolliert werden. Daher können wir unbedeutende oder weniger wichtige Protokolleinträge von unseren Zugriffsprotokollen für bestimmte Instanzen ignorieren.

Wir können die verwenden ngx_http_map_module Modul, das Variablen erstellt, deren Werte von den Werten anderer Variablen abhängen. Die Parameter in einem Kartenblock (der nur im HTTP -Inhalt vorhanden ist) geben eine Zuordnung zwischen der Quelle und den resultierenden Werten an.

Für diese Art der Einstellung wird eine Anfrage nicht protokolliert, wenn die Bedingung bewertet wird "0" oder eine leere Zeichenfolge. Dieses Beispiel schließt Anforderungen mit HTTP -Statuscodes aus 2xx Und 3xx.

/etc/nginx/nginx.Conf
http map $ status $ condition ~^[23] 0; Standard 1;  server access_log/path/to/access.Log Custom if = $ condition;  

Hier ist ein weiteres nützliches Beispiel für das Debuggen einer Webanwendung in einer Entwicklungsphase. Dadurch wird alle Nachrichten ignoriert und nur Debug -Informationen protokolliert.

/etc/nginx/nginx.Conf
 http map $ info $ debuggable default 0; Debug 1;  server … access_log/var/log/nginx/testapp_debug_access_log debug if = $ debuggable; #logs andere Anforderungen access_log/var/log/nginx/testapp_access.log main;… .  

Weitere Informationen finden Sie in der Lage.

Das ist alles fürs Erste! In diesem Handbuch haben wir erläutert, wie das benutzerdefinierte Protokollierungsformat für Zugriffs- und Fehlerprotokolle in Nginx konfiguriert werden können. Verwenden Sie das Feedback -Formular unten, um Fragen zu stellen oder Ihre Gedanken zu diesem Artikel zu teilen.