Secara umum, menggunakan perintah shell, Anda bisa mendapatkan metrik apa pun tanpa menulis kode atau integrasi. Jadi di konsol harus ada alat yang sederhana dan nyaman untuk visualisasi.

Pemantauan perubahan status dalam database, pemantauan ukuran antrian, telemetri dari server jauh, meluncurkan penyebaran skrip dan menerima pemberitahuan setelah selesai dikonfigurasikan dalam satu menit dengan file YAML sederhana.
Kode tersedia di github . Petunjuk penginstalan - untuk Linux, macOS dan (percobaan) Windows.
Mengapa saya membutuhkan ini ketika ada sistem pemantauan lengkap?
Saya harus segera mengatakan bahwa ini bukanlah alternatif untuk dashboard dan pemantauan skala penuh. Membandingkan Sampler dengan Prometheus + Grafana sama dengan membandingkan tail
dan less
dengan Elastic Stack atau Splunk .
Tetapi jika Anda meningkatkan dan mengkonfigurasi pemantauan produksi untuk tugas Anda - seperti meriam pada burung pipit, maka mungkin Sampler akan menjadi jawaban untuk pertanyaan itu. Itu dipahami sebagai alat untuk membuat prototipe, menunjukkan, atau hanya mengamati metrik pada lokal dan server jarak jauh.
Jadi harus diletakkan di semua server?
Tidak, Sampler dapat dijalankan secara lokal, tetapi metrik dapat diambil dari banyak mesin jarak jauh. Setiap komponen di dasbor memiliki bagian init
di mana Anda dapat masuk melalui ssh
(atau melakukan tindakan lain untuk memasukkan interactive shell
- membuat koneksi ke database, terhubung melalui JMX, masuk ke API, dll.)
Tampilan Komponen dan Contoh Konfigurasi
Contoh konfigurasi menunjukkan perintah untuk macOS. Banyak yang akan bekerja tidak berubah di Linux, tetapi beberapa perlu diadaptasi.
Runchart

Konfigurasi runcharts: - title: Search engine response time rate-ms: 500 # sampling rate, default = 1000 scale: 2 # number of digits after sample decimal point, default = 1 legend: enabled: true # enables item labels, default = true details: false # enables item statistics: cur/min/max/dlt, default = true items: - label: GOOGLE sample: curl -o /dev/null -s -w '%{time_total}' https://www.google.com - label: YAHOO sample: curl -o /dev/null -s -w '%{time_total}' https://search.yahoo.com - label: BING sample: curl -o /dev/null -s -w '%{time_total}' https://www.bing.com
Sparkline

Konfigurasi sparklines: - title: CPU usage rate-ms: 200 scale: 0 sample: ps -A -o %cpu | awk '{s+=$1} END {print s}' - title: Free memory pages rate-ms: 200 scale: 0 sample: memory_pressure | grep 'Pages free' | awk '{print $3}'
Barchart

Konfigurasi barcharts: - title: Local network activity rate-ms: 500 # sampling rate, default = 1000 scale: 0 # number of digits after sample decimal point, default = 1 items: - label: UDP bytes in sample: nettop -J bytes_in -l 1 -m udp | awk '{sum += $4} END {print sum}' - label: UDP bytes out sample: nettop -J bytes_out -l 1 -m udp | awk '{sum += $4} END {print sum}' - label: TCP bytes in sample: nettop -J bytes_in -l 1 -m tcp | awk '{sum += $4} END {print sum}' - label: TCP bytes out sample: nettop -J bytes_out -l 1 -m tcp | awk '{sum += $4} END {print sum}'
Gauge

Konfigurasi gauges: - title: Minute progress rate-ms: 500 # sampling rate, default = 1000 scale: 2 # number of digits after sample decimal point, default = 1 percent-only: false # toggle display of the current value, default = false color: 178 # 8-bit color number, default one is chosen from a pre-defined palette cur: sample: date +%S # sample script for current value max: sample: echo 60 # sample script for max value min: sample: echo 0 # sample script for min value - title: Year progress cur: sample: date +%j max: sample: echo 365 min: sample: echo 0
Kotak teks

Konfigurasi textboxes: - title: Local weather rate-ms: 10000 # sampling rate, default = 1000 sample: curl wttr.in?0ATQF border: false # border around the item, default = true color: 178 # 8-bit color number, default is white - title: Docker containers stats rate-ms: 500 sample: docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.PIDs}}"
Asciibox

