Lan erraza alerta konplexuekin. Edo Balerterren historia
Denek maite dituzte alertak.
Jakina, askoz hobe da zerbait gertatu denean (edo konpondu denean) jakinaraztea grafikoei begira eseri eta anomaliak bilatzea baino.
Eta horretarako tresna asko sortu dira. Prometheus ekosistemako Alertmanager eta VictoriaMetrics produktu taldeko vmalert. Zabbix jakinarazpenak eta alertak Grafanan. Bash eta Telegram bot-etan norberak idatzitako script-ak aldian-aldian URL batzuk ateratzen dituzten eta zerbait gaizki dagoen ala ez adierazten dizute. Denetarik asko.
Guk, gure enpresan, konponbide desberdinak ere erabili genituen konplexutasunarekin edo, hobeto esanda, alerta konplexu eta konposatuak sortzeko ezintasunarekin topo egin genuen arte. Nahi genuena eta azkenean egiten genuena ebakiaren azpian dago. TLDR: Horrela agertu zen kode irekiko proiektua Balerter
Denbora luzez ondo bizi izan ginen Grafanan konfiguratutako alertekin. Bai, hau ez da biderik onena. Beti gomendatzen da soluzio espezializatu batzuk erabiltzea, hala nola Alertmanager. Eta behin baino gehiagotan mugitzeari ere begiratu diogu. Eta gero, pixkanaka, gehiago nahi genuen.
Esan taula jakin bat % XX jaitsi/hazi den eta N minutuz egon den M orduko aurreko aldiarekin alderatuta? Badirudi Grafana edo Alertmanager-ekin hau inplementatzen saia zaitezkeela, baina ez da oso erraza. (Edo agian ez da posible, orain ez dut esango)
Gauzak are gehiago zaildu egiten dira alerta-erabakia iturri ezberdinetako datuetan oinarrituta hartu behar denean. Zuzeneko adibidea:
Bi Clickhouse datu-baseetako datuak egiaztatzen ditugu, gero Postgres-en datu batzuekin konparatu eta alerta bat erabakitzen dugu. Seinalatu edo bertan behera utzi
Antzeko gogo asko pilatu ditugu gure erabakia pentsatzeko. Eta gero, oraindik sortu ez den zerbitzu honen eskakizun/gaitasunen lehen zerrenda osatzen saiatu ginen.
datu-iturri desberdinetara sartzeko. Adibidez, Prometheus, Clickhouse, Postgres
bidali alertak hainbat kanaletara: telegrama, slack, etab.
pentsatzeko prozesuan, argi geratu zen ez nuela deskribapen deklaratiborik nahi, gidoiak idazteko gaitasuna baizik
gidoiak programazio batean exekutatzen
scripten eguneratze erraza zerbitzua berrabiarazi gabe
nolabait funtzionalitateak zabaltzeko gaitasuna iturburu-kodeetatik zerbitzua berreraiki gabe
Zerrenda hau gutxi gorabeherakoa da eta ziurrenik ez da oso zehatza. Puntu batzuk aldatu ziren, beste batzuk hil ziren. Dena ohi bezala da.
Egia esan, horrela hasi zen Balerterren historia.
Azkenean zer gertatu den eta nola funtzionatzen duen deskribatzen saiatuko naiz. (Bai, noski, hau ez da amaiera. Produktuen garapenerako plan asko daude. Gaur bertan geldituko naiz)
Nola funtzionatzen du?
Luan gidoi bat idazten duzu eta bertan eskaerak espresuki bidaltzen dituzu (Prometheus, Clickhouse, etab.). Erantzunak jasotzen dituzu eta nolabait prozesatu eta konparatzen dituzu. Ondoren, piztu/desaktibatu alerta motaren bat. Balerterrek berak jakinarazpen bat bidaliko die konfiguratu dituzun kanalei (E-posta, telegrama, slack, etab.). Script-a zehaztutako tarteetan exekutatzen da. Eta... oro har, hori da dena)
Hobe da adibide batekin erakustea:
-- @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
Zer gertatzen da hemen:
script hau 10 segundoro exekutatu behar dela adierazten dugu
adierazi script-aren izena (APIrako, erregistroetan bistaratzeko, probetan erabiltzeko)
konektatu erregistroak ateratzeko modulua
konektatu modulu bat clickhousera sartzeko izenarekin ch1 (konexioa bera konfigurazioan konfiguratuta dago)
bidali eskaera bat clickhouse-ra
akatsen bat izanez gero, mezu bat bistaratzen dugu erregistroan eta irtengo gara
Konparatu kontsultaren emaitza konstante batekin (zuzeneko adibide batean, balio hori lor genezake, adibidez, Postgres datu-basetik)
gaitu edo desgaitu alerta IDarekin rps-min-limit
jakinarazpen bat jasoko duzu alerta-egoera aldatu bada
Adibidea nahiko sinplea eta ulergarria da. Hala ere, noski, bizitza errealean gidoiak nahiko luzeak eta konplexuak izan daitezke. Erraza da nahastea eta akatsak egitea.
Horregatik, nahi logiko bat heldu da: zure gidoietarako probak idazteko gai izatea. Eta v0.4.0 bertsioan hau agertu zen.
Gidoiak probatzea
Goiko adibidetik gure script-erako adibidea proba:
-- @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')
Urratsez urrats:
adierazi zein den proba idazten den gidoiaren izena
probaren izena (erregistroetarako)
konektatu proba-modulua
esango dugu zein emaitza itzuli behar den eskaera zehatz baterako clickhouse-ra ch1
zehaztutako mezuarekin alerta (errorea) rps-min-limit deitu dela egiaztatzen dugu
egiaztatu rps-min-limit alerta ez dagoela desgaituta (arrakasta)
Zer gehiago egin dezake Balerterrek?
Garrantzitsuena, nire ustez, Balerter trebetasunak ukitzen saiatuko naiz. Webgune ofizialean dena zehatz-mehatz ikus dezakezu https://balerter.com
datuak jaso
clickhouse
postgres
mysql
prometeoa
loki
bidali jakinarazpenak kanaletara
slack
telegrama
syslog
jakinarazi (UI jakinarazpenak zure ordenagailuan)
e-posta
discord
sortu grafikoak zure datuetan oinarrituta, igo irudia S3 biltegiratze bateragarrian eta erantsi jakinarazpenei (Irudiekin adibidea)
scripten artean datuak trukatzeko aukera ematen dizu - Gako/Balioen biltegiratze globala
idatzi zure liburutegiak Luan eta erabili scriptetan (lehenespenez, lua liburutegiak json, csv-ekin lan egiteko hornitzen dira)
bidali HTTP eskaerak zure scriptetatik (eta jaso erantzunak, noski)
API bat eskaintzen du (oraindik ez da nahiko genukeen bezain funtzionala)
Prometheus formatuan metrikak esportatzen ditu
Zer gehiago egin nahiko zenuke?
Dagoeneko argi dago erabiltzaileek eta guk sintaxia erabiliz scripten abiarazte kontrolatzeko gaitasuna nahi dugula cron. Hau v1.0.0 bertsioa baino lehen egingo da
Datu-iturri eta jakinarazpenak bidaltzeko kanal gehiago onartu nahi nituzke. Adibidez, norbaitek MongoDB galduko du zalantzarik gabe. Bilaketa elastikoa batzuentzat. Bidali SMSak eta/edo egin deiak zure telefono mugikorrera. Fitxategietatik ez ezik, datu-base batetik ere, adibidez, script-ak jaso ahal izan nahi ditugu. Azkenean, webgune atseginagoa eta proiekturako dokumentazio hobea nahi dugu.
Norbaiti beti falta zaio zerbait) Hemen komunitatearen eskaeran oinarritzen gara lehentasunak behar bezala ezartzeko. Eta komunitatearen laguntza dena konturatzeko
Ondorioz
Erabiltzen dugu Balerter Denbora dezente daukat. Dozenaka gidoik gure lasaitasuna zaintzen dute. Lan hau beste norbaitentzat baliagarria izatea espero dut.