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