Come configurare l'accesso personalizzato e i formati di registro degli errori in Nginx

Nginx HTTP il server ha una struttura di registrazione fenomenale che è altamente personalizzabile. In questo articolo, spiegheremo come configurare i tuoi formati per i log di accesso e di errore per Nginx in Linux.

Lo scopo di questa guida è aiutarti a capire come vengono generati i log, in modo da configurare formati di log personalizzati per scopi di debug, risoluzione dei problemi o analisi di ciò che si svolge all'interno del server Web e delle applicazioni Web (come il tracciamento) richieste).

Leggi anche: 4 buoni strumenti di monitoraggio e gestione dei log open source per Linux

Questo articolo è composto da tre sezioni che ti illumineranno sulla configurazione log di accesso/errore e come abilitare la registrazione condizionale in Nginx.

Configurazione dei log di accesso in Nginx

Sotto Nginx, tutte le richieste del client al server vengono registrate nel registro di accesso in un formato specificato utilizzando il ngx_http_log_module modulo.

Il file di registro predefinito è log/access.log (di solito /var/log/nginx/access_log su sistemi Linux) e il formato predefinito per la registrazione è normalmente il formato combinato o principale (questo può variare da una distribuzione all'altra).

Il access_log direttiva (applicabile in http, server, location, se in location e limit tranne contesto) viene utilizzata per impostare il file di registro e il log_format La direttiva (applicabile solo nel contesto http) viene utilizzata per impostare il formato del registro. Il formato del registro è descritto da variabili comuni e variabili generate solo nel momento in cui viene scritto un registro.

La sintassi per la configurazione di un formato di registro è:

log_format nome_formato 'set_of_variables_to_define_format'; 

e la sintassi per la configurazione del log di accesso è:

access_log /percorso/a/file_log nome_formato; #forma più semplice OR. access_log /path/to/log_file [formato [buffer=dimensione] [gzip[=livello]] [flush=tempo] [if=condizione]]; 

Quello che segue è un estratto dal file di configurazione Nginx predefinito /etc/nginx/nginx.conf sopra CentOS 7.

/etc/nginx/nginx.conf

http { #formato log principale log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$stato $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log; }

Questo formato di registro restituisce la seguente voce di registro.

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"

Quello che segue è un altro formato di registrazione utile che utilizziamo per tracciare le richieste alle nostre applicazioni Web utilizzando alcuni dei variabili predefinite, ha soprattutto l'ID della richiesta e registra i dettagli della posizione del cliente (paese, codice paese, regione e città).

/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_nome_paese $geoip_codice_paese ' '$geoip_region_name $geoip_city '; 

Puoi usarlo in questo modo:

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

Questo produrrà una voce di registro che appare come questa.

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 

È possibile specificare diversi registri utilizzando il access_log direttive allo stesso livello, qui stiamo usando più di un file di log nel contesto http.

/etc/nginx/nginx.conf

http{ ##formato di registro predefinito log_format main '$indir_remoto - $utente_remoto [$locale_ora] "$richiesta" ' '$stato $corpo_bytes_inviato "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; ##request tracing utilizzando il formato personalizzato 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_nome_paese $geoip_codice_paese ' '$geoip_region_name $geoip_city '; ##this utilizza il formato di registro predefinito access_log /var/log/nginx/access.log; ##this usa il nostro formato di log personalizzato access_log /var/log/nginx/custom_log custom; }

Di seguito sono riportati esempi di configurazioni di registrazione più avanzate, utili per i formati di registro che contengono variabili relative alla compressione e per la creazione di file di registro compressi:

access_log /var/log/nginx/custom_log buffer personalizzato 32k; access_log /percorso/a/log.gz compressione gzip flush=5m; 

Configurazione dei log degli errori in Nginx

Nel caso Nginx riscontra eventuali problemi, registra le informazioni che li riguardano nel registro degli errori. Questi problemi rientrano in diversi livelli di gravità: eseguire il debug, Informazioni, Avviso, avvisare, errore (questo è il livello predefinito e funziona a livello globale), critico, mettere in guardia, o emergente.

Il file di registro predefinito è log/error.log, ma normalmente si trova in /var/log/nginx/ sulle distribuzioni Linux. Il error_log La direttiva viene utilizzata per specificare il file di registro e può essere utilizzata nel contesto principale, http, mail, stream, server, location (in quest'ordine).

Dovresti anche notare che:

  • Le configurazioni nel contesto principale vengono sempre ereditate dai livelli inferiori nell'ordine precedente.
  • e le configurazioni nei livelli inferiori prevalgono sulle configurazioni ereditate dai livelli superiori.

È possibile configurare la registrazione degli errori utilizzando la seguente sintassi:

log_errori /percorso/a/file_log livello_log; 

Per esempio:

error_log /var/log/nginx/error_log warn; 

Questo indicherà a Nginx di registrare tutti i messaggi di tipo avvisare e livello di registro più grave critico, mettere in guardia, e emergente messaggi.

Nel prossimo esempio, i messaggi di critico, mettere in guardia, e emergente livelli verranno registrati.

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

Considera la configurazione di seguito, qui abbiamo definito la registrazione degli errori su diversi livelli (nel contesto http e server). In caso di errore, il messaggio viene scritto su un solo log degli errori, quello più vicino al livello in cui è apparso l'errore.

/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 { ascolta 80; nome_server esempio1.com; #this registra i messaggi di errore solo per example1.com error_log /var/log/nginx/example1.error_log warn; …... } server { ascolta 80; nome_server esempio2.com; #this registra i messaggi di errore solo per example2.com error_log /var/log/nginx/example1.error_log; ……. } }

Se ne usi più di uno error_log direttive come nella configurazione sottostante (stesso livello), i messaggi vengono scritti su tutti i log specificati.

/etc/nginx/nginx.conf

server { ascolta 80; nome_server esempio1.com; error_log /var/www/example1.com/log/error_log warn; error_log /var/log/nginx/example1.error_log crit; …... }

Configurazione della registrazione condizionale in Nginx

In alcuni casi, potremmo volere che Nginx esegua la registrazione condizionale dei messaggi. Non tutti i messaggi devono essere registrati da Nginx, quindi possiamo ignorare voci di registro insignificanti o meno importanti dai nostri registri di accesso per istanze particolari.

Possiamo usare il ngx_http_map_module modulo che crea variabili i cui valori dipendono dai valori di altre variabili. I parametri all'interno di un blocco mappa (che dovrebbe esistere solo nel contenuto http) specificano una mappatura tra i valori di origine e risultanti.

Per questo tipo di impostazione, una richiesta non verrà registrata se la condizione viene valutata come “0” o una stringa vuota. Questo esempio esclude le richieste con codici di stato HTTP 2xx e 3xx.

/etc/nginx/nginx.conf

http{ mappa $stato $condizione { ~^[23] 0; predefinito 1; } server{ access_log /path/to/access.log custom if=$condition; } }

Ecco un altro esempio utile per il debug di un'applicazione web in una fase di sviluppo. Ciò ignorerà tutti i messaggi e registrerà solo le informazioni di debug.

/etc/nginx/nginx.conf

http{ map $info $debuggable { default 0; mettere a punto 1; } server{ …….. access_log /var/log/nginx/testapp_debug_access_log debug if=$debuggable; #logs altre richieste access_log /var/log/nginx/testapp_access.log main; ……. } }

Puoi trovare maggiori informazioni, incluso l'accesso a syslog qui.

È tutto per ora! In questa guida, abbiamo spiegato come configurare il formato di registrazione personalizzato per i registri di accesso e di errore in Nginx. Usa il modulo di feedback qui sotto per porre domande o condividere i tuoi pensieri su questo articolo.

Teachs.ru