Gampang karya karo tandha Komplek. Utawa sejarah penciptaan Balerter

Gampang karya karo tandha Komplek. Utawa sejarah penciptaan Balerter

Saben uwong seneng tandha.

Mesthine, luwih becik diwenehi kabar yen ana kedadeyan (utawa wis didandani) tinimbang lungguh lan ndeleng grafik lan goleki anomali.

Lan akeh alat wis digawe kanggo iki. Alertmanager saka ekosistem Prometheus lan vmalert saka grup produk VictoriaMetrics. Kabar lan tandha Zabbix ing Grafana. Skrip sing ditulis dhewe ing bot bash lan Telegram sing sacara periodik narik sawetara URL lan ngandhani yen ana sing salah. Akeh kabeh.

Kita, ing perusahaan kita, uga nggunakake solusi sing beda-beda nganti kita ngalami kerumitan, utawa, luwih, ora bisa nggawe tandha kompleks lan komposit. Apa sing dikarepake lan apa sing ditindakake ing ngisor iki. TLDR: Iki carane proyek open source muncul Balerter

Wis cukup suwe kita urip kanthi apik kanthi tandha sing dikonfigurasi ing Grafana. Ya, iki dudu cara sing paling apik. Disaranake nggunakake sawetara solusi khusus, kayata Alertmanager. Lan kita uga katon menyang obah luwih saka sapisan. Banjur, sethithik, kita pengin luwih akeh.

Ngomong nalika grafik tartamtu wis tiba / tambah XX% lan wis ana kanggo N menit dibandhingake periode sadurunge M jam? Iku misale jek sing bisa nyoba kanggo ngleksanakake iki karo Grafana utawa Alertmanager, nanging ora cukup gampang. (Utawa mungkin ora mungkin, aku ora bakal ngomong saiki)

Perkara dadi luwih rumit nalika keputusan tandha kudu digawe adhedhasar data saka macem-macem sumber. Tuladha langsung:

Kita mriksa data saka rong database Clickhouse, banjur mbandhingake karo sawetara data saka Postgres, lan mutusake tandha. Sinyal utawa mbatalake

Kita wis nglumpukake cukup akeh kepinginan sing padha kanggo kita mikir babagan keputusan kita. Banjur kita nyoba ngumpulake dhaptar pisanan saka syarat / kapabilitas layanan iki, sing durung digawe.

  • ngakses sumber data sing beda. Contone, Prometheus, Clickhouse, Postgres

  • ngirim tandha menyang macem-macem saluran - telegram, slack, etc.

  • ing proses mikir, dadi jelas yen aku ora pengin deskripsi deklaratif, nanging kemampuan kanggo nulis skrip

  • mlaku script ing jadwal

  • nganyari script gampang tanpa miwiti maneh layanan

  • kemampuan kanggo piye wae nggedhekake fungsi tanpa mbangun maneh layanan saka kode sumber

Dhaptar iki kira-kira lan kemungkinan ora akurat banget. Sawetara titik diganti, sawetara mati. Kabeh kaya biasane.

Bener, iki minangka sejarah Balerter diwiwiti.

Gampang karya karo tandha Komplek. Utawa sejarah penciptaan Balerter

Aku bakal nyoba kanggo njlèntrèhaké kanthi ringkes apa sing kedadeyan ing pungkasan lan cara kerjane. (Ya, mesthi, iki dudu pungkasan. Ana akeh rencana kanggo pangembangan produk. Aku mung mandheg dina iki)

Carane ora iku bisa?

Sampeyan nulis skrip ing Lua ing ngendi sampeyan ngirim panjalukan kanthi jelas (kanggo Prometheus, Clickhouse, lsp.). Sampeyan nampa jawaban lan piye wae proses lan mbandhingake. Banjur nguripake / mateni sawetara jinis tandha. Balerter dhewe bakal ngirim kabar menyang saluran sing wis diatur (Email, telegram, slack, etc.). Skrip dieksekusi ing interval tartamtu. Lan ... umume, iku kabeh)

Paling apik kanggo nuduhake kanthi conto:

-- @interval 10s
-- @name script1

local minRequestsRPS = 100

local log = require("log")
local ch1 = require("datasource.clickhouse.ch1")

local res, err = ch1.query("SELECT sum(requests) AS rps FROM some_table WHERE date = now()")
if err ~= nil then
    log.error("clickhouse 'ch1' query error: " .. err)
    return
end

local resultRPS = res[1].rps

if resultRPS < minResultRPS then
    alert.error("rps-min-limit", "Requests RPS are very small: " .. tostring(resultRPS))
else
    alert.success("rps-min-limit", "Requests RPS ok")
end 

