Weboldal keresés

Az egyéni hozzáférési és hibanapló-formátumok konfigurálása az Nginxben


Az Nginx HTTP szerver fenomenális naplózási lehetőséggel rendelkezik, amely nagymértékben testreszabható. Ebben a cikkben elmagyarázzuk, hogyan konfigurálhat saját formátumokat az Nginx hozzáférési és hibanaplóihoz Linux alatt.

Ennek az útmutatónak az a célja, hogy segítsen megérteni a naplók létrehozásának módját, hogy egyéni naplóformátumokat konfigurálhasson a webszerveren és a webalkalmazásokon belüli hibakeresés, hibaelhárítás vagy elemzés céljából (például a nyomkövetési kérések).

Olvassa el még: 4 jó nyílt forráskódú naplófigyelő és -kezelő eszköz Linuxhoz

Ez a cikk három részből áll, amelyek felvilágosítást adnak a hozzáférési/hibanaplók konfigurálásáról és a feltételes naplózás engedélyezéséről az Nginxben.

Hozzáférési naplók konfigurálása az Nginxben

Az Nginx alatt a kiszolgálóhoz intézett összes ügyfélkérelem rögzítésre kerül a hozzáférési naplóban meghatározott formátumban az ngx_http_log_module modul használatával.

Az alapértelmezett naplófájl a log/access.log (Linux rendszereken általában /var/log/nginx/access_log), és a naplózás alapértelmezett formátuma általában a kombinált vagy a fő formátumban (ez disztribúciónként változhat).

Az access_log direktíva (alkalmazható a http, a server, a location, ha a hely és a limit, kivéve a környezetet) a naplófájl és a log_format direktíva (a csak http kontextusban) a naplóformátum beállítására szolgál. A naplóformátumot általános változók írják le, és olyan változók, amelyek csak a napló írásakor jönnek létre.

A naplóformátum beállításának szintaxisa a következő:

log_format format_name 'set_of_variables_to_define_format';

és a hozzáférési napló konfigurálásának szintaxisa a következő:

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]];

A következő részlet a /etc/nginx/nginx.conf alapértelmezett Nginx konfigurációs fájlból a CentOS 7 rendszeren.

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;
}

Ez a naplóformátum a következő naplóbejegyzést eredményezi.

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"

A következő egy másik hasznos naplózási formátum, amelyet a webalkalmazásainkhoz érkezett kérések nyomon követésére használunk az alapértelmezett változók némelyikével, ami a legfontosabb, hogy rendelkezik a kérelem azonosítójával, és naplózza az ügyfél helyadatait (ország, országkód, régió és város).

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 ';

Így használhatod:

access_log  /var/log/nginx/access.log custom;

Ez létrehoz egy naplóbejegyzést, amely így fog kinézni.

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 

Több naplót is megadhat az access_log direktívák használatával ugyanazon a szinten, itt egynél több naplófájlt használunk http kontextusban.

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;
}

Az alábbiakban fejlettebb naplózási konfigurációs példák találhatók, amelyek hasznosak a tömörítéssel kapcsolatos változókat tartalmazó naplóformátumokhoz és tömörített naplófájlok létrehozásához:

access_log /var/log/nginx/custom_log custom buffer 32k;
access_log /path/to/log.gz compression  gzip  flush=5m;

Hibanaplók konfigurálása az Nginxben

Abban az esetben, ha az Nginx bármilyen hibát észlel, rögzíti az ezzel kapcsolatos információkat a hibanaplóban. Ezek a problémák különböző súlyosságúak: hibakeresés, információ, figyelmeztetés, figyelmeztetés, hiba (ez az alapértelmezett szint, és globálisan működik), crit, alert vagy emerg.

Az alapértelmezett naplófájl a log/error.log, de általában a /var/log/nginx/ könyvtárban található Linux disztribúciók esetén. Az error_log direktíva a naplófájl megadására szolgál, és használható a fő, http, mail, adatfolyam, szerver, hely kontextusban (ebben a sorrendben).

Azt is meg kell jegyezni, hogy:

  • A fő kontextusban a konfigurációkat mindig az alacsonyabb szintek öröklik a fenti sorrendben.
  • az alsóbb szinteken lévő konfigurációk pedig felülírják a magasabb szintekről örökölt konfigurációkat.

A hibanaplózást a következő szintaxissal konfigurálhatja:

error_log /path/to/log_file log_level;

Például:

error_log /var/log/nginx/error_log warn; 

Ez arra utasítja az Nginxet, hogy naplózza az összes warn típusú és súlyosabb naplózási szintű crit, alert és emerg üzenetet. üzenetek.

A következő példában a rendszer naplózza a krit, figyelmeztetés és feltörekvő szintű üzeneteket.

error_log /var/www/example1.com/log/error_log crit;

Tekintsük az alábbi konfigurációt, itt különböző szinteken határoztuk meg a hibanaplózást (http és szerver környezetben). Hiba esetén az üzenet csak egy hibanaplóba kerül, amelyik a legközelebb van ahhoz a szinthez, ahol a hiba jelentkezett.

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;
        		…….
    	}
}

Ha egynél több error_log direktívát használ, mint az alábbi konfigurációban (ugyanolyan szinten), az üzenetek az összes megadott naplóba íródnak.

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;
            	…...
	}

Feltételes naplózás konfigurálása az Nginxben

Egyes esetekben azt szeretnénk, hogy az Nginx feltételes üzenetnaplózást végezzen. Nem kell minden üzenetet naplózni az Nginx-nek, ezért bizonyos esetekben figyelmen kívül hagyhatjuk a jelentéktelen vagy kevésbé fontos naplóbejegyzéseket a hozzáférési naplóinkból.

Használhatjuk az ngx_http_map_module modult, amely olyan változókat hoz létre, amelyek értéke más változók értékétől függ. A leképezési blokkon belüli paraméterek (amelyeknek csak a http tartalomban kell létezniük) a forrás és a kapott értékek közötti leképezést határozzák meg.

Ilyen beállítás esetén a kérés nem kerül naplózásra, ha a feltétel kiértékelése „0 ” vagy üres karakterlánc. Ez a példa kizárja a 2xx és 3xx HTTP-állapotkóddal rendelkező kéréseket.

http{
	map $status $condition {
		~^[23] 0;
    		default 1;
	}
	server{
		access_log  /path/to/access.log  custom if=$condition;
	}
}

Íme egy másik hasznos példa egy webalkalmazás hibakeresésére fejlesztési fázisban. Ez figyelmen kívül hagyja az összes üzenetet, és csak a hibakeresési információkat naplózza.

 
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; 
		…….
	}
}

Itt találhat további információkat, beleértve a syslogba való naplózást is.

Ez minden most! Ebben az útmutatóban elmagyaráztuk, hogyan konfigurálhat egyéni naplózási formátumot a hozzáférési és hibanaplókhoz az Nginxben. Az alábbi visszajelzési űrlap segítségével kérdéseket tehet fel, vagy megoszthatja gondolatait ezzel a cikkel kapcsolatban.