Node.js 用の最小限の依存関係ゼロの UDP/TCP statsd クライアント
メトリクスを収集する必要があり、定型文やdats
をあまり書かずにシンプルなものが必要な場合があります。
このクライアントは、バッファリングされたメトリクスや UDP/TCP トランスポートなど、高度な使用のためのオプションのフレーバーを備えたシンプルな statsd 準拠の API を持つことを目的としています。
Node.js >=14.0.0
をサポートします。Node.js v12
ユーザーの場合は、 [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)
パッケージは npm で入手できます。
npm
でインストールできます
# lastest stable version
$ npm i -S @immobiliarelabs/dats
# latest development version
$ npm i -S @immobiliarelabs/dats@next
または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 ) ;
ホスト名に.
、クライアントはそれらを_
に置き換えます。
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 ) ;
このモジュールは以下をエクスポートします。
Client
Client
statsd クライアント
new Client(options)
options
: 設定オブジェクト。host
: statsd host ( udp://{ip}:{port}
またはtcp://{ip}:{port}
)、ipv6 も使用できます。 udp6 の使用を強制する場合は、 udp6://{host}:{port}
使用します。TCP を使用する場合は、 Client.connect
メソッドを呼び出す必要があります。namespace
: オプション。メトリクスに使用するプレフィックス。メトリックはnamespace.
+ メトリック文字列。オプションで、名前空間で${hostname}
および${pid}
プレースホルダーを使用し、それらをマシンのホスト名とプロセス ID に置き換えることができます。bufferSize
: オプション。デフォルトは0
です。この値を 0 より大きい数値に設定すると、バッファリング モードが有効になり、呼び出しごとにメトリクスを送信するのではなく、メトリクスをバッファリングして、次の条件のいずれかが発生したときにメトリクスを送信します。バッファがいっぱいであるか、 bufferFlushTimeout
が期限切れになった場合です。このアプローチを使用するとパフォーマンスが向上しますが、ネットワークで利用可能な MTU と互換性のある値を使用するように注意する必要があります。使用しないと、パケットが通知なくドロップされる可能性があります。 「マルチメトリックパケット」を参照してください。bufferFlushTimeout
: オプション。デフォルトは100
です。メトリクス バッファをフラッシュする前に待機するタイムアウト (ミリ秒単位)。debug
: オプション。デフォルトのdebuglog('dats')
。ロガー機能。udpDnsCache
: オプション。デフォルトは true。 udp のキャッシュ DNS ルックアップをアクティブにします。udpDnsCacheTTL
: オプション。デフォルトは120
。 DNS キャッシュの存続時間 (秒単位)。onError
: オプション。デフォルト(err) => void
。エラーが発生した場合に呼び出されます。送信エラーも確認できます。customSocket
: オプション。デフォルトはnull
。クライアントによって使用されるカスタム ソケット。これはモック用の機能であり、運用環境での使用はお勧めしません。tags
: オプション デフォルトはnull
。指定した場合、メトリクスには#key1:value1,key2:value2
という形式のタグが含まれます。 Client.close([cb])
クライアントソケットを閉じる
cb
: オプション。ソケットが閉じられたときに呼び出すコールバック関数。 cb
が指定されていない場合は、 Promise
が返されます。戻り値: cb
が渡されなかった場合はPromise
。
Client.connect()
TCPソケットを接続します。この関数の呼び出しは、TCP でのみ必要です。
戻り値: Promise
。
Client.counter(string[, value, sampling])
カウンタ型のメトリクスを送信する
string
: メトリック文字列value
: オプション。メトリック値 ( Number
)。デフォルトは1
です。sampling
: オプション。メトリックのサンプリング。すべての送信エラーはonError
コールバックによって処理されます。
Client.timing(string, value[, sampling])
タイプ「timing」のメトリクスを送信する
string
: メトリック文字列value
: メトリック値 ( Number
)。sampling
: オプション。メトリックのサンプリング。すべての送信エラーはonError
コールバックによって処理されます。
Client.gauge(string, value)
タイプがゲージのメトリックを送信する
string
: メトリック文字列value
: メトリック値 ( Number
)。すべての送信エラーはonError
コールバックによって処理されます。
Client.set(string, value)
セット型のメトリクスを送信する
string
: メトリック文字列value
: メトリック値 ( Number
)。すべての送信エラーはonError
コールバックによって処理されます。
Dats はモックをエクスポートします。次のように使用できます。
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 は、npm グローバル パッケージまたはプリコンパイルされたバイナリとしてインストールできる CLI としても公開されています。
プリコンパイル バイナリは、Linux、MacOS、または 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`
すべてのコマンド フラグは、ファイル.datsrc
内で JSON 形式で指定することもできます。実行時のプロセスは、現在の作業ディレクトリ内でそれを検索し、実行前にファイル構成とフラグの両方をマージします。
{
"host" : " 123.123.123.123 " ,
"port" : " 1234 " ,
"prefix" : " my_metric_prefix "
}
プリコンパイルされたバイナリを使用する場合は、リリース セクションで OS の正しいリンクを取得し、次の手順を実行します。
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
すべてのコミットの自動ベンチマークは、次のリンクとメインのリンクにあります。
テストは、リクエストごとにカウント メトリックを送信する HTTP ノード.js サーバーを指すオートキャノンを使用して行われました。この種のテストでは、ライブラリがアプリケーションのパフォーマンスにどの程度影響するかを評価します。
以下に、最も有名な Node.js statsd クライアントを使用したベンチマークを報告します。
図書館 | 要求/秒 (97.5 番目) | リクエスト/秒 (平均) |
---|---|---|
データ | 45503 | 43174.4 |
ホットショット | 46975 | 43319.47 |
ノード統計情報 | 14935 | 11632.34 |
統計クライアント | 42463 | 35790.67 |
ベース | 50271 | 43312.54 |
Base はメトリクスのない HTTP サーバーです。
dats は、イタリアでナンバー 1 の不動産会社である Imbiliare.it の技術部門である ImbiliareLabs の素晴らしい Node.js チームによって作成されました。
現在、当社の製品および内部ツールでデータを使用しています。
本番環境で dats を使用している場合は、メッセージを送ってください。
ImbiliareLabs と貢献者による ❤️ で作成されました
ぜひdatsにご協力ください!データ、バグ、機能拡張の使用方法についてご質問がある場合は、GitHub Issue を開いてお気軽にお問い合わせください。
dats は MIT ライセンスに基づいてライセンスされています。詳細については、LICENSE ファイルを参照してください。