2017-01-27 2 views
3

Datensätze in meiner Nginx-Protokolldatei sind nicht in der richtigen Reihenfolge. (Edit: von "out of order" ich meine chronologisch. ZB Loglines für 2017-02-21 09:13:26 wird oft vor Zeilen für 2017-02-21 09:13:45) Vielleicht eine bestimmte Menge Out-of-Order-Datensätze sind zu erwarten, da sie protokolliert werden, nachdem eine Anfrage abgeschlossen wurde, nicht beim Empfang. Dies ist jedoch eine Möglichkeit, die Anzahl der Anforderungen, die außerhalb der Reihenfolge protokolliert werden, einschließlich der bekannten kurzen (schnellen) Anforderungen für kleine statische Dateien.Nginx-Protokolle sind außer Betrieb, wahrscheinlich aufgrund der gepufferten Protokollierung

Ist dies ein bekannter Nebeneffekt der Verwendung der gepufferten Protokollierung oder kann dies verbessert werden?

Für ein vollständigeres Bild bekommen, sind hier einige andere Konfigurationsparameter erstellt:

In nginx.conf:

log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 

In der Konfigurationsdatei für den virtuellen Host:

server { 
    #The backlog parameter matches sysctl net.core.somaxconn setting. Default value is 511 on Ubuntu. 
    listen 80 backlog=30000; 
    server_name www.example.com; 
    access_log /var/log/nginx/access.log main buffer=128k; 
    error_log /var/log/nginx/error.log; 
    root /var/www/html/website; 
    ... 
} 
+0

Nicht zu sicher, warum ist das ein Problem ... – cnst

+0

Was meinst du mit "außer Betrieb"? Wechseln die Protokollzeitstempel manchmal zurück oder werden die protokollierten URLs in einer Reihenfolge angezeigt, die nicht Ihren Erwartungen entspricht, oder etwas anderes? Die Pufferung sollte die Reihenfolge nicht beeinflussen. Es bewirkt nur, dass der Server eine große Anzahl von Nachrichten im Speicher ansammelt, so dass sie in einem einzigen großen Schreibvorgang in die Protokolldatei übertragen werden können, was effizienter ist als das Schreiben einzelner Nachrichten. – ottomeister

+0

@ottomeister Ich meine, die Zeilen sind nicht nach der Zeit sortiert, wie Sie normalerweise eine Protokolldatei erwarten würde. – tinkerr

Antwort

4

Ja, es ist Pufferproblem. Wenn Sie nur wenige Arbeiter einsetzen, hat jeder Arbeiter einen eigenen Puffer.

Wege zu verbessern:

  • disable Pufferung
  • Abnahme Puffergröße (1)
  • flush Optionen hinzufügen, wenn bündig auf die Festplatte noch selten
  • eigenen Log Collector erstellen mit Sortierung (nginx kann z. B. das syslog-Protokoll verwenden)

Normalerweise müssen Sie sich jedoch nicht um die Reihenfolge der Protokollsätze kümmern. Log-analytische Systeme sortieren es selbst.

(1) Bei Linux-Systemen darf die Puffergröße die Größe eines atomaren Schreibens in eine Festplattendatei nicht überschreiten. Im modernen Linux - es ist 64k. Nun, ich bin mir über diese Größe nicht 100% sicher, weil die Informationen sehr auffällig sind. Aber wenn Sie im Protokoll unterbrochene Linien finden, verringern Sie diese Größe.

Verwandte Themen