Apache Logging Basics (Italiano)

Il registro Apache registra gli eventi che sono stati gestiti dal server web Apache tra cui richieste da altri computer, risposte inviate da Apache, e le azioni interne al server Apache. Questa sezione della guida spiega le basi di Apache logging compresi i tipi di log generati da Apache, dove sono memorizzati, e come interpretarli. Tratteremo anche argomenti avanzati come l’impostazione di formati di log personalizzati e la configurazione di moduli per ottenere dati più ricchi.,

Tipi di log Apache

Apache genera due tipi di log: log di accesso e log di errore.

Log di accesso

Il log di accesso contiene informazioni sulle richieste in arrivo al server web. Queste informazioni possono includere quali pagine le persone stanno visualizzando, lo stato di successo delle richieste e quanto tempo il server ha impiegato per rispondere. Ecco un esempio di una tipica voce del log di accesso:

Log degli errori

Il log degli errori contiene informazioni sugli errori riscontrati dal server Web durante l’elaborazione delle richieste, ad esempio i file mancanti., Include anche informazioni diagnostiche sul server stesso. Ecco un esempio di log degli errori:

 File does not exist: /var/www/favicon.ico

Log Locations

Per impostazione predefinita, Apache memorizza i log degli accessi e degli errori in file separati sul server. La posizione esatta dipende dal sistema operativo., Puoi trovare la posizione per il tuo sistema operativo cliccando sui seguenti link:

Debian/Ubuntu/Linux Mint
Configurazione Redhat/Fedora/CentOS
openSUSE

Configurazione dei log di Apache

Apache ha un framework di registrazione altamente configurabile che consente di regolare il comportamento di registrazione a livello globale o per ogni host virtuale. Esistono diverse direttive che è possibile utilizzare per modificare il comportamento di registrazione. Alcune delle direttive più comuni sono le direttive log level e log format, che spiegheremo in modo più dettagliato.,

Direttiva a livello di log

La direttivaLogLevel determina il livello minimo di gravità degli eventi registrati in una destinazione specifica. Il livello di gravità rappresenta l’importanza dell’evento e può variare da “Emerg” a “Trace8”, con “Emerg” che rappresenta eventi che possono portare a instabilità e “Trace8” che rappresenta messaggi a livello di traccia. Ad esempio,LogLevel crit consentirà i registri con gravità “Crit”, “Alert” e “Emerg”, ma ignorerà tutti gli altri livelli.,

Formato di log

La direttivaLogFormat controlla il layout e la formattazione degli eventi di log. Apache utilizza il formato di registro comune (CLF) per impostazione predefinita, ma è possibile specificare la propria stringa di formato per modificare i campi inclusi in ogni registro.

È anche possibile utilizzare la direttiva CustomLog per modificare la posizione del file di registro. In Linux, Apache scrive comunemente i log nelle directory / var / log / apache2 o / var / log / httpd a seconda del sistema operativo e delle sostituzioni dell’host virtuale., È anche possibile definire una stringa LogFormat dopo il nome del file, che applicherà solo la stringa di formato a questo file.

Ad esempio, la seguente configurazione scrive i log in logs/access_log utilizzando il formato standard “comune”. La sottodirectory logs / è relativa alla directory specificata nella direttiva ServerRoot:

LogFormat "%h %l %u %t \"%r\" %>s %b" commonCustomLog "logs/access_log" common

CustomLog “logs/access_log” common

È possibile trovare un elenco completo dei campi nella documentazione del log di Apache., Si consiglia di utilizzare almeno i seguenti cinque campi, in quanto sono importanti per il monitoraggio dello stato del server e per la risoluzione dei problemi:

  1. %>s – Il codice di stato HTTP per la richiesta. Questo mostra lo stato della richiesta finale dopo ogni reindirizzamento interno; per lo stato originale, usa %s.
  2. %U – Il percorso URL richiesto, escludendo qualsiasi parametro URL aggiuntivo come una stringa di query.
  3. %a – L’indirizzo IP del client che effettua la richiesta., Questo è utile per identificare il traffico da una particolare fonte.
  4. %T – Quanto tempo ci è voluto per elaborare la richiesta in pochi secondi. Questo è utile per misurare la velocità del tuo sito. Usa %D per effettuare la stessa misurazione in microsecondi.
  5. %{UNIQUE_ID}e – Anche comunemente noto come ID richiesta, questo registra un identificatore univoco con ogni richiesta. Ciò è utile per tracciare una richiesta da Apache al server delle applicazioni Web.,

Assegnazione di Nickname

LogFormat alle stringhe possono essere assegnati nickname, che è possibile utilizzare con una direttivaCustomLog per scrivere i log utilizzando il formato specificato. Ciò consente di utilizzare lo stesso formato di registro per diversi file di registro senza dover ridefinire il formato ogni volta. Ciò è particolarmente utile quando si utilizzano file di registro diversi per più host virtuali.

