Squzy - sistem pemantauan self-host open-source gratis dengan insiden dan pemberitahuan

Pada suatu malam musim dingin yang terik, kami mendapat ide untuk menulis aplikasi untuk memeriksa Peta Situs perusahaan tempat kami bekerja, dengan kemampuan untuk memberi tahu ketika terjadi kesalahan.



Secara bertahap, ide ini beralih ke implementasi, ide-ide untuk perbaikan muncul di sana, pemantauan host muncul, kemudian pemantauan aplikasi, dan, seperti icing on the cake, insiden dengan pemberitahuan.



Hasilnya, kami mendapatkan sistem pemantauan yang lengkap, yang merupakan solusi self-host open source yang tidak memiliki komunikasi eksternal, dengan insiden yang sepenuhnya ditentukan pengguna.



Dan dalam postingan kali ini kami ingin memperkenalkan Anda pada produk yang dihasilkan.



Detail teknis



Sebuah arsitektur microservice dipilih untuk pengembangan. Backend dikembangkan di GoLang sebagai bahasa yang cepat dan nyaman untuk mengembangkan layanan mikro. Kami menggunakan gRPC untuk berkomunikasi antar layanan. Selain fakta bahwa gRPC berfungsi pada HTTP / 2 dengan semua yang tersirat, deskripsi antarmuka layanan melalui proto akan memungkinkan Anda, sebagai pengguna, untuk membuat implementasi Anda sendiri dari masing-masing bagian sistem, jika perlu.



Proyek ini menggunakan Mongo sebagai database akses cepat dan Postgres untuk menyimpan statistik yang dikumpulkan.



Bazel digunakan untuk perakitan dan penyebaran. Bazel memungkinkan Anda mendeskripsikan dependensi dan hubungan antar paket di Golang secara deklaratif. Selain itu, kami mulai menguji Bazel dengan cache jarak jauh, yang memiliki efek positif pada kecepatan sistem. Bazel juga mengumpulkan semua aplikasi di Docker dan mengatur pengujian Unit. Semua ini diintegrasikan ke dalam tindakan Github.



Dasbor sistem ditulis dalam Angular 9.



Kami mencoba untuk mempertahankan bilah dalam pengujian unit, pada saat setiap entitas tercakup. Dalam waktu dekat, implementasi integrasi dan tes E2E untuk dukungan sistem terlengkap



Deskripsi sistem



Seperti yang disebutkan di atas, Squzy adalah sekumpulan layanan mikro yang berinteraksi satu sama lain, yang masing-masing menangani tugas terpisah.



Daftar layanan:



  • Agent Client — , . , . Agent Server.
  • Agent Server — , . Mongo, Storage.
  • Application Monitoiring — , / Squzy , . GoLang NodeJS, — PHP & Java .
  • Monitoring — external/internal .
  • Storage — . Postgres, ClickHouse.
  • Incident Manager- . ( ). Mongo, Storage.
  • Notification Manager — . Webhook & Slack.
  • API — API Gateway


Skema interaksi layanan adalah sebagai berikut:







Untuk mendemonstrasikan kemampuan Squzy, sebuah demo dikembangkan yang memantau servernya sendiri dan memungkinkan Anda untuk memantau sistem di dasbor: https://demo.squzy.app/ .



Beberapa fitur, seperti menambahkan / menghapus entitas baru, dinonaktifkan di demo, tetapi memungkinkan Anda untuk melihat dan merasakan semua bagian sistem. Di bawah ini kami akan membahas lebih detail tentang setiap jenis pemantauan.



Bagian sistem ini bertanggung jawab untuk pemeriksaan eksternal / internal. Saat ini, Anda dapat mengirim permintaan dan mengharapkan respons ke jenis titik akhir berikut:



  1. Tcp - cek port terbuka;
  2. gRPC - pemeriksaan protokol ;
  3. Http - periksa kepatuhan dengan kode status;
  4. SiteMap - memeriksa apakah semua URL dari peta situs merespon dengan 200 OK ;
  5. JsonValue - kumpulan nilai spesifik dari respons JSON.


Squzy memungkinkan Anda menambahkan tajuk khusus ke semua jenis pemeriksaan HTTP.



Antarmuka untuk menambahkan cek melalui dasbor Squzy terlihat seperti ini:







Di sini interval adalah interval antara pemeriksaan dalam detik, dan batas waktu adalah waktu setelah pemeriksaan dianggap tidak berhasil.



Setelah pembuatan, pengguna memiliki akses ke konfigurasi pemeriksa:







Untuk setiap jenis pemeriksaan, Anda dapat menulis aturan insiden. Lebih detail tentang insiden akan dijelaskan di bawah ini, namun di sini kami hanya akan memberikan contoh:







Dalam hal ini kami mengukur nilai kurs dollar dari situs, dan jika lebih dari 80 kami akan membuat insiden.



Tautan ke demo.



Insiden dapat dibuat pada:



  • Durasi verifikasi (waktu menerima tanggapan dari server);
  • Status (kode status kembali);
  • Nilai (informasi yang dikirimkan di pemeriksa).


Agen squzy



Agen Squzy yang diinstal di server digunakan untuk memantau host di sistem. Saat ini mengumpulkan statistik berikut:



  • CPU - beban prosesor;
  • Memori - Digunakan / Gratis / Total / Bersama;
  • Disk - Digunakan / Gratis / Total untuk setiap disk;
  • Net - untuk setiap antarmuka jaringan.


