Ideen und Methoden zur Realisierung von Echtzeit-Protokollberichten mit der reinen Nginx-Konfiguration

Ideen und Methoden zur Realisierung von Echtzeit-Protokollberichten mit der reinen Nginx-Konfiguration

Vorwort

Nginx ist ein häufig verwendetes Lastenausgleichs-Gateway. Es generiert viele Protokolle. Da die Nginx-Konfigurationsdatei jedoch ein deklaratives Programmierparadigma ist, ist es nicht bequem, die Prozesssteuerung zu beschreiben, sodass die Protokollberichterstattung nicht durch einfache Anweisungen erreicht werden kann.

Normalerweise erfordert die Nginx-Protokollberichterstattung das Schreiben eines Shell-Skripts oder eines Skripts in einer anderen Sprache, um die Nginx-Protokolldatei regelmäßig zu analysieren und dann zu melden.

Mit dem NJS-Modul ist eine Protokollberichterstattung in Echtzeit möglich.

Aufgrund der Beschränkung der vom NJS-Modul unterstützten Anweisungen ist es jedoch nicht möglich, die Protokollberichterstattung durch eine einzelne Anweisung gut zu implementieren. Durch die Kombination mehrerer Anweisungen kann eine nicht blockierende Echtzeit-Protokollberichterstattung erreicht werden.

Diese Lösung ist in Nginx implementiert und ist nicht auf andere Prozesse wie Node, Python usw. angewiesen.

Umsetzungsideen

Nginx hat viele Anweisungen. Das Folgende ist eine kürzlich untersuchte Implementierungsmethode. Wenn Sie eine elegantere Implementierungsmethode haben, hinterlassen Sie bitte eine Nachricht zur Kommunikation.

Obwohl wir über das leistungsstarke NJS-Modul zum Schreiben von JS-Skripten verfügen, unterliegen die Anweisungen des NJS-Moduls zahlreichen Einschränkungen und können keine Funktionen wie Node ausführen.

Um eine Echtzeitberichterstattung der Protokolle zu erreichen, müssen die folgenden beiden Voraussetzungen erfüllt sein:

  1. Jede Anfrage kann auslösen
  2. Report im Hintergrund, ohne die Bearbeitung der aktuellen Anfrage zu blockieren

Die häufig verwendete Anweisung js_set kann bei jeder Anforderung ausgelöst werden, unterstützt jedoch nur synchrone Vorgänge. Fetch- und Subrequest-Methoden können nicht verwendet werden.

Die Fetch-Funktion kann in der js_content-Direktive verwendet werden. Sie kann jedoch nur lokal verwendet werden. Daher können andere Direktiven verwendet werden, um die Anforderung an den js_content-Pfad weiterzuleiten, und der Protokollbericht kann in der Direktive vervollständigt werden.

Die Anweisung auth_request des Moduls http_auth_request_module wird verwendet, um die Berechtigungsüberprüfung von Anfragen, wie z. B. die JWT-Überprüfung, durchzuführen. Diese Anweisung wird für jede Anfrage ausgelöst, erstellt eine Unteranfrage und bestimmt das Ergebnis der Berechtigungsüberprüfung basierend auf dem Rückgabeergebnis der Anfrage.

Daher können diese beiden Module kombiniert werden, um Protokollberichte zu erstellen.

Implementierungsschritte

1. Nginx kompilieren

Um diese Funktion zu implementieren, muss Nginx die Module ngx_http_js_module und ngx_http_auth_request_module unterstützen. Diese beiden Module sind nicht standardmäßig installiert. Sie müssen sie selbst kompilieren und implementieren.

  1. Informationen zur Installation des NJS-Moduls finden Sie unter When JS Meets Nginx
  2. Das Modul http_auth_request_module kann durch Hinzufügen des Parameters --with-http_auth_request_module kompiliert werden

Kompilieren

./configure --add-module=[NJS-Modulpfad]/NJS/nginx --with-http_auth_request_module 

machen && machen installieren 

2. Die Konfigurationsdatei lautet wie folgt

