Gibt es eine Möglichkeit, eine eindeutige ID pro Anforderung für Nginx zu protokollieren?

11

Hierfür scheint es einige Module von Drittanbietern zu geben

Wenn möglich, möchte ich nginx jedoch nicht neu erstellen, was meiner Meinung nach eine Voraussetzung für die Verwendung dieser beiden Module ist. Mein erster Versuch war, $msecmit zu verwenden, $pidaber das hat nicht geklappt (ich hatte einen Prozess, der zwei Anfragen gleichzeitig Millisekunde bediente). Ich habe darüber gelesen $connectionund es scheint, als würde das in Verbindung mit funktionieren $msec. Funktioniert dies oder gibt es einen besseren Weg, ohne Module von Drittanbietern zu verwenden?

John
quelle

Antworten:

9

Update für Nginx Version v1.11 (Mai 2016):

http://nginx.org/en/docs/http/ngx_http_core_module.html#var_request_id

Sie können verwenden $request_id:

eindeutige Anforderungskennung, generiert aus 16 zufälligen Bytes, hexadezimal (1.11.0)

user5994461
quelle
Für die alte Version (<= 1.2.7) können Sie so etwas wie "$ pid- $ date_local" verwenden, das für die meisten Anwendungen eindeutig genug sein sollte.
Bactisme
6

Sie können nginx-extraseingebettetes Perl oder Lua verwenden und verwenden.

$ sudo apt-get install libossp-uuid-perl

In Ihrer Nginx-Konfiguration:

perl_require "Data/UUID.pm";
perl_set $request_uuid 'sub {

    my $ug = new Data::UUID;
   return $ug->create_str();
}';

Und dann für eine gegebene location:

proxy_set_header Request-Id $request_uuid

Wir verwenden dies in der Produktion und sind sehr zufrieden mit der besseren Nachverfolgung unserer Backend-Services.

jabley
quelle