Timeline Agen:



  1. Agen mendaftar dengan Server Agen dan menerima ID (selama pendaftaran dimungkinkan untuk menentukan interval pemantauan dan nama agen);
  2. Agen mengirimkan statistik ke server pada interval tertentu;
  3. ….
  4. Agen memberi tahu server tentang shutdown.


Jika tidak ada koneksi ke server, agen terus mengumpulkan statistik dan mereka akan dikirim saat koneksi pulih.



Versi demo agen dapat dilihat di sini: https://demo.squzy.app/agents/5f142b6141a1c6518723483a/live



Agen juga dapat memiliki seperangkat aturan untuk memeriksa insiden:





Pemantauan Aplikasi Squzy



Untuk aplikasi pemantauan, integrasi dengan kerangka kerja populer untuk Go / NodeJ telah dikembangkan (lebih jauh, seperti yang dikatakan pemasar yang sukses). Integrasi menentukan jenis transaksi ( Http / Router / gRPC / WebSocket / etc) dan mengurai tanggapan dari mesin / permintaan.



Squzy juga mendukung Tracing Transaksi, yang memungkinkan Anda untuk memantau transaksi terkait dari beberapa server / layanan. Contoh pemantauan transaksi semacam itu di Dasbor: https://demo.squzy.app/transactions/om8l8LP96PRsvx67UxkES .



Library untuk diintegrasikan ke Go dan Node Js.





Pada intinya, perpustakaan adalah middleware yang menghitung waktu sebelum mengirim transaksi dan waktu setelah transaksi itu diproses, dan menganalisis responsnya. Kami juga menulis contoh aplikasi pemantauan GO: https://github.com/squzy/test_tracing.



Anda dapat membuat transaksi Anda sendiri dan mengukur waktu pelaksanaan, status, dan kesalahannya. Untuk ini, gunakan paket Inti. Untuk kemudahan dukungan produk, semua bahasa akan menggunakan nama yang sama untuk paket yang menentukan perilakunya.



Anda dapat membuat insiden per transaksi berdasarkan data berikut:



  • Durasi transaksi;
  • Status transaksi;
  • Kesalahan diterima;
  • Tipe transaksi.


Manajer Insiden Squzy + Manajer Pemberitahuan



Insiden di Squzy didasarkan pada aturan. Saat menambahkan entitas baru ke Storage, aturan yang dijelaskan dicentang, dan jika ya, insiden dibuat (jika belum dibuat).



Aturan adalah versi expr yang diperpanjang , yang telah ditambahkan aturan khusus, dengan mempertimbangkan spesifikasi sistem, seperti Last (mengambil n record terakhir dari Storage), Use (menggunakan filter khusus untuk ini), dan seterusnya. Penjelasan mendetail tentang semua aturan dapat ditemukan di https://squzy.app/usage/squzy-incident/incident-rules , di sini kita akan fokus pada contoh ilustratif.



Katakanlah Anda memiliki server dengan 1.792 prosesor, 256 GB RAM, dan ruang hard disk 16 TB. Dan Anda benar-benar ingin memeriksa apakah devops Anda tidak menjalankan Doom pada monitor beban CPU. Anda tahu bahwa memelihara situs satu halaman yang melayani server Anda tidak pernah memuat 100 persen lebih dari 8 prosesor selama lebih dari satu menit. Selain itu, RAM lebih dari setengahnya bebas. Sementara hard drive memiliki seluruh TB ruang kosong sebagai cadangan (jika Anda tidak menyimpan arsip terkenal di rumah, istri Anda akan melihatnya). Dalam kasus ini, mengetahui bahwa metrik dikumpulkan setiap 10 detik, Anda dapat menentukan aturan berikut untuk memverifikasi bahwa server Anda berfungsi dengan benar:



any(Last(7, UseType(All)), 
    {all(.CpuInfo.Cpus, {.Load > 80}) &&
    .MemoryInfo.Mem.UsedPercent < 50 &&
    .DiskInfo.Disks["System"].Free > 1000000000000}
)


Demikian pula, Squzy memungkinkan Anda menjelaskan berbagai pola perilaku sistem yang tidak diinginkan.



Setelah pemeriksaan aturan berhasil (atau lebih tepatnya, tidak berhasil), insiden dibuat dan pengguna diberi tahu, jika dikonfigurasi.



Insiden aktif, yaitu insiden yang belum diverifikasi oleh pengguna, dapat ditutup secara otomatis, yaitu jika belum lolos verifikasi di beberapa titik, jika opsi yang sesuai dipilih.



Untuk setiap entitas yang dicentang, baik itu aplikasi / pemeriksa / agen, Anda dapat membuat pemberitahuan Anda sendiri tentang insiden.



Kesimpulan



Kami sekarang sedang dalam proses mengumpulkan umpan balik dan komentar dari komunitas TI.



Kami sudah memiliki sejumlah rencana untuk pengembangan produk:



  1. menambahkan integrasi Java / PHP;
  2. pemeriksa database;
  3. migrasi dari Postgres ke ClickHouse;
  4. lebih banyak metode pemberitahuan;
  5. integrasi dengan kubernetes;
  6. perbaikan dokumentasi;
  7. API GQL;
  8. Integrasi dan tes E2E;
  9. pemantauan aplikasi seluler.
  10. Pelengkapan otomatis untuk aturan insiden di UI


Kami akan dengan senang hati menerima umpan balik atau saran.



Tautan





PS:

Terima kasih untuk artikel Vonotirax



Coba dalam 1 klik



All Articles