Klien statistik UDP/TCP tanpa ketergantungan minimalis untuk Node.js
Ada kalanya Anda harus mengumpulkan metrik dan Anda menginginkan sesuatu yang sederhana tanpa menulis terlalu banyak boilerplate, dats
bisa membantu Anda!
Klien ini bertujuan untuk memiliki API sederhana yang sesuai dengan statsd dengan beberapa ragam opsional untuk penggunaan tingkat lanjut, seperti: metrik buffer dan transportasi UDP/TCP!
Mendukung Node.js >=14.0.0
, jika Anda adalah pengguna Node.js v12
lihat [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)
Paket tersedia di npm.
Anda dapat menginstalnya dengan npm
# lastest stable version
$ npm i -S @immobiliarelabs/dats
# latest development version
$ npm i -S @immobiliarelabs/dats@next
atau 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 ) ;
Jika nama host berisi .
, klien akan menggantinya dengan _
.
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 ) ;
Modul ini mengekspor:
Client
Client
Klien statsd
new Client(options)
options
: objek konfigurasi.host
: statsd host ( udp://{ip}:{port}
atau tcp://{ip}:{port}
), Anda juga dapat menggunakan ipv6. Jika Anda ingin memaksakan penggunaan udp6 menggunakan: udp6://{host}:{port}
, saat menggunakan TCP, Anda harus memanggil metode Client.connect
.namespace
: Opsional. Awalan yang digunakan untuk metrik. Metrik akan dikirim sebagai namespace.
+ string metrik. Secara opsional, Anda dapat menggunakan placeholder ${hostname}
dan ${pid}
di namespace dan menggantinya dengan nama host mesin dan id proses.bufferSize
: Opsional. Standarnya adalah 0
. Menetapkan nilai ini ke angka yang lebih besar dari nol akan mengaktifkan mode buffered, yang bukannya mengirimkan metrik pada setiap panggilan, melainkan akan melakukan buffering dan mengirimkannya ketika salah satu kondisi ini terjadi: buffer penuh, atau bufferFlushTimeout
telah kedaluwarsa. Menggunakan pendekatan ini lebih efektif, namun Anda harus berhati-hati dalam menggunakan nilai yang kompatibel dengan MTU yang tersedia di jaringan Anda, jika tidak, paket Anda mungkin akan dihapus secara diam-diam. Lihat paket multi-metrik.bufferFlushTimeout
: Opsional. Standarnya adalah 100
. Batas waktu dalam milidetik untuk menunggu sebelum menghapus buffer metrik.debug
: Opsional. debuglog('dats')
. Fungsi pencatat.udpDnsCache
: Opsional. Standarnya benar. Aktifkan pencarian DNS cache untuk udp.udpDnsCacheTTL
: Opsional. Bawaan 120
. Dns cache Waktunya hidup dalam hitungan detik.onError
: Opsional. Default (err) => void
. Dipanggil ketika ada kesalahan. Memungkinkan Anda memeriksa juga kesalahan pengiriman.customSocket
: Opsional. Defaultnya null
. Soket khusus yang digunakan oleh klien, ini adalah fitur untuk mengejek, kami tidak menyarankan menggunakannya dalam produksi.tags
: Opsional Default null
. Jika disediakan, metrik akan menyertakan tag dalam bentuk #key1:value1,key2:value2
. Client.close([cb])
tutup soket klien
cb
: opsional. Fungsi panggilan balik untuk memanggil ketika soket ditutup. Jika tidak ada cb
yang diberikan, Promise
dikembalikan. Pengembalian : Promise
jika tidak ada cb
yang diteruskan.
Client.connect()
sambungkan soket TCP. Memanggil fungsi ini hanya diperlukan pada TCP.
Pengembalian : Sebuah Promise
.
Client.counter(string[, value, sampling])
mengirim metrik penghitung tipe
string
: String metrikvalue
: Opsional. Nilai metrik ( Number
). Defaultnya adalah 1
.sampling
: Opsional. Pengambilan sampel metrik. Semua kesalahan pengiriman ditangani oleh panggilan balik onError
.
Client.timing(string, value[, sampling])
mengirim metrik jenis waktu
string
: String metrikvalue
: Nilai metrik ( Number
).sampling
: Opsional. Pengambilan sampel metrik. Semua kesalahan pengiriman ditangani oleh panggilan balik onError
.
Client.gauge(string, value)
kirim metrik pengukur tipe
string
: String metrikvalue
: Nilai metrik ( Number
). Semua kesalahan pengiriman ditangani oleh panggilan balik onError
.
Client.set(string, value)
mengirim metrik kumpulan tipe
string
: String metrikvalue
: Nilai metrik ( Number
). Semua kesalahan pengiriman ditangani oleh panggilan balik onError
.
Dats mengekspor tiruannya, Anda dapat menggunakannya sebagai berikut:
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 juga diekspos sebagai CLI yang dapat diinstal sebagai paket global npm atau biner yang telah dikompilasi sebelumnya.
Biner prakompilasi dapat ditemukan di bagian rilis untuk Linux, MacOS atau 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`
Setiap flag perintah juga dapat ditentukan dalam format JSON di file .datsrc
, proses saat runtime akan mencarinya di direktori kerja saat ini dan menggabungkan konfigurasi file dan flag sebelum dijalankan!
{
"host" : " 123.123.123.123 " ,
"port" : " 1234 " ,
"prefix" : " my_metric_prefix "
}
Jika Anda ingin menggunakan biner yang telah dikompilasi, dapatkan tautan yang benar untuk OS Anda di bagian rilis dan lakukan hal berikut:
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
Pembandingan otomatis untuk setiap penerapan dapat ditemukan di tautan berikut: berikutnya dan utama.
Pengujian dilakukan menggunakan autocannon yang menunjuk ke Server HTTP node.js yang mengirimkan metrik jumlah pada setiap permintaan. Dengan pengujian semacam ini, kami mengevaluasi seberapa besar pengaruh perpustakaan terhadap kinerja aplikasi.
Di bawah ini dilaporkan tolok ukur dengan klien node.js statsd paling terkenal:
PERPUSTAKAAN | Persyaratan/Detik (97,5) | Persyaratan/Detik (rata-rata) |
---|---|---|
itu | 45503 | 43174.4 |
tembakan panas | 46975 | 43319.47 |
node-statsd | 14935 | 11632.34 |
statsd-klien | 42463 | 35790.67 |
Basis | 50271 | 43312.54 |
Basisnya adalah server HTTP tanpa metrik.
dats dibuat oleh tim Node.js yang luar biasa di ImmobiliareLabs, departemen Teknologi Immobiliare.it, perusahaan real estate #1 di Italia.
Saat ini kami menggunakan data dalam produk kami serta peralatan internal kami.
Jika Anda menggunakan data dalam produksi, kirimkan pesan kepada kami .
Dibuat dengan ❤️ oleh ImmobiliareLabs & Kontributor
Kami ingin Anda berkontribusi pada data! Jika Anda memiliki pertanyaan tentang cara menggunakan data, bug, dan peningkatan, silakan menghubungi kami dengan membuka Masalah GitHub.
dats dilisensikan di bawah lisensi MIT. Lihat file LISENSI untuk informasi lebih lanjut.