Kumpulkan metrik dari aplikasi .NET menggunakan Telegraf

Salah satu tugas paling penting dalam perancangan sistem adalah organisasi memantau status semua node, termasuk sejumlah besar layanan. Dalam kondisi ketika kekuatan dan dana tambahan tidak dialokasikan untuk ini, perlu untuk menggunakan solusi yang siap pakai secara maksimal.


Saya pikir bagi banyak orang gambar dalam proyek ini adalah seperti ini:


gambar


Sesuatu sedang dikirim ke suatu tempat, entah bagaimana diproses dan ditahan dengan satu paku. Tugasnya adalah mengumpulkan statistik pemrosesan data dari semua titik dan menempatkannya di satu tempat, lalu membuat grafik dan menulis laporan.


Berkat artikel itu, pilihan jatuh pada sekelompok Telegraf-Elasticsearch-Grafana. Telegraf sangat cocok dengan proyek untuk mengatur pemantauan keadaan kedua perangkat lunak pihak ketiga yang tersedia untuk umum, tetapi saya akan secara terpisah membahas masalah pengukuran beban pada layanan saya sendiri. Dalam hal ini, kita berbicara tentang layanan .NET berjalan dalam wadah buruh pelabuhan di Linux. Semua layanan membentuk beberapa tahap pemrosesan informasi yang masuk, dan saya perlu mengukur jumlah paket yang berhasil diproses dan ditolak dengan label tambahan untuk tahap pemrosesan, sumber, dll. Untuk kemungkinan pemrosesan statistik selanjutnya.


Saya akan menghilangkan proses instalasi dan segera melanjutkan ke konfigurasi. Jadi, Telegraf dapat menerima pesan dengan metrik pada tcp, saluran udp, serta melalui 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"] 

Layanan akan mengirim pesan setiap kali paket berikutnya diproses, jadi kami juga akan mengkonfigurasi agregasi. Interval 10 detik sudah cukup, tergantung pada beban sistem tertentu.


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

Mari kita pergi melalui parameter: query_pass - nama metrik yang menggabungkan pengukuran di masa depan, lulus - pemrosesan yang sukses, gagal - tidak. Selain itu, metrik akan ditandai dengan appname dan tag fromip .


Sekarang sedikit kode. Saya suka mengirim metrik melalui udp dan unixsocket, meskipun opsi lain mungkin cocok untuk Anda.


 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); 

Semua ini dirangkum dengan sempurna dan ditambahkan ke database, dalam kasus saya ini adalah elasticsearch ( tangkapan layar ).


 [[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 

Semua kucing


PS: inilah tugas akhir untuk mengirim metrik di bawah net.core

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


All Articles