Zum Inhalt

logger-socket: Rohsocket-basierte Logger-Bibliothek für NGINX (basierend auf nginx-module-lua)

Installation

Wenn Sie noch kein RPM-Repository-Abonnement eingerichtet haben, melden Sie sich an. Dann können Sie mit den folgenden Schritten fortfahren.

CentOS/RHEL 7 oder Amazon Linux 2

yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-logger-socket

CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023

dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-logger-socket

Um diese Lua-Bibliothek mit NGINX zu verwenden, stellen Sie sicher, dass nginx-module-lua installiert ist.

Dieses Dokument beschreibt lua-resty-logger-socket v0.1, veröffentlicht am 18. Februar 2015.


Diese Lua-Bibliothek ist ein Remote-Logging-Modul für ngx_lua:

http://wiki.nginx.org/HttpLuaModule

Sie soll das Standard-Logging-Modul von Nginx, ngx_http_log_module, ersetzen, um Zugriffsprotokolle über einen nicht blockierenden Socket an einen Remote-Server zu senden. Ein gängiger Remote-Log-Server, der Sockets unterstützt, ist syslog-ng.

Diese Lua-Bibliothek nutzt die Cosocket-API von ngx_lua, die 100% nicht blockierendes Verhalten gewährleistet.

Synopsis

    server {
        location / {
            log_by_lua '
                local logger = require "resty.logger.socket"
                if not logger.initted() then
                    local ok, err = logger.init{
                        host = 'xxx',
                        port = 1234,
                        flush_limit = 1234,
                        drop_limit = 5678,
                    }
                    if not ok then
                        ngx.log(ngx.ERR, "failed to initialize the logger: ",
                                err)
                        return
                    end
                end

                -- konstruieren Sie die benutzerdefinierte Zugriffsprotokollnachricht in
                -- der Lua-Variable "msg"

                local bytes, err = logger.log(msg)
                if err then
                    ngx.log(ngx.ERR, "failed to log message: ", err)
                    return
                end
            ';
        }
    }

Methoden

Dieses Logger-Modul ist so konzipiert, dass es innerhalb eines Nginx-Worker-Prozesses von allen Anfragen gemeinsam genutzt wird. Derzeit wird daher nur ein Remote-Log-Server unterstützt. In Zukunft könnten wir die Unterstützung für mehrere Log-Server-Sharding hinzufügen.

init

syntax: ok, err = logger.init(user_config)

Initialisiert den Logger mit Benutzereinstellungen. Dieser Logger muss vor der Verwendung initialisiert werden. Wenn Sie den Logger nicht initialisieren, erhalten Sie einen Fehler.

Verfügbare Benutzereinstellungen sind wie folgt aufgeführt:

  • flush_limit

    Wenn die Größe der gepufferten Nachrichten plus die Größe der aktuellen Nachricht dieses Limit (>=) erreicht, werden die gepufferten Protokollnachrichten an den Log-Server geschrieben. Standardmäßig 4096 (4KB).

  • drop_limit

    Wenn die Größe der gepufferten Nachrichten plus die Größe der aktuellen Nachricht größer ist als dieses Limit (in Bytes), wird die aktuelle Protokollnachricht aufgrund der begrenzten Puffergröße verworfen. Der Standardwert für drop_limit beträgt 1048576 (1MB).

  • timeout

    Legt den Timeout (in ms) für nachfolgende Operationen, einschließlich der connect-Methode, fest. Der Standardwert beträgt 1000 (1 Sekunde).

  • host

    Host des Log-Servers.

  • port

    Portnummer des Log-Servers.

  • path

    Wenn der Log-Server einen stream-typisierten Unix-Domain-Socket verwendet, ist path der Socket-Dateipfad. Beachten Sie, dass host/port und path nicht beide leer sein können. Mindestens eines muss angegeben werden.

  • max_retry_times

    Maximale Anzahl der Wiederholungsversuche, nachdem eine Verbindung zu einem Log-Server fehlgeschlagen ist oder das Senden von Protokollnachrichten an einen Log-Server fehlgeschlagen ist.

  • retry_interval

    Die Zeitverzögerung (in ms) vor dem erneuten Versuch, eine Verbindung zu einem Log-Server herzustellen oder erneut zu versuchen, Protokollnachrichten an einen Log-Server zu senden, standardmäßig 100 (0,1 s).

  • pool_size

    Keepalive-Poolgröße, die von sock:keepalive verwendet wird. Standardmäßig 10.

  • max_buffer_reuse

    Maximale Anzahl der Wiederverwendungen des internen Logging-Puffers, bevor ein neuer erstellt wird (um Speicherlecks zu verhindern).

  • periodic_flush

    Periodisches Flush-Intervall (in Sekunden). Setzen Sie auf nil, um diese Funktion zu deaktivieren.

  • ssl

    Boolean, aktivieren oder deaktivieren Sie die Verbindung über SSL. Standardmäßig false.

  • ssl_verify

    Boolean, aktivieren oder deaktivieren Sie die Überprüfung, ob Host und Zertifikat übereinstimmen. Standardmäßig true.

  • sni_host

    Legen Sie den Hostnamen fest, der in SNI gesendet werden soll und der bei der Überprüfung der Übereinstimmung des Zertifikats verwendet werden soll.

initted

syntax: initted = logger.initted()

Gibt einen booleschen Wert zurück, der angibt, ob dieses Modul initialisiert wurde (durch Aufrufen der init-Methode).

log

syntax: bytes, err = logger.log(msg)

Protokolliert eine Nachricht. Standardmäßig wird die Protokollnachricht im Logger-Modul gepuffert, bis das flush_limit erreicht ist, in diesem Fall wird der Logger alle gepufferten Nachrichten über einen Socket an den Remote-Log-Server senden. bytes ist die Anzahl der Bytes, die erfolgreich im Logger gepuffert wurden. Wenn bytes nil ist, ist err eine Zeichenfolge, die beschreibt, welche Art von Fehler diesmal aufgetreten ist. Wenn bytes nicht nil ist, dann ist err eine vorherige Fehlermeldung. err kann nil sein, wenn bytes nicht nil ist.

flush

syntax: bytes, err = logger.flush()

Flushes any buffered messages out to remote immediately. Usually you do not need to call this manually because flushing happens automatically when the buffer is full.

GitHub

Sie finden zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-logger-socket.