Apa sing kedadeyan ing kene:

  • kita nuduhake yen script iki kudu kaleksanan saben 10 detik

  • nuduhake jeneng skrip (kanggo API, kanggo ditampilake ing log, digunakake ing tes)

  • nyambung modul kanggo outputting log

  • nyambung modul kanggo ngakses clickhouse karo jeneng ch1 (sambungan dhewe wis diatur ing config)

  • ngirim panjalukan menyang clickhouse

  • yen ana kesalahan, kita nampilake pesen ing log lan metu

  • mbandhingake asil pitakon kanthi konstan (ing conto langsung, kita bisa entuk nilai iki, contone, saka database Postgres)

  • ngaktifake utawa mateni tandha karo ID rps-min-limit

  • sampeyan bakal nampa kabar yen status tandha wis diganti

Conto cukup prasaja lan bisa dingerteni. Nanging, mesthi, ing skrip urip nyata bisa cukup dawa lan rumit. Gampang bingung lan nggawe kesalahan.

Mulane, kepinginan logis wis diwasa - bisa nulis tes kanggo skrip sampeyan. Lan ing versi v0.4.0 iki muncul.

Testing skrip

Tuladha tes kanggo skrip kita saka conto ing ndhuwur:

-- @test script1
-- @name script1-test

test = require('test')

local resp = {
    {
        rps = 10
    }
} 

test.datasource('clickhouse.ch1').on('query', 'SELECT sum(requests) AS rps FROM some_table WHERE date = now()').response(resp)

test.alert().assertCalled('error', 'rps-min-limit', 'Requests RPS are very small: 10')
test.alert().assertNotCalled('success', 'rps-min-limit', 'Requests RPS ok')

Langkah-langkah:

  • nuduhake jeneng script kanggo test ditulis

  • имя тСста (для Π»ΠΎΠ³ΠΎΠ²)

  • nyambungake modul testing

  • kita ngomong apa asil kudu bali kanggo panjalukan tartamtu kanggo clickhouse ch1

  • kita priksa manawa tandha (kesalahan) rps-min-watesan karo pesen kasebut diarani

  • priksa manawa tandha rps-min-limit ora dipateni (sukses)

Apa maneh sing bisa ditindakake Balerter?

Aku bakal nyoba kanggo tutul ing paling penting, ing mratelakake panemume, skills Balerter. Sampeyan bisa ndeleng kabeh kanthi rinci ing situs web resmi https://balerter.com

  • nampa data saka

    • clickhouse

    • postgres

    • MySQL

    • Prometheus

    • loki

  • ngirim kabar menyang saluran

    • slack

    • telegram

    • syslog

    • notify (kabar UI ing komputer sampeyan)

    • email

    • konflik

  • gawe grafik adhedhasar data sampeyan, upload gambar menyang panyimpenan sing kompatibel karo S3 lan lampirake menyang kabar (Tuladha karo gambar)

  • ngijini sampeyan kanggo ijol-ijolan data antarane script - global Key / panyimpenan Nilai

  • tulis perpustakaan sampeyan dhewe ing Lua lan gunakake ing skrip (kanthi standar, perpustakaan lua diwenehake kanggo nggarap json, csv)

  • ngirim panjalukan HTTP saka skrip sampeyan (lan nampa respon, mesthi)

  • nyedhiyakake API (durung fungsional kaya sing dikarepake)

  • metrik ekspor ing format Prometheus

Apa maneh sing pengin sampeyan lakoni?

Wis jelas manawa pangguna lan kita pengin kemampuan kanggo ngontrol peluncuran skrip nggunakake sintaks cron. Iki bakal ditindakake sadurunge versi v1.0.0

Aku pengin ndhukung luwih akeh sumber data lan saluran pangiriman kabar. Contone, wong mesthi bakal kangen MongoDB. Elastis Panelusuran kanggo sawetara. Kirim SMS lan/utawa nelpon menyang ponsel sampeyan. Kita pengin bisa nampa skrip ora mung saka file, nanging uga, contone, saka database. Pungkasane, kita pengin situs web sing luwih ramah pangguna lan dokumentasi sing luwih apik kanggo proyek kasebut.

Ana sing tansah kelangan soko) Ing kene kita ngandelake panyuwunan masyarakat supaya bisa nyetel prioritas kanthi bener. Lan kanggo bantuan masyarakat kanggo nyadari kabeh

Ing kesimpulan

Kita nggunakake Balerter Aku wis cukup suwe. Welasan naskah njaga katentreman atine. Muga-muga karya iki bisa migunani kanggo wong liya.

Lan welcome karo Jeksa Agung bisa ngetokake lan PR.

Source: www.habr.com

Add a comment