StatsN هو عميل Stastd الأول ذو الأداء الحديث لـ dotnet core. يدعم StatsN كلاً من TCP وUDP، على الرغم من أنه يوصى باستخدام UDP. مستوحاة إلى حد كبير من عميل statsd-csharp وعميل statsd.net. كلا المشروعين رائعان في رأيي؟ ولكن ليس بالضبط ما كنت أبحث عنه.
لقد كتبت هذا العميل، لأنني وجدت أن إحصائيات اختبار الوحدة أقل متعة، وتعبت من انتظار نشر الميزات. أو دعم الميزات التي لا تدعمها statsd فعليًا.
يحاول هذا العميل المساعدة في قابلية الاختبار باستخدام الواجهات، وقابلية المراقبة من خلال السماح لك بتسجيل الوظائف للاستماع إلى الاستثناءات والتسجيل الذي يحدث داخل العميل، وقابلية التوسع من خلال جعل التعليمات البرمجية تعمل بشكل جيد.
Install-Package StatsN
باختصار واجهة برمجة التطبيقات سهلة. يمكنك الحصول على IStatsd جديد بعدة طرق مختلفة، ثم يمكنك تسجيل المقاييس باستخدام تطبيق IStatsd. وهنا بعض الأمثلة.
ملاحظة، سوف تحتاج إلى تخزين IStatsd الخاص بك كوحدة مفردة (على الأرجح داخل حاوية DI). يستمر هذا النوع في اتصال TCP أو UDP. وظائف العميل آمنة للخيط.
IStatsd statsd = Statsd . New < Udp > ( a => a . HostOrIp = "10.22.2.1" , Port = 8125 , Prefix = "MyMicroserviceName" ) ;
IStatsd statsd = Statsd . New < Tcp > ( a => a . HostOrIp = "10.22.2.1" ) ; //use tcp
IStatsd statsd = Statsd . New < NullChannel > ( a => a . HostOrIp = "10.22.2.1" , Port = 8125 ) ; //pipes your metrics to nowhere...which can scale infinately btw
IStatsd statsd = Statsd . New ( a => a . HostOrIp = "10.22.2.1" ) ; //defaults to udp
IStatsd statsd = Statsd . New ( new StatsdOptions ( ) { HostOrIp = "127.0.0.1" } ) ; //defaults to udp
IStatsd statsd = new Stastd ( new StatsdOptions ( ) { HostOrIp = "127.0.0.1" } ) ; //defaults to udp
IStatsd statsd = new Stastd ( new StatsdOptions ( ) { HostOrIp = "127.0.0.1" } , new Tcp ( ) ) ; //pass a new udp client. You could in theory make your own transport if you inherit from BaseCommunicationProvider
statsd . CountAsync ( "myapp.counterstat" ) ; //default to 1 aka increment
statsd . CountAsync ( "myapp.counterstat" , 6 ) ;
statsd . CountAsync ( "myapp.counterstat" , - 6 ) ;
statsd . TimerAsync ( "myapp.timeMyFunction" , ( ) => {
//code to instrument
} ) ;
statsd . TimerAsync ( "myapp.timeData" , 400 ) ; //400ms
statsd . GaugeAsync ( "autotest.gaugeyo" , 422 ) ;
statsd . GaugeDeltaAsync ( "autotest.gaugeyo" , - 10 ) ;
statsd . SetAsync ( "autotest.setyo" , 888 ) ;
مثل معظم عملاء statsd، يتجنب هذا العميل طرح الاستثناءات بأي ثمن . سيتم تسجيل أي أخطاء/استثناءات تم إنشاؤها كرسائل Systems.Diagnostics.Trace.
يمكنك تمرير lambda إلى فئة StatsdOptions
لتمرير الاستثناءات ورسائل السجل، بدلاً من الحصول عليها من خلال نظام التتبع.
var opt = new StatsdOptions
{
OnExceptionGenerated = ( exception ) => { /* handle exception */ } ,
OnLogEventGenerated = ( log ) => { /* handle log msg */ }
} ;
var stats = Statsd . New ( opt ) ;
أو
var stats = Statsd . New ( a => a . OnExceptionGenerated = ( exception ) => { /* handle exception */ } ) ;
من خلال تعيين خاصية BufferMetrics
في كائن الخيارات على true، سيتم تخزين المقاييس مؤقتًا وبالتالي إرسال حزم أقل. الحجم الافتراضي للمخزن المؤقت هو 512، وهو ما تم توثيقه بواسطة statsd. يمكنك تغيير حجمه باستخدام خاصية BufferSize في StastdOptions
. يستخدم هذا قائمة انتظار متزامنة لوضع المقاييس في قائمة الانتظار و BackgroundWorker
لحذف المقاييس من قائمة الانتظار وإرسالها مجمعة.
var opt = new StatsdOptions ( ) {
BufferMetrics = true ,
BufferSize = 512
} ;
بشكل افتراضي، تقوم وظائف قياس التسجيل المختلفة بإرجاع المهام. لا تحتاج إلى انتظار هذه إذا كنت تنتظرها وقمت بإيقاف تشغيل المقاييس مؤقتًا، فسوف تعود بعد إضافة البايتات إلى دفق الشبكة. إذا كنت تنتظر، وكانت المقاييس المخزنة قيد التشغيل، فسوف يعود الانتظار عندما تتم إضافة المقياس الخاص بك إلى قائمة انتظار المقاييس التي سيتم إرسالها.
على الرغم من أن هذا المشروع يستهدف dotnet 4.0، إلا أن اختبارات الوحدة لا تعمل في 4.0. الدعم محدود (قد لا تتوفر الميزات الجديدة في dotnet 4.S)، ولكن سيتم معالجة الأخطاء.
إذا كنت تخطط للتلاعب بالكود، فتأكد من تنزيل وتثبيت .NET core sdk.