2012-11-06 7 views
6

Sto provando a modificare il mio formato di log di accesso nginx per includere la durata della richiesta, in secondi.Scrittura del tempo di richiesta totale in secondi per un log di accesso di nginx, possibilmente utilizzando una variabile calcolata

Vedo due possibili variabili può usare:

1) $request_time

2) $upstream_response_time

Tuttavia entrambe queste variabili sono espressi in microsecondi, e ho bisogno di questo valore da rendere in secondi. Esiste un modo per specificare l'output come un'espressione (ad esempio $request_time * 1000) o eseguirlo in qualche altro modo?

Grazie

+6

In realtà, entrambi sono già in secondi (con una risoluzione in millisecondi, ad esempio '$ request_time' assomiglierà a' 1.234'). Si noti bene che il formato '$ upstream_response_time' è più complesso in quanto potrebbe contenere il tempo per [più server upstream] (http://nginx.org/en/docs/http/ngx_http_upstream_module.html#variables). –

risposta

10

Il server Web non è una calcolatrice o un programma statistico. La sua funzione di registrazione consiste nel fornire i dati grezzi con i quali è possibile eseguire l'analisi. Se il tuo programma di analisi non è in grado di convertire i microsecondi in secondi, dovresti cercare altri software. In ogni caso, non è realistico aspettarsi che la funzione di registrazione di un programma esegua conversioni di unità per conto dell'utente. L'obiettivo della registrazione non è quello di formattare, ma di registrare ciò che ha fatto senza influire sulle prestazioni della sua funzionalità principale.

0

Se si utilizza un reporter come LogStash (stack ELK), è possibile eseguire alcuni calcoli durante l'analisi del log. Ecco il mio esempio di convertire secondo in millisecondi nel mio filtro Logstash per Nginx:

grok { 
     match => { 
     "message" => "%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] \"%{WORD:verb} %{URIPATHPARAM:logMessage} HTTP/%{NUMBER:httpversion}\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) (?:\"(?:%{URI:referrer}|-)\"|%{QS:referrer}) %{QS:agent} rt=%{NUMBER:duration_sec} cid=%{GREEDYDATA:correlationId}" 
     } 
} 
mutate { convert => [ "duration_sec", "float" ] } 
ruby { code => "event['duration_ms'] = event['duration_sec'].to_f * 1000" } 

Spero che questo aiuti.

Problemi correlati