http {
    js_import http.js; # JS-Dateiserver importieren {
        hören Sie 80;
    
        auth_request /proxy_report; # Diese Anweisung wird zu Beginn jeder Anfrage ausgelöst und erstellt eine Unteranfrage, die an den Pfadspeicherort des Proxy-Reports weitergeleitet wird / { 
            Index Index.html Index.htm;
        }
        
        Standort /Proxy_Bericht {
            intern; #Beschränken Sie nur interne Anfragen. #Speichern Sie die URI- und Methodendaten der ursprünglichen Anfrage im Header. Denn die Auth_Request-Anfrage wird diese Daten ändern.            
            Proxy_set_header X-Original-URI $request_uri;
            Proxy_set_header X-Original-METHODE $request_method;
            # Weiterleitung an einen anderen Server proxy_pass http://localhost:8080/report;
        }
    }
    
    Server {
        hören Sie 8080;
        # Die Berichtsschnittstelle ist auf einem anderen Server platziert und es gibt keine auth_request-Anweisung auf dem Server, um Schleifenauslöseanfragen zu vermeiden location /report {
            #Führen Sie über die Anweisung js_content ein js-Verarbeitungsskript ein, um den Berichtsvorgang abzuschließen js_content http.report;
        }
    }
}
// http.js fileimport qs von "Querystring";

asynchroner Funktionsbericht (r) {
    lass args = {
        // Holen Sie sich den Original-URI und die Methode aus dem Header-URI: r.headersIn['X-Original-URI'],
        Methode: r.headersIn['X-Original-METHOD'],
        Remote-Adresse: r.Remote-Adresse,
        Status: r.status,
        headersIn: JSON.stringifry(r.headersIn),
    }
    // Eine asynchrone Anfrage ausgeben, ohne den aktuellen Anfrageprozess zu blockieren und den Bericht im Hintergrund fertigstellen ngx.fetch(`http://[report service path]?${qs.stringify(args)}`, {
        Methode: 'GET',
    })
    //Gibt einen Statuscode von 200 zurück, um zu bestätigen, dass der Befehl erfolgreich war. r.return(200)
}

Standard exportieren { Bericht }

Zusammenfassen

Damit ist dieser Artikel über die Ideen und Methoden zur Implementierung von Echtzeit-Protokollberichten mit der Nginx-Pure-Konfiguration abgeschlossen. Weitere relevante Inhalte zum Echtzeit-Bericht von Nginx-Protokollen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Anweisungen zur Nginx-Protokollkonfiguration
  • Detaillierte Schritte zum Aktivieren der Echtzeitanzeige von Zugriffsprotokollen in Nginx
  • Zusammenfassung gängiger Befehle zur Analyse von Nginx-Protokollstatistiken

<<:  Einführung in die Leistungsoptimierung von MySQL-Datenbanken

>>:  Mit CSS3 erstellter Hintergrundverlaufsanimationseffekt

Artikel empfehlen

Einführung in den B-Tree-Einfügeprozess

Im vorherigen Artikel https://www.jb51.net/articl...

Eine kurze Analyse der vier Importmethoden und Prioritäten in CSS

Erstens: 4 Möglichkeiten, CSS einzuführen Es gibt...

So verwenden Sie SessionStorage und LocalStorage in Javascript

Inhaltsverzeichnis Vorwort Einführung in SessionS...

Verwenden Sie CSS-Variablen, um coole und erstaunliche Schwebeeffekte zu erzielen

Kürzlich habe ich auf der Grover-Website eine lus...

HTML-Tabellen-Markup-Tutorial (43): VALIGN-Attribut der Tabellenüberschrift

In vertikaler Richtung können Sie die Ausrichtung...

Ein- und Ausblenden von HTML-Elementen durch Anzeige oder Sichtbarkeit

Manchmal müssen wir steuern, ob HTML-Elemente auf ...

So verwenden Sie JS WebSocket zur Implementierung eines einfachen Chats

Inhaltsverzeichnis Kurze Umfrage Langfristige Abf...

Benutzerdefinierte Tabbar-Komponente für das WeChat-Applet

In diesem Artikel wird der spezifische Code der b...