Zum Inhalt

influx: Nginx-module-lua-Client für InfluxDB

Installation

Wenn Sie noch kein RPM-Repository-Abonnement eingerichtet haben, melden Sie sich an. Danach 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-influx

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

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

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

Dieses Dokument beschreibt lua-resty-influx v0.2.1, das am 27. Dezember 2017 veröffentlicht wurde.


Diese Bibliothek bietet eine OpenResty-Schnittstelle zum Schreiben von Datenpunkten auf einen InfluxDB-Server über UDP- und HTTP-Schnittstellen. Objektbasierte und Pufferung pro Worker-Schnittstellen werden bereitgestellt.

Synopsis

Objektschnittstelle:

http {
    server {
        access_by_lua_block {
            local i = require "resty.influx.object"

            local influx, err = i:new({
                host = "127.0.0.1",
                port = 8086,
                proto = "http",
                db = "db",
                hostname = "localhost",
                auth = "user:password",
            })

            if (not influx) then
                ngx.say(err)
                return
            end

            influx:set_measurement("foo")
            influx:add_tag("foo", "bar")
            influx:add_field("value", 1)
            influx:buffer()

            -- weitere Datenpunkte hinzufügen und puffern

            local ok, err = influx:flush()

            if (not ok) then
                ngx.say(err)
            end
        }
    }
}

Pufferungsschnittstelle:

http {
    init_worker_by_lua_block {
        local ibuf = require "resty.influx.buffer"

        local ok, err = ibuf.init({
            host = "127.0.0.1",
            port = 8089,
            proto = "udp",
        })

        if (not ok) then
            ngx.log(ngx.ERR, err)
        end
    }

    server {
        access_by_lua_block {
            local ibuf = require "resty.influx.buffer"

            ibuf.buffer({
                measurement = "foo",
                tags = {
                    { foo = "bar" }
                },
                fields = {
                    { value = 1 }
                }
            })
        }

        log_by_lua_block {
            local ibuf = require "resty.influx.buffer"

            ibuf.flush()
        }
    }
}

Verwendung

Optionen

lua-resty-influx bietet eine rein objektbasierte Schnittstelle sowie eine Pufferungsschnittstelle, die Datenpunkte pro Worker speichert und dann asynchron über ngx.timer.at puffert. Die Erstellung der Pufferungsschnittstelle sollte in der Phase init_worker_by_lua über die Funktion resty.influx.buffer.init erfolgen; die Erstellung der objektorientierten Schnittstelle sollte in Ihrem entsprechenden Phasenhandler über resty.influx.object:new erfolgen. In beiden Fällen stehen die folgenden Optionen zur Verfügung:

host

Standard: 127.0.0.1

Setzt den Host, zu dem ngx.socket.udp und resty.http eine Verbindung herstellen werden.

port

Standard: 8086

Setzt den Port, zu dem ngx.socket.udp und resty.http eine Verbindung herstellen werden. Standardmäßig ist dies 8086, da das Standardprotokoll HTTP ist.

db

Standard: 'lua-resty-influx'

Setzt die Datenbank, zu der resty.http eine Verbindung herstellen wird. Diese Option wird ignoriert, wenn udp das konfigurierte Protokoll ist.

hostname

Standard: host

Setzt den Hostnamen, den resty.http für den Host-Header bei HTTP-Anfragen definiert. Standardmäßig entspricht dies der konfigurierten host-Option. Diese Option wird ignoriert, wenn udp das konfigurierte Protokoll ist.

proto

Standard: http

Setzt das Protokoll, über das resty.influx eine Verbindung zum Remote-Server herstellen wird. Beachten Sie, dass UDP eine signifikante Leistungsverbesserung bieten kann, insbesondere beim Senden vieler kleiner Datensätze, jedoch auf Kosten der Fehlerbehandlung und Authentifizierung.

precision

Standard: ms

Setzt die Zeitstempelsgenauigkeit, mit der resty.influx Zeitstempel definiert. Derzeit werden ms, s und none unterstützt; wenn none konfiguriert ist, wird kein Zeitstempel als Teil der Zeilenprotokollnachricht gesendet, und der Remote-Influx-Server verwendet die Nanosekundenpräzision basierend auf der lokal auf dem Server befindlichen Uhr.

ssl

Standard: false

Konfiguriert HTTP-Anfragen, um einen TLS-Handshake durchzuführen, bevor Daten gesendet werden. Diese Option wird ignoriert, wenn udp das konfigurierte Protokoll ist.

auth

Standard: ''

