Minimalistischer UDP/TCP-Statistik-Client ohne Abhängigkeiten für Node.js
Es gibt Zeiten, in denen Sie Kennzahlen sammeln müssen und etwas Einfaches möchten, ohne zu viel Textbausteine zu schreiben. dats
helfen Ihnen die Daten!
Ziel dieses Clients ist es, eine einfache statsd-kompatible API mit einigen optionalen Varianten für die erweiterte Verwendung zu haben, wie zum Beispiel: gepufferte Metriken und entweder UDP/TCP-Transporte!
Unterstützt Node.js >=14.0.0
. Wenn Sie ein Node.js v12
Benutzer sind, lesen Sie [email protected]
.
Client
new Client(options)
Client.close([cb])
Client.connect()
Client.counter(string[, value, sampling])
Client.timing(string, value[, sampling])
Client.gauge(string, value)
Client.set(string, value)
Das Paket ist bei npm erhältlich.
Sie können es mit npm
installieren
# lastest stable version
$ npm i -S @immobiliarelabs/dats
# latest development version
$ npm i -S @immobiliarelabs/dats@next
oder yarn
# lastest stable version
$ yarn add @immobiliarelabs/dats
# latest development version
$ yarn @immobiliarelabs/dats@next
import Client from '@immobiliarelabs/dats' ;
const stats = new Client ( {
host : 'udp://someip:someport' ,
namespace : 'myGrafanaNamespace' ,
// Optionally register a global handler to track errors.
onError : ( error ) => {
processError ( error ) ;
} ,
} ) ;
// Send counter (myGrafanaNamespace.some.toCount)
stats . counter ( 'some.toCount' , 3 ) ;
stats . counter ( 'some.toCount' ) ; // defaults to 1
stats . counter ( 'some.toCount' , 1 , 10 ) ; // set sampling to 10
// Send timing (myGrafanaNamespace.some.toTime)
stats . timing ( 'some.toTime' , 10 ) ;
stats . timing ( 'some.toTime' , 10 , 0.1 ) ; // set sampling to 0.1
// Send gauge (myGrafanaNamespace.some.toGauge)
stats . gauge ( 'some.toGauge' , 23 ) ;
// Send set (myGrafanaNamespace.some.set)
stats . set ( 'some.set' , 765 ) ;
// Scope your stats per hostname and/or pid
import Client from '@immobiliarelabs/dats' ;
const stats = new Client ( {
host : 'udp://someip:someport' ,
namespace : 'myGrafanaNamespace.${hostname}.${pid}' ,
} ) ;
// Send counter (myGrafanaNamespace.myMachine.123.some.toCount)
stats . counter ( 'some.toCount' , 3 ) ;
Wenn der Hostname irgendwelche enthält .
, der Client ersetzt sie durch _
.
import Client from '@immobiliarelabs/dats' ;
// TCP usage
const stats = new Client ( {
host : 'tcp://someip:someport' ,
namespace : 'myGrafanaNamespace.${hostname}.${pid}' ,
} ) ;
// Calling connect is required in TCP environment
await stats . connect ( ) ;
// Send counter (myGrafanaNamespace.myMachine.123.some.toCount)
stats . counter ( 'some.toCount' , 3 ) ;
Dieses Modul exportiert:
Client
Client
Der Statsd-Client
new Client(options)
options
: Konfigurationsobjekt.host
: statsd host ( udp://{ip}:{port}
oder tcp://{ip}:{port}
), Sie können auch IPv6 verwenden. Wenn Sie die Verwendung von udp6 erzwingen möchten, verwenden Sie: udp6://{host}:{port}
. Bei Verwendung von TCP müssen Sie die Methode Client.connect
aufrufen.namespace
: Optional. Präfix, das für die Metriken verwendet werden soll. Die Metrik wird als namespace.
+ die metrische Zeichenfolge. Optional können Sie die Platzhalter ${hostname}
und ${pid}
im Namespace verwenden und diese durch den Hostnamen des Computers und die Prozess-ID ersetzen.bufferSize
: Optional. Der Standardwert ist 0
. Wenn Sie diesen Wert auf eine Zahl größer als Null festlegen, wird der gepufferte Modus aktiviert, der Metriken nicht bei jedem Aufruf sendet, sondern diese puffert und sendet, wenn eine dieser Bedingungen eintritt: Der Puffer ist voll oder das bufferFlushTimeout
ist abgelaufen. Die Verwendung dieses Ansatzes ist leistungsfähiger, Sie müssen jedoch darauf achten, einen Wert zu verwenden, der mit der in Ihrem Netzwerk verfügbaren MTU kompatibel ist, da Ihre Pakete sonst möglicherweise stillschweigend verworfen werden. Siehe Multi-Metrik-Pakete.bufferFlushTimeout
: Optional. Der Standardwert ist 100
. Zeitüberschreitung in Millisekunden, die vor dem Leeren des Metrikpuffers gewartet werden soll.debug
: Optional. Standard- debuglog('dats')
. Die Logger-Funktion.udpDnsCache
: Optional. Standardmäßig wahr. Aktivieren Sie die Cache-DNS-Suche für udp.udpDnsCacheTTL
: Optional. Standard 120
. DNS-Cache Lebensdauer in Sekunden.onError
: Optional. Standard (err) => void
. Wird aufgerufen, wenn ein Fehler vorliegt. Ermöglicht Ihnen auch die Überprüfung von Sendefehlern.customSocket
: Optional. Standardwert null
. Benutzerdefinierter Socket, der vom Client verwendet wird. Dies ist eine Funktion zum Verspotten. Wir empfehlen, sie nicht in der Produktion zu verwenden.tags
: Optionaler Standardwert null
. Sofern angegeben, enthalten Metriken Tags in der Form #key1:value1,key2:value2
. Client.close([cb])
Schließen Sie den Client-Socket
cb
: optional. Eine Rückruffunktion, die aufgerufen wird, wenn der Socket geschlossen ist. Wenn kein cb
bereitgestellt wird, wird ein Promise
zurückgegeben. Gibt zurück : ein Promise
, wenn kein cb
übergeben wird.
Client.connect()
Verbinden Sie den TCP-Socket. Der Aufruf dieser Funktion ist nur auf TCP erforderlich.
Rückgabe : ein Promise
.
Client.counter(string[, value, sampling])
Senden Sie eine Metrik vom Typ Zähler
string
: Die metrische Zeichenfolgevalue
: Optional. Der metrische Wert ( Number
). Der Standardwert ist 1
.sampling
: Optional. Die metrische Stichprobe. Alle Sendefehler werden vom onError
-Callback behandelt.
Client.timing(string, value[, sampling])
Senden Sie eine Metrik vom Typ Timing
string
: Die metrische Zeichenfolgevalue
: Der metrische Wert ( Number
).sampling
: Optional. Die metrische Stichprobe. Alle Sendefehler werden vom onError
-Callback behandelt.
Client.gauge(string, value)
Senden Sie eine Metrik vom Typ Gauge
string
: Die metrische Zeichenfolgevalue
: Der metrische Wert ( Number
). Alle Sendefehler werden vom onError
-Callback behandelt.
Client.set(string, value)
Senden Sie eine Metrik vom Typ „set“.
string
: Die metrische Zeichenfolgevalue
: Der metrische Wert ( Number
). Alle Sendefehler werden vom onError
-Callback behandelt.
Dats exportiert sein Mock, Sie können es wie folgt verwenden:
import ClientMock from '@immobiliarelabs/dats/dist/mock' ;
const host = new URL ( `udp://127.0.0.1:8232` ) ;
const namespace = 'ns1' ;
const client = new ClientMock ( { host , namespace } ) ;
client . gauge ( 'some.metric' , 100 ) ;
client . set ( 'some.metric' , 100 ) ;
// metrics is an array with all metrics sent
console . log ( client . metrics ) ;
/* stdout:
[
'ns1.some.metric:100|g',
'ns1.some.metric:100|s',
]
*/
// Check if a metric is in the metrics array
client . hasSent ( 'ns1.some.metric:100|s' ) ; // -> true
client . hasSent ( 'ns1.some.metric:10|s' ) ; // -> false
client . hasSent ( / ns1.some.metric:d+|s / ) ; // -> true
client . hasSent ( / ns1.some.test:d+|s / ) ; // -> false
// Clean the metrics array with
client . cleanMetrics ( ) ;
console . log ( client . metrics ) ;
/* stdout:
[]
*/
dats wird auch als CLI bereitgestellt, das sowohl als globales npm-Paket als auch als vorkompilierte Binärdatei installiert werden kann.
Die vorkompilierte Binärdatei finden Sie im Release-Bereich für Linux, MacOS oder Windows.
$ npm i -g @immobiliarelabs/dats
dats --help
# The following are required input flags:
#
# --host {string} []
# --port {string} []
# --type {string} [Metric type can be one of: counter, timing, gauge, set]
# --prefix {string} [Metric prefix]
# --namespace {string} [Metric full namespace, use dots `.` to separate metrics]
# --value {string} [Metric value]
# --quiet {boolean} [Suppress all console output]
# --dryRun {boolean} [Metric wont be sent, use for debug]
#
# If unsure of output run the command prepended with `DRY_RUN=1`
Jedes Befehlsflag kann auch im JSON-Format in der Datei .datsrc
angegeben werden. Der Prozess durchsucht es zur Laufzeit im aktuellen Arbeitsverzeichnis und führt vor der Ausführung sowohl die Dateikonfiguration als auch die Flags zusammen!
{
"host" : " 123.123.123.123 " ,
"port" : " 1234 " ,
"prefix" : " my_metric_prefix "
}
Wenn Sie die vorkompilierte Binärdatei verwenden möchten, suchen Sie im Release-Bereich nach dem richtigen Link für Ihr Betriebssystem und gehen Sie wie folgt vor:
curl https://github.com/immobiliare/dats/releases/download/v{{VERSION_TAG}}/dats-cli-{{VERSION_OS}} -L -o dats-cli
chmod +x dats-cli
./dats-cli
Das automatische Benchmarking für jeden Commit finden Sie unter den folgenden Links: next und main.
Die Tests wurden mithilfe von Autocannon durchgeführt, das auf einen HTTP-Node.js-Server verweist, der bei jeder Anfrage eine Zählmetrik sendet. Mit dieser Art von Test bewerten wir, wie stark die Bibliothek die Anwendungsleistung beeinflusst.
Nachfolgend sind die Benchmarks mit den bekanntesten node.js-Statsd-Clients aufgeführt:
BIBLIOTHEK | Anforderung/Sek. (97,5.) | Anforderung/Sek. (Durchschnitt) |
---|---|---|
dats | 45503 | 43174.4 |
Hotshots | 46975 | 43319.47 |
Node-Statsd | 14935 | 11632.34 |
statsd-client | 42463 | 35790.67 |
Base | 50271 | 43312.54 |
Basis ist der HTTP-Server ohne Metriken.
dats wurde vom großartigen Node.js-Team von ImmobiliareLabs erstellt, der Technologieabteilung von Immobiliare.it, dem Immobilienunternehmen Nr. 1 in Italien.
Wir verwenden Daten derzeit sowohl in unseren Produkten als auch in unseren internen Werkzeugen.
Wenn Sie Daten in der Produktion verwenden, schreiben Sie uns eine Nachricht .
Hergestellt mit ❤️ von ImmobiliareLabs & Contributors
Wir würden uns freuen, wenn Sie zu dats beitragen! Wenn Sie Fragen zur Verwendung von Daten, Fehlern und Verbesserungen haben, können Sie sich gerne an uns wenden, indem Sie ein GitHub-Problem öffnen.
dats ist unter der MIT-Lizenz lizenziert. Weitere Informationen finden Sie in der LICENSE-Datei.