Wéi konfiguréieren Custom Access a Feeler Log Formater an Nginx
Nginx HTTP-Server huet eng phänomenal Loggingsanlag déi héich personaliséierbar ass. An dësem Artikel wäerte mir erkläre wéi Dir Är eege Formater fir Zougang a Feelerprotokoller fir Nginx am Linux konfiguréiert.
D'Zil vun dësem Guide ass Iech ze hëllefen ze verstoen wéi Logbicher generéiert ginn, fir personaliséiert Logformate fir Zwecker vum Debugging, Problembehandlung oder Analyse ze konfiguréieren wat sech an Ärem Webserver entwéckelt, souwéi Webapplikatiounen (wéi Tracing-Ufroen).
Dësen Artikel ass aus dräi Sektiounen gemaach, déi Iech erliichteren iwwer d'Konfiguratioun vun Zougang/Fehler Logbicher a wéi Dir bedingte Logbicher an Nginx aktivéiert.
Zougang Logbicher an Nginx konfiguréieren
Ënner Nginx ginn all Client Ufroe fir de Server am Zougangsprotokoll an engem spezifizéierte Format opgeholl mat dem ngx_http_log_module Modul.
D'Standard Log Datei ass log/access.log (normalerweis /var/log/nginx/access_log op Linux Systemer) an d'Standardformat fir d'Logbuch ass normalerweis de kombinéierten oder Haaptformat (dëst kann vun engem Distro zu engem aneren variéieren).
D'Access_log-Direktiv (applicabel am http, Server, Standuert, wann an der Plaz a Limit ausser Kontext) gëtt benotzt fir d'Logdatei ze setzen an d'Log_format-Direktiv (nëmmen applicabel ënner dem http Kontext) gëtt benotzt fir de Logformat ze setzen. De Logformat gëtt duerch allgemeng Variablen beschriwwen, a Variablen déi nëmmen zur Zäit generéiert ginn wann e Log geschriwwe gëtt.
D'Syntax fir e Logformat ze konfiguréieren ass:
log_format format_name 'set_of_variables_to_define_format';
an d'Syntax fir den Zougangsprotokoll ze konfiguréieren ass:
access_log /path/to/log_file format_name; #simplest form OR access_log /path/to/log_file [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
Déi folgend ass en Auszuch aus der Standard Nginx Konfiguratiounsdatei /etc/nginx/nginx.conf op CentOS 7.
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_forwarded_for"'; access_log /var/log/nginx/access.log; }
Dëse Log-Format bréngt de folgende Log-Entrée.
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"
Déi folgend ass en anert nëtzlecht Logformat dee mir benotze fir Ufroen op eis Webapplikatiounen ze verfollegen andeems Dir e puer vun de Standardvariablen benotzt, et huet am wichtegsten d'Ufro ID a protokolléiert Clientsplaz Detailer (Land, Landcode, Regioun a Stad).
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 ';
Dir kënnt et esou benotzen:
access_log /var/log/nginx/access.log custom;
Dëst wäert e Log-Entrée produzéieren deen esou erschéngt.
153.78.107.192 - - [21/Nov/2017:08:45:45 +0000] "POST /ngx_pagespeed_beacon?url=https%3A%2F%2Fwww.example.com%2Fads%2Ffresh-oranges-1509260795 HTTP/2.0" 204 0 "https://www.suasell.com/ads/fresh-oranges-1509260795" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0" "-" a02b2dea9cf06344a25611c1d7ad72db Uganda UG Kampala Kampala
Dir kënnt verschidde Logbicher spezifizéieren mat den Access_log Direktiven um selwechten Niveau, hei benotze mir méi wéi eng Logdatei am http Kontext.
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 '; ##this uses the default log format access_log /var/log/nginx/access.log; ##this uses the our custom log format access_log /var/log/nginx/custom_log custom; }
Déi folgend sinn méi fortgeschratt Protokollkonfiguratiounsbeispiller, déi nëtzlech si fir Logformater déi kompressiounsrelatéiert Variablen enthalen a fir kompriméiert Logdateien ze kreéieren:
access_log /var/log/nginx/custom_log custom buffer 32k; access_log /path/to/log.gz compression gzip flush=5m;
Konfiguréieren Feeler Logbicher an Nginx
Am Fall wou Nginx Feeler erliewt, registréiert se Informatioun iwwer si am Feelerprotokoll. Dës Themen falen ënner verschiddene Schwieregkeetsniveauen: Debug, Info, Notiz, Warnung, Fehler (dëst ass de Standardniveau a funktionnéiert weltwäit), Crit, Alarm oder Emerg.
D'Standard Log Datei ass log/error.log, awer et ass normalerweis an /var/log/nginx/ op Linux Verdeelungen. D'Error_log Direktiv gëtt benotzt fir d'Logbuchdatei ze spezifizéieren, an et kann am Haapt, http, Mail, Stream, Server, Standuert Kontext (an dëser Reiefolleg) benotzt ginn.
Dir sollt och bemierken datt:
- Konfiguratiounen am Haaptkontext ginn ëmmer vun méi nidderegen Niveauen an der Uerdnung hei uewen ierf.
- an Konfiguratiounen an den ënneschten Niveauen iwwerschreiden d'Konfiguratiounen, déi vun de méi héijen Niveauen ierflecher sinn.
Dir kënnt Fehlerprotokoller konfiguréieren mat der folgender Syntax:
error_log /path/to/log_file log_level;
Zum Beispill:
error_log /var/log/nginx/error_log warn;
Dëst wäert Nginx instruéieren all Messagen vum Typ Warnung a méi schwéiere Logniveau Crit, Alarm, an Emerg Messagen ze protokolléieren.
Am nächste Beispill ginn Messagen vu Krit, Alarm an Entstoe Niveauen protokolléiert.
error_log /var/www/example1.com/log/error_log crit;
Bedenkt d'Konfiguratioun hei drënner, hei hu mir Fehlerprotokoller op verschiddene Niveauen definéiert (am http a Server Kontext). Am Fall vun engem Feeler gëtt de Message nëmmen op ee Feelerprotokoll geschriwwe, deen am nootsten um Niveau wou de Feeler opgetaucht ass.
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 example1.com; #this logs errors messages for example1.com only error_log /var/log/nginx/example1.error_log warn; …... } server { listen 80; server_name example2.com; #this logs errors messages for example2.com only error_log /var/log/nginx/example1.error_log; ……. } }
Wann Dir méi wéi ee error_log Direktiven benotzt wéi an der Konfiguratioun hei drënner (selwescht Niveau), ginn d'Messagen op all spezifizéiert Logbicher geschriwwe.
server { listen 80; server_name example1.com; error_log /var/www/example1.com/log/error_log warn; error_log /var/log/nginx/example1.error_log crit; …... }
Configuration Conditional Logging an Nginx
An e puer Fäll kënne mir Nginx wëlle bedingungsprotokolle vu Messagen ausféieren. Net all Message muss vum Nginx protokolléiert ginn, dofir kënne mir onbedeitend oder manner wichteg Logbicher aus eisen Zougangsprotokoller fir bestëmmte Fäll ignoréieren.
Mir kënnen den ngx_http_map_module Modul benotzen deen Variablen erstellt, deenen hir Wäerter op Wäerter vun anere Variablen hänken. D'Parameteren an engem Kaartblock (deen nëmmen am http Inhalt sollt existéieren) spezifizéieren eng Mapping tëscht Quell a resultéierend Wäerter.
Fir dës Zort Astellung gëtt eng Ufro net protokolléiert wann d'Konditioun op \0
evaluéiert oder eng eidel String. Dëst Beispill schléisst Ufroe mat HTTP-Statuscoden 2xx an 3xx aus.
http{ map $status $condition { ~^[23] 0; default 1; } server{ access_log /path/to/access.log custom if=$condition; } }
Hei ass en anert nëtzlecht Beispill fir eng Webapplikatioun an enger Entwécklungsphase ze Debuggéieren. Dëst wäert all Messagen ignoréieren an nëmmen Debug Informatioun aloggen.
http{ map $info $debuggable { default 0; debug 1; } server{ …….. access_log /var/log/nginx/testapp_debug_access_log debug if=$debuggable; #logs other requests access_log /var/log/nginx/testapp_access.log main; ……. } }
Dir kënnt méi Informatiounen erausfannen, dorënner Logged op Syslog hei.
Dat ass alles fir elo! An dësem Guide hu mir erkläert wéi ee personaliséierte Logformat fir Zougang a Feeler Logbicher an Nginx konfiguréiert. Benotzt de Feedbackformular hei ënnen fir Froen ze stellen oder Är Gedanken iwwer dësen Artikel ze deelen.