Ad esempio, creiamo un formato di esempio e chiamiamolo “vhost_combined.,”Creeremo quindi una direttivaCustomLog che scrive i log in un file utilizzando il formato vhost_combined.

LogFormat "%v:%p %h %l %u %t "%r" %>s %O "%{Referer}i" "%{User-Agent}i"" vhost_combinedCustomLog /var/log/apache2/vhost.log vhost_combined

La formattazione come JSON

La memorizzazione dei registri come testo normale li rende facili da scansionare nel caso in cui sia necessario leggere i file di registro. Tuttavia, questo rende difficile utilizzare strumenti come soluzioni di gestione dei log per leggere i log, poiché questi strumenti devono sapere come sono formattati i log. La maggior parte delle soluzioni di gestione dei log supporta il formato di registro Apache predefinito, ma in caso contrario, dovresti considerare l’utilizzo di un formato strutturato come JSON.,

JSON (abbreviazione di JavaScript Object Notation) è un formato flessibile per la memorizzazione di dati strutturati. JSON memorizza una raccolta di coppie nome/valore nidificabili, consentendo di memorizzare quasi tutti i tipi e le strutture di dati. Anche JSON si auto-documenta in modo efficace, poiché il nome della chiave descrive i dati che contiene. JSON supporta molti tipi di dati di base, tra cui stringhe, numeri, booleani, array e valori null.,

Ecco un esempio diLogFormat che memorizza i log in formato JSON:

LogFormat "{ \"time\":\"%t\", \"remoteIP\":\"%a\", \"host\":\"%V\", \"request\":\"%U\", \"query\":\"%q\", \"method\":\"%m\", \"status\":\"%>s\", \"userAgent\":\"%{User-agent}i\", \"referer\":\"%{Referer}i\" }"

Le sostituzioni predefinite degli host virtuali

Gli host virtuali (vhost) vengono utilizzati per eseguire più di un sito web su un singolo server Apache. È possibile definire una configurazione di registrazione separata per ogni vhost, a cui viene data priorità rispetto alla configurazione di registrazione globale. Ciò consente di registrare ogni sito Web in una directory separata, ad esempio. Lasciando questi parametri fuori default per la configurazione di registrazione globale.

Ad esempio, la seguente configurazione è per un esempio vhost at.,com. I log sono scritti per separare i fileaccess.log eerror.log nella directory/var/www/example.com/logs:

Le sezioni seguenti mostrano le posizioni dei file di configurazione predefinite e le direttive utilizzate in diverse distribuzioni Linux.

Debian/Ubuntu/Linux Mint

Nelle distribuzioni basate su Debian, la configurazione vhost predefinita per i siti non crittografati (porta 80) può essere trovata in/etc/apache2/sites-available/000-default.conf. La configurazione vhost predefinita per i siti crittografati con SSL / TLS (porta 443) è /etc/apache2/sites-available/default-ssl.conf.,

Tabella delle direttive predefinite

* Variabile d’ambiente condizionata. Fornisce supporto per più istanze di server Apache.

** Variabile d’ambiente. Utilizzato per impostare dinamicamente il percorso di log iniziale.

Red Hat/Fedora/CentOS

Nelle distribuzioni basate su Red Hat, il file di configurazione principale si trova in/etc/httpd/conf/httpd.conf. È possibile inserire file di configurazione vhost aggiuntivi nella directory /etc/httpd/conf.d, che viene letta automaticamente dal server all’avvio.

Tabella delle direttive predefinite

* Condizionata su log_config_module caricato.,

** Condizionato su logio_module caricato.

openSUSE

In openSUSE, la configurazione vhost predefinita per i siti non crittografati (porta 80) si trova in/etc/apache2/default-vhost.conf, mentre la configurazione predefinita per i siti crittografati con SSL/TLS si trova in/etc/apache2/default-vhost-ssl.conf.

Tabella delle direttive predefinite

* Condizionata su log_config_module caricato.

** Condizionato su logio_module caricato.

*** Condizionato su mod_ssl caricato.,

Moduli relativi ai log

Il server web Apache offre una serie di moduli che modificano il modo in cui funziona Apache o ne estendono le capacità. I seguenti moduli aggiungono o modificano il comportamento di registrazione in modi utili.

mod_log_config

Questo è il modulo di registrazione di base che Apache utilizza, e quello che abbiamo trattato in questa sezione della guida.

mod_log_debug

Questo modulo fornisce opzioni aggiuntive per la registrazione dei messaggi di debug., Ad esempio, puoi registrare gli eventi su un percorso URL specifico, registrare le richieste dopo che sono state elaborate, registrare i messaggi da un client specifico se generano timeout e altro ancora. Si noti che questo modulo è sperimentale e potrebbe non essere incluso nella distribuzione Apache.

Ad esempio, la seguente configurazione registra l’indirizzo IP di un client ogni volta che richiede un percorso specifico:

mod_log_forensic

