So protokollieren Sie die Startzeit einer Anfrage in Nginx

7

Wie in dieser Antwort angegeben , bedeutet die Variable $ time_local im Zugriffsprotokoll von Nginx die Endzeit einer Anforderung (oder in der Nähe von).

Gibt es dann eine Möglichkeit, die Startzeit einer Anforderung im Nginx-Zugriffsprotokoll zu protokollieren?

Ich habe herum gegoogelt, kann aber keine Hinweise finden, um dies zu erreichen. Komm schon! Ist das nicht eine sehr einfache Funktion für einen Webserver? Sagen Sie mir nicht, ich soll die $ request_time von der $ time_local subtrahieren ...

reniaL
quelle
1
Haproxy hat diese Funktion ('Option logasap'), Nginx jedoch nicht.
sendmoreinfo

Antworten:

1

Nun, es gibt einen Patch für nginx ( https://gist.github.com/rkbodenner/318681#comment-610856 ), der die Startzeit der Anforderung als Variable verfügbar macht.

Ich denke, es könnte in Ihrem Fall nützlich sein.

Max Kochubey
quelle
Obwohl der Patch für uns Neulinge etwas zu schwierig zu verstehen und anzuwenden ist, weist er darauf hin, dass es in Nginx keine solche integrierte Funktion gibt. Danke auf jeden Fall.
ReniaL
1

Sie können schreiben $msecund $request_timein das Protokoll und verwenden $msec- $request_timeals Startzeit beim Parsen.

Slach
quelle
0

Ich weiß, dass dies eine alte Frage ist, aber ich denke, dass sie ein Update verdient, denn nginx>1.2.5(Stand Juli 2017 ist Nginx stabil 1.13) ist dies jetzt trivial

Im Protokoll verwenden

start_time="$msec"

Oder um einen Header hinzuzufügen:

add_header X-Request-Start $msec

oder für einen Proxy

proxy_set_header X-Request-Start $msec
SColvin
quelle
In der Dokumentation heißt es, dass $ msec "Zeit in Sekunden mit einer Millisekunden-Auflösung zum Zeitpunkt des Protokollschreibens " ist und AFAIU-Zugriffsprotokolle geschrieben werden, wenn die Anforderung endet.
Marius Gedminas
Ich denke, Sie verwechseln $ msec in Protokollnachrichten mit einer gleichnamigen Variablen, die den Headern hinzugefügt wird. Ein Gedanke ist sicher - in diesem Zusammenhang ist es nicht die Zeit, in der Protokolle geschrieben werden, da Sie sagen, dass Protokolle am Ende von Anforderungen geschrieben werden und dieser Header hinzugefügt wird, bevor Anforderungen weitergeleitet werden. Nginx müsste in der Lage sein, die Zukunft vorherzusagen, um zu wissen, wann eine Anfrage endet, bevor sie weitergeleitet wird.
SColvin
Aber das ist für die Alternativen add_header / proxy_set_header, nicht wahr? Ich bin immer noch verwirrt über die erste vorgeschlagene Alternative "im Protokoll verwenden start_time="$msec"".
Marius Gedminas
Ja, es sei denn, es gibt eine Möglichkeit, Protokolle am Anfang und nicht am Ende von Anfragen zu schreiben
SColvin