جمع المقاييس من تطبيقات .NET باستخدام Telegraf

واحدة من أهم المهام في تصميم النظم هي تنظيم مراقبة حالة جميع العقد ، بما في ذلك عدد كبير من الخدمات. في الحالات التي لا يتم فيها تخصيص قوات وأموال إضافية لهذا الغرض ، من الضروري استخدام حلول جاهزة إلى أقصى حد.


أعتقد أن الصورة في المشروع بالنسبة لكثير من الناس هي مثل هذا:


صورة


يتم إرسال شيء ما في مكان ما ، تتم معالجته بطريقة أو بأخرى على مسمار واحد. كانت المهمة هي جمع إحصائيات معالجة البيانات من جميع النقاط ووضعها في مكان واحد ، ثم بناء الرسوم البيانية وكتابة التقارير.


بفضل هذه المقالة ، وقع الاختيار على مجموعة من Telegraf-Elasticsearch-Grafana. يتلاءم Telegraf بشكل مثالي مع مشروع تنظيم مراقبة حالة كل من برامج الطرف الثالث الحديد والمتاحة للجمهور ، لكنني سأناقش بشكل منفصل مسألة قياس الحمل على خدماتي الخاصة. في هذه الحالة ، نتحدث عن خدمات .NET التي تعمل في حاويات الإرساء في نظام Linux. تشكل جميع الخدمات عدة مراحل لمعالجة المعلومات الواردة ، وكنت بحاجة إلى قياس عدد الحزم التي تمت معالجتها ورفضها بنجاح مع تسميات إضافية لمرحلة المعالجة ، والمصدر ، وما إلى ذلك لاحتمال المعالجة الإحصائية اللاحقة.


سوف أغفل عملية التثبيت والمضي قدما على الفور إلى التكوين. لذلك ، يمكن لـ Telegraf تلقي الرسائل ذات المقاييس على tcp و udp القنوات وكذلك من خلال unixsocket


[[inputs.socket_listener]] #service_address = "unixgram:///tmp/telegraf.sock" service_address = "udp4://:14230" data_format = "json" json_name_key = "name" namepass = ["query_pass"] tag_keys = ["appname","fromip"] 

سترسل الخدمات رسائل في كل مرة تتم فيها معالجة الحزمة التالية ، لذلك سنقوم أيضًا بتكوين التجميع. الفاصل الزمني لمدة 10 ثوانٍ يكفي ، اعتمادًا على تحميل نظام معين.


 [[aggregators.basicstats]] period = "10s" drop_original = true stats = ["sum"] namepass = ["query_pass"] fieldpass = ["pass","fail"] 

دعنا نذهب إلى المعلمات: query_pass - اسم القياس الذي يجمع بين القياسات المستقبلية ، النجاح - المعالجة الناجحة ، الفشل - لا. بالإضافة إلى ذلك ، سيتم وضع علامة على المقاييس باستخدام علامات التطبيق والعلامات .


الآن رمز صغير. أحب إرسال المقاييس عبر udp و unixsocket ، على الرغم من أن الخيارات الأخرى قد تناسبك.


 UdpClient udpClient = new UdpClient("127.0.0.1", 14230); byte[] datagramBytes= Encoding.UTF8.GetBytes("{\"name\":\"query_pass\",\"pass\":1,\"fromip\":\"127.0.0.1\",\"appname\":\"application\"}"); udpClient.Send(datagramBytes, datagramBytes.Length); datagramBytes= Encoding.UTF8.GetBytes("{\"name\":\"query_pass\",\"fail\":1,\"fromip\":\"127.0.0.1\",\"appname\":\"application\"}"); udpClient.Send(datagramBytes, datagramBytes.Length); 

يتم تلخيص كل هذا بشكل كامل وإضافته إلى قاعدة البيانات ، وفي حالتي ، فإنه elasticsearch ( لقطة شاشة ).


 [[outputs.elasticsearch]] urls = [ "http://localhost:9200" ] # required. timeout = "5s" health_check_interval = "5s" index_name = "telegraf-%Y.%m.%d" # required. manage_template = true template_name = "tp_telegraf" overwrite_template = true 

جميع القطط.


ملاحظة: هنا هو المشروع النهائي لإرسال المقاييس تحت net.core

Source: https://habr.com/ru/post/ar458310/


All Articles