Konfigurasi asciiboxes: - title: UTC time rate-ms: 500 # sampling rate, default = 1000 font: 3d # font type, default = 2d border: false # border around the item, default = true color: 43 # 8-bit color number, default is white sample: env TZ=UTC date +%r
Fungsionalitas tambahan
Pemicu
Pemicu memungkinkan Anda untuk memicu beberapa tindakan tambahan jika nilai yang diukur memenuhi kondisi yang ditentukan. Baik kondisi dan reaksi juga perintah shell ke mana variabel $label
, $cur
dan $prev
disediakan. Pertama-tama, pemicu dirancang untuk memberi peringatan (pemberitahuan suara dan visual terintegrasi), tetapi dengan opsi skrip Anda sendiri untuk merespons pemicu pemicu, Anda dapat menyesuaikan tindakannya sesuka Anda (misalnya, mengirim pemberitahuan ke telepon Anda dengan Pushover )
Contoh di bawah ini menggambarkan konfigurasi pemicu. Jika latensi respons mesin pencari melebihi 0,3 detik - Sampler mengedipkan bel terminal standar, kehilangan nada quindar NASA, menampilkan pemberitahuan visual pada grafik dan menjalankan skrip yang dalam hal ini berbicara nilai latensi terukur dalam suara:
runcharts: - title: SEARCH ENGINE RESPONSE TIME (sec) rate-ms: 200 items: - label: GOOGLE sample: curl -o /dev/null -s -w '%{time_total}' https://www.google.com - label: YAHOO sample: curl -o /dev/null -s -w '%{time_total}' https://search.yahoo.com triggers: - title: Latency threshold exceeded condition: echo "$prev < 0.3 && $cur > 0.3" |bc -l # "1" TRUE actions: terminal-bell: true # default = false sound: true # NASA quindar tone, default = false visual: true # default = false script: 'say alert: ${label} latency exceeded ${cur} second'
Shell interaktif
Jika Anda perlu memasukkan shell interaktif sebelum memulai pengambilan sampel (untuk koneksi satu kali ke database, login SSH, koneksi ke JMX, dll.), Anda dapat menentukan init script
yang akan dieksekusi satu kali saat startup. Contoh menghubungkan dan memungut suara mongoDB:
textboxes: - title: MongoDB polling rate-ms: 500 init: mongo --quiet --host=localhost test # sample: Date.now(); # mongo shell transform: echo result = $sample #
Selain itu, ada dukungan untuk mode PTY dan skrip multistep-init .
Variabel
Jika konfigurasi berisi bagian yang sering digunakan yang tidak ingin Anda ulangi, Anda bisa memasukkannya ke dalam variabel dan gunakan di mana saja dalam file YML.
Dalam praktek
Sebagai seorang programmer backend, saya sering harus men-debug, membuat prototipe dan mengukur. Oleh karena itu kebutuhan rutin untuk visualisasi dan pemantauan yang cepat. Menulis sesuatu yang khusus setiap waktu sangatlah tidak masuk akal, tetapi jika proses kustomisasi cepat dan (kurang lebih) nyaman, visualisasi seperti itu dapat menghemat waktu dan menyelesaikan masalah. Saya tidak dapat menemukan yang seperti ini, jadi diputuskan untuk menulis sendiri alat itu, dan menjadikannya dapat dikonfigurasi secara universal.
Untuk pertama kalinya untuk tujuan yang dimaksudkan, saya mulai menggunakannya untuk men-debug mekanisme pengelompokan dan akumulasi data, yang dengan cepat mengubah status "peristiwa" dalam memori. Membaca status sistem dari log atau penghitung individu jajak pendapat untuk setiap status tidak membantu Anda dengan cepat menavigasi dan memahami apa itu, tetapi melihat Sampler benar-benar menyelesaikan masalah ini -

Untuk semua yang saya gunakan sendiri, saya menyiapkan koleksi "resep" - konfigurasi mook yang dapat Anda salin dan segera mulai menyesuaikan untuk tugas Anda
- Koneksi Basis Data: MySQL, PostgreSQL, MongoDB, Neo4J
- Kafka
- Docker
- Ssh
- Jmx
Daftar ini akan ditambah (dan kontribusi Anda sangat diterima), dan sementara itu, dalam masalah, orang-orang mulai berbagi konfigurasi mereka untuk dasbor Kubernetes, Github, dan banyak lagi.
Itu saja, habr. Saya akan senang jika seseorang akan berguna.