Questo modulo consente la registrazione prima e dopo l’elaborazione di una richiesta. A ogni voce viene assegnato un ID univoco, che può essere utilizzato per tracciare gli eventi tra il registro forense e il registro normale., Tuttavia, il logger forense non supporta i formati personalizzati. Questo modulo sostituisce anche il modulo mod_unique_id.

Una volta abilitato il modulo, è possibile utilizzare la parola chiaveforensic per specificare quale file di registro è il registro forense. È inoltre possibile utilizzare il modello%{forensic-id} in altre stringheLogFormat per aggiungere dati forensi ai registri normali. Qui, usiamo/var/www/example.com/logs/forensic.log:

Ogni riga nel registro forense inizia con un carattere “+” o” -”., “+”indica la riga di registro delle voci per questa particolare richiesta e” ” ” indica le voci successive per la stessa richiesta.

Ad esempio, il seguente log delle voci è stato generato chiamandohttp://localhost utilizzando il formato di log predefinito:

La voce del log finale dalla stessa richiesta appare come:

-3264:55958cb4:0

Se una voce finale non appare nel log, la richiesta non è stata completata.

mod_logio

Questo modulo aggiunge la possibilità di registrare il numero di byte inviati e ricevuti per richiesta., Questo include byte ricevuti, inviati e trasferiti (combinazione di ricevuti e inviati). Il modulo tiene anche conto con precisione dei cambiamenti di dimensione dovuti alla crittografia SSL e TLS. Questo modulo richiede mod_log_config ed è tipicamente incluso in Apache per impostazione predefinita.

Questo modulo aggiunge la direttiva LogIOTrackTTFB On|Off, che alterna la possibilità di tenere traccia del tempo al primo byte (TTFB). TTFB è la quantità di tempo da quando viene ricevuta una richiesta a quando la risposta viene inviata per la prima volta al client., È quindi possibile utilizzare %^FBper includere la misurazione TTFB in una stringa LogFormat.

mod_filter

Questo modulo fornisce filtri sensibili al contesto alla catena di output registrando un numero qualsiasi di provider di filtri. mod_filter non è specifico per la registrazione, ma consente di estrarre richieste specifiche in base al provider di filtri. I contenitori di contesto includono: configurazione principale di Apache, configurazione vhost, all’interno dei tag di directory e .file htaccess.,

L’utilizzo di questo modulo consente di filtrare le richieste contenenti elementi come determinati criteri di iniezione e l’indirizzo IP da cui proviene.

Questo modulo è fornito di default in molte distribuzioni di pacchetti, ma potrebbe richiedere l’abilitazione. Ai fini della registrazione, la direttiva FilterTrace inserisce le informazioni nel registro degli errori.,li> FilterDeclare – dichiara un filtro smart

  • FilterProtocol – provoca il mod_filter per gestire le intestazioni di risposta correttamente
  • FilterProvider registri filtro provider
  • FilterTrace – permette di debug/le informazioni di diagnostica per un errore di registro prima del provider di elaborazione
  • L’esempio seguente applica il filtro in un vhost contesto contenitore condizionale di filtro e di includere i moduli:

    mod_unique_id:

    Questo modulo crea un ambiente variabile e un identificatore univoco per ogni richiesta., È spesso incluso nelle distribuzioni di pacchetti ma potrebbe richiedere l’abilitazione. Questo identificatore univoco viene scritto nel registro di accesso.

    Questo modulo è stato sostituito da mod_log_forensic per scopi forensi, ma è ancora supportato per altri.

    A differenza dell’identificatore forense, l’identificatore univoco viene passato al gestore dell’applicazione tramite la variabile di ambiente UNIQUE_ID. Ciò consente agli sviluppatori di applicazioni di tracciare una richiesta tramite il server Web al server delle applicazioni. Può essere utile per il debug di una richiesta.,

    Apache spegne i processi figlio per gestire le richieste e un’istanza figlio elabora diverse richieste alla volta. Di conseguenza, a volte è consigliabile utilizzare un identificatore univoco per identificare una singola richiesta su più istanze server e processi figlio.

    Una volta abilitato, il modulo fornisce un identificatore per impostazione predefinita al gestore dell’applicazione.,

    Ad esempio:

    UNIQUE_ID: Vaf3en8AAQEAAAtoQlAAAAAA

    L’identificatore è costruito da un indirizzo IP a 32 bit, ID di processo a 32 bit, timestamp a 32 bit accoppiato a un contatore a 16 bit per una risoluzione più stretta di un indice di thread a 32 bit a un solo secondo. Il componente timestamp è UTC per evitare problemi con le regolazioni dell’ora legale. Il gestore dell’applicazione dovrebbe trattare l’identificatore solo come token opaco e non sezionato in costituenti.

    Vederlo. Analizzalo. Ispezionalo. Risolvilo

    Vedi cosa conta.

    INIZIA LA PROVA GRATUITA

    Lascia un commento

    Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

    Vai alla barra degli strumenti