Setzt den Benutzernamen und das Passwort, die an das Remote-HTTP(S) übergeben werden. Dieser Wert muss als einzelner String im Format user:password angegeben werden. Diese Option wird ignoriert, wenn udp das konfigurierte Protokoll ist.

Objektorientierte Schnittstelle

Die folgenden Methoden sind über die Objektschnittstelle verfügbar:

influx:set_measurement

Syntax: influx:set_measurement(string)

Setzt die Messung für den Datenpunkt, der mit dem aktuellen Objekt verknüpft ist.

influx:add_tag

Syntax: influx:add_tag(key, value)

Fügt einen Datenpunkt-Tag als Schlüssel-Wert-Paar hinzu. Schlüssel und Werte werden gemäß (https://docs.influxdata.com/influxdb/v1.0/write_protocols/line_protocol_reference/) escaped.

influx:add_field

Syntax: influx:add_field(key, value)

Fügt ein Datenpunktfeld als Schlüssel-Wert-Paar hinzu. Felder und Werte werden gemäß (https://docs.influxdata.com/influxdb/v1.0/write_protocols/line_protocol_reference/) escaped. Ganzzahlige Werte (Zahlen, die mit einem i versehen sind) werden korrekt interpoliert.

influx:stamp

Syntax: influx:stamp(time?)

Stempelt den Datenpunkt, der mit dem aktuellen Objekt verknüpft ist, mit einem optionalen beliebigen Wert (muss als Zahl angegeben werden); andernfalls wird das Objekt mit dem entsprechenden Wert basierend auf der Genauigkeit gestempelt, die über die Optionen an new für die Objektschnittstelle angegeben wurde.

influx:clear

Syntax: influx:clear()

Löscht die Messung, Tags und Felder des Datenpunkts, der mit dem aktuellen Objekt verknüpft ist. Beachten Sie, dass dies intern aufgerufen wird, wenn buffer oder write aufgerufen werden.

influx:buffer

Syntax: local ok, err = influx:buffer()

Puffert den Inhalt des Datenpunkts, der mit dem aktuellen Objekt verknüpft ist, für späteres Flushen. Gibt true bei Erfolg zurück; andernfalls false und eine Zeichenfolge, die den Fehler beschreibt (z. B. ungültige Bedingungen, unter denen gepuffert werden soll).

influx:flush

Syntax: local ok, err = influx:flush()

Flushes alle gepufferten Datenpunkte, die mit dem aktuellen Objekt verknüpft sind. Gibt true bei Erfolg zurück; andernfalls false und eine Zeichenfolge, die den Fehler beschreibt (z. B. verbleibende Daten, die gepuffert werden müssen, oder keine verfügbaren gepufferten Datenpunkte).

influx:write

Syntax: local ok, err = inflush:write()

Schreibt den Datenpunkt, der mit dem aktuellen Objekt verknüpft ist, ohne den vorhandenen Objektpuffer zu leeren. Dies ist im Wesentlichen eine Kurzform für den Aufruf von buffer und flush für einen einzelnen Datenpunkt. Beachten Sie, dass zuvor gepufferte Datenpunkte weiterhin im Puffer verbleiben und über flush gesendet werden müssen, wenn gewünscht.

Pufferungsschnittstelle

Die folgenden Funktionen sind über die Pufferungsschnittstelle verfügbar:

influx.buffer

Syntax: influx.buffer(data_table)

Puffert einen neuen Datenpunkt im Puffer des jeweiligen Workers. data_table muss eine Tabelle sein, die die folgenden Schlüssel enthält:

  • measurement: String, der die Messung des Datenpunkts angibt
  • tags: Ganzzahl-indizierte Tabelle, die Tabellen von Schlüssel-Wert-Paaren enthält, die die Tag-Elemente darstellen. Siehe die Synopsis für Beispiele.
  • fields: Ganzzahl-indizierte Tabelle, die Tabellen von Schlüssel-Wert-Paaren enthält, die die Feld-Elemente darstellen. Siehe die Synopsis für Beispiele.

Beachten Sie, dass der Zeitstempel derzeit automatisch mit ms-Genauigkeit gesetzt wird.

influx.flush

Syntax: influx.flush()

Schreibt alle im aktuellen Worker-Prozess gepufferten Datenpunkte an den konfigurierten Influx-Host. Gibt true bei Erfolg zurück; andernfalls false und eine Zeichenfolge, die den Fehler von ngx.timer.at beschreibt.

Dieser Vorgang gibt sofort zurück und läuft asynchron.

GitHub

Sie finden möglicherweise zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-influx.