عميل statsd UDP/TCP ذو التبعيات الصفرية البسيط لـ Node.js
هناك أوقات يتعين عليك فيها جمع المقاييس وتريد شيئًا بسيطًا دون كتابة الكثير من البيانات dats
لمساعدتك!
يهدف هذا العميل إلى الحصول على واجهة برمجة تطبيقات بسيطة ومتوافقة مع statsd مع بعض النكهة الاختيارية للاستخدام المتقدم، مثل: المقاييس المخزنة مؤقتًا وعمليات نقل UDP/TCP!
يدعم 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}
في مساحة الاسم واستبدالها باسم مضيف الجهاز ومعرف العملية.bufferSize
: اختياري. الافتراضي هو 0
. سيؤدي تعيين هذه القيمة إلى رقم أكبر من الصفر إلى تنشيط الوضع المخزن مؤقتًا، والذي بدلاً من إرسال المقاييس في كل مكالمة، سيقوم بتخزينها مؤقتًا وإرسالها عند حدوث أحد هذه الحالات: المخزن المؤقت ممتلئ، أو انتهت صلاحية bufferFlushTimeout
. يعد استخدام هذا الأسلوب أكثر أداءً، ولكن يجب أن تكون حريصًا على استخدام قيمة متوافقة مع وحدة الإرسال الكبرى المتوفرة على شبكتك، وإلا فقد يتم إسقاط الحزم الخاصة بك بصمت. انظر الحزم متعددة المقاييس.bufferFlushTimeout
: اختياري. الافتراضي هو 100
. المهلة بالمللي ثانية للانتظار قبل مسح المخزن المؤقت للمقاييس.debug
: اختياري. debuglog('dats')
. وظيفة المسجل.udpDnsCache
: اختياري. الافتراضي صحيح. قم بتنشيط بحث DNS لذاكرة التخزين المؤقت لـ UDP.udpDnsCacheTTL
: اختياري. الافتراضي 120
. ذاكرة التخزين المؤقت لنظام أسماء النطاقات: وقت البقاء في ثوانٍ.onError
: اختياري. الافتراضي (err) => void
. يتم الاتصال به عند وجود خطأ. يسمح لك بالتحقق أيضًا من أخطاء الإرسال.customSocket
: اختياري. الافتراضي null
. المقبس المخصص الذي يستخدمه العميل، هذه ميزة للسخرية ولا ننصح باستخدامها في الإنتاج.tags
: اختياري افتراضي null
. إذا تم توفيرها، فستتضمن المقاييس علامات في النموذج #key1:value1,key2:value2
. Client.close([cb])
أغلق مأخذ توصيل العميل
cb
: اختياري. وظيفة رد الاتصال للاتصال عند إغلاق المقبس. إذا لم يتم توفير cb
فسيتم إرجاع Promise
. المرتجعات : Promise
إذا لم يتم تمرير cb
.
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:
[]
*/
يتم عرض البيانات أيضًا باعتبارها واجهة سطر الأوامر (CLI) التي يمكن تثبيتها كحزمة npm عالمية أو حزمة ثنائية مجمعة مسبقًا.
يمكن العثور على الملف الثنائي المُترجم مسبقًا في قسم الإصدار لنظام التشغيل 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`
يمكن أيضًا تحديد كل علامة أمر بتنسيق JSON في الملف .datsrc
، وستقوم العملية في وقت التشغيل بالبحث عنها في دليل العمل الحالي ودمج كل من تكوين الملف والأعلام قبل التشغيل!
{
"host" : " 123.123.123.123 " ,
"port" : " 1234 " ,
"prefix" : " my_metric_prefix "
}
إذا كنت تريد استخدام الملف الثنائي المترجم مسبقًا، فاحصل على الرابط الصحيح لنظام التشغيل لديك في قسم الإصدار وقم بما يلي:
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
يمكن العثور على قياس الأداء التلقائي لكل التزام على الروابط التالية: التالي والرئيسي.
تم إجراء الاختبارات باستخدام المدفع التلقائي الذي يشير إلى خادم HTTPNode.js الذي يرسل عند كل طلب مقياسًا للعدد. من خلال هذا النوع من الاختبارات، نقوم بتقييم مدى تأثير المكتبة على أداء التطبيق.
فيما يلي تقرير عن المعايير مع أشهر عملاء Node.js statsd:
مكتبة | المتطلبات/الثانية (97.5) | المتطلبات/الثانية (المتوسط) |
---|---|---|
dats | 45503 | 43174.4 |
لقطات ساخنة | 46975 | 43319.47 |
Node-statsd | 14935 | 11632.34 |
statsd-client | 42463 | 35790.67 |
قاعدة | 50271 | 43312.54 |
القاعدة هي خادم HTTP بدون مقاييس.
تم إنشاء dats بواسطة فريق Node.js الرائع في ImmobiliareLabs، القسم التقني في Immobiliare.it، الشركة العقارية رقم 1 في إيطاليا.
نحن نستخدم حاليًا البيانات في منتجاتنا بالإضافة إلى أدواتنا الداخلية.
إذا كنت تستخدم البيانات في الإنتاج أرسل لنا رسالة .
صُنع باستخدام ❤️ بواسطة ImmobiliareLabs & Contributors
نحن نحب أن تساهم في البيانات! إذا كانت لديك أي أسئلة حول كيفية استخدام البيانات والأخطاء والتحسينات، فلا تتردد في التواصل معنا عن طريق فتح مشكلة GitHub.
dats مرخصة بموجب ترخيص MIT. راجع ملف الترخيص لمزيد من المعلومات.