Node.js용 최소한의 종속성 없는 UDP/TCP 통계 클라이언트
지표를 수집해야 하고 너무 많은 상용구 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
통계 클라이언트
new Client(options)
options
: 구성 개체.host
: statsd 호스트( 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 캐시 TTL(Time to Live)(초)입니다.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])
타이밍 유형의 측정항목을 보냅니다.
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
모든 커밋에 대한 자동 벤치마킹은 next 및 main 링크에서 찾을 수 있습니다.
테스트는 각 요청마다 개수 측정항목을 보내는 HTTP node.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위 부동산 회사인 Immobiliare.it의 기술 부서인 ImmobiliareLabs의 놀라운 Node.js 팀에 의해 만들어졌습니다.
우리는 현재 내부 도구뿐만 아니라 제품에도 데이터를 사용하고 있습니다.
프로덕션에서 DAT를 사용하는 경우 메시지를 보내주세요 .
ImmobiliareLabs 및 기여자가 ❤️으로 제작함
우리는 당신이 Dats에 기여하길 바랍니다! Dats, 버그 및 개선 사항을 사용하는 방법에 대해 질문이 있는 경우 GitHub 문제를 열어 언제든지 문의하시기 바랍니다.
dats는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.