
KÔik armastavad teateid.
Muidugi on palju parem saada teadet, kui midagi on juhtunud (vÔi parandatud), kui istuda ja vaadata graafikuid ning otsida anomaaliaid.
Ja selliste tööriistade jaoks on loodud mitmeid. Alertmanager Prometheuse ökosĂŒsteemist ja vmalert VictoriaMetricsi tootegrupist. Zabbixi teated ja teated Grafanas. Isiklikud skriptid bashis ja Telegrami botid, mis aeg-ajalt uurivad mĂ”nda URL-i ja ĂŒtlevad, kui midagi on valesti. Palju kĂ”ike.
Meie ettevĂ”ttes kasutasime samuti erinevaid lahendusi, kuni silmitsi seisisime keerukuse vĂ”i pigem vĂ”imatuse loomisega keerukate, koostisosalistest teatedest. Mida me tahtsime ja mida lĂ”puks tegime - allpool. TLDR: Nii sĂŒndis open source projekt
Pikka aega elasime hĂ€sti teatistega, mis olid seadistatud Grafanas. Jah, see ei ole parim tee. Alati on soovitatav kasutada mingeid spetsialiseeritud lahendusi, nagu Alertmanager. Ja me vaatlesime ka ĂŒht-teist uue lahenduse suunas. Ja siis, aeglaselt, soovime rohkem.
Kas öelda, kui mingi graafik on langenud/tĂ”usnud XX% ja on seal olnud juba N minutit, vĂ”rreldes eelmise M tunni perioodiga? Tundub, et seda saab proovida realiseerida Grafana vĂ”i Alertmanageriga, kuid ĂŒsna keeruline. (VĂ”ib-olla ei saagi, ma ei oska hetkel öelda)
KÔik muutub veel keerulisemaks, kui teate vastuvÔtt tuleb langetada erinevatest allikatest saadud andmete pÔhjal. Elav nÀide:
Kontrollime andmeid kahest Clickhouse'i andmebaasist, seejĂ€rel vĂ”rdleme neid mĂ”nede Postgresi andmete kanssa ja teeme otsuse teate kohta. Signalisatsiooni anda vĂ”i tĂŒhistada
Sarnaseid soove on meil kogunenud piisavalt palju, et me hakkasime mÔtlema oma lahendusele. Ja siis proovisin koostada esimest nimekirja nÔudmistest/vÔimalustest selle, veel loomata, teenuse jaoks
pöörduda erinevate andmeallikate poole. NÀiteks Prometheus, Clickhouse, Postgres
saata teateid erinevatesse kanalitesse â telegram, slack jne.
mÔtlemise kÀigus selgus, et tahame mitte deklaratiivset kirjeldust, vaid vÔimalust kirjutada skripte
skriptide kÀivitamine ajakava jÀrgi
skriptide lihtne uuendamine teenuse taaskÀivitamata
vÔimalus laiendada funktsionaalsust ilma teenuse lÀhtekoodist uuesti koostamata
See on umbkaudne nimekiri ja tÔenÀoliselt mitte vÀga tÀpne. MÔned punktid muutsid oma vormi, mÔned kadusid. KÔik nagu tavaliselt.
Just nii algas Balerteri lugu.

Proovin lĂŒhidalt kirjeldada, mis lĂ”puks vĂ€lja tuli ja kuidas see töötab. (Jah, muidugi, see ei ole veel lĂ”pp. Toote arendamiseks on palju plaane. Peatun lihtsalt tĂ€nases pĂ€evas.)
Kuidas see töötab?
Sa kirjutad Lua skripti, kus sa selgelt saadad pĂ€ringud (Prometheusse, Clickhouse'i jne). Sa saad vastuseid ja töötled ning vĂ”rreld neid mingil moel. SeejĂ€rel lĂŒlitad sisse/vĂ€lja mingi hĂ€ire. Balerter saadab ise teateid kanalitesse, mida oled seadistanud (Email, telegram, slack jne). Skript kĂ€ivitatakse kindla sagedusega. Ja... see ongi pĂ”himĂ”tteliselt kĂ”ik.)
Parim on nÀidata nÀite abil:
-- @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' pÀringu viga: " .. err)
return
end
local resultRPS = res[1].rps
if resultRPS < minResultRPS then
alert.error("rps-min-limit", "PÀringute RPS on vÀga vÀike: " .. tostring(resultRPS))
else
alert.success("rps-min-limit", "PĂ€ringute RPS on okei")
end Mis siin toimub:
nÀitame, et see skript peab kÀivituma iga 10 sekundi tagant
siit nÀidatakse skripti nime (API jaoks, logides kuvamiseks, testides kasutamiseks)
klÔpsame logide vÀljastamise moodulit
klÔpsame moodulit Clickhouse'i nimel
ch1(ende ĂŒhendamine seadistatakse konfiguratsioonis)saadame pĂ€ringu Clickhouse'i
vea korral - vÀljastame sÔnumi logi ja lahkume
vÔrdleme pÀringu tulemust konstantiga (reaalses nÀites saaksime selle vÀÀrtuse nÀiteks PostgreSQL andmebaasist)
lĂŒlitame sisse vĂ”i vĂ€lja hĂ€ire ID-ga
rps-min-limitsa saad teate, kui hÀire staatus muutub
NĂ€ide on ĂŒsna lihtne ja arusaadav. Siiski, muidugi, reaalses elus vĂ”ivad skriptid olla ĂŒsna keerukad ja komplitseeritud. Neis on lihtne segadusse minna ja vigu teha.
SeetÔttu on tekkinud loogiline soov - omada vÔimalust kirjutada teste oma skriptide jaoks. Ja versioonis v0.4.0 oli see olemas.
Skriptide testimine
NĂ€ide testist meie eespool toodud skripti jaoks:
-- @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', 'PÀringute RPS on vÀga vÀike: 10')
test.alert().assertNotCalled('success', 'rps-min-limit', 'PĂ€ringute RPS on okei')Sammud:
nÀitame skripti nime, mille jaoks test kirjutati
testi nime (logide jaoks)
klÔpsame testimise moodulit
rÀÀgime, millist tulemust tuleb tagasi anda teatud pÀringu korral ClickHouse'ile
ch1kontrollime, et alert (error) rps-min-limit on vÀlja kutsutud koos soovitatud sÔnumiga
kontrollime, et alert rps-min-limit ei olnud vĂ€lja lĂŒlitatud (success)
Mida veel Balerter oskab?
Proovin puudutada kĂ”ige olulisi Balerteri oskusi, minu arvates. Ăksikasjalikult saab kĂ”ike vaadata ametlikul kodulehel
andmeid
clickhouse
postgres
mysql
prometheus
loki
saata teateid kanalitesse
slack
telegram
syslog
notify (UI teated teie arvutis)
email
discord
ehitada graafikuid oma andmete pĂ”hjal, laadida pilte S3 ĂŒhilduvatesse salvestusse ja lisada need teatele ()
vĂ”imaldab andmeid vahetada skriptide vahel â globaalne Key/Value salvestus
kirjutada oma raamatukogusid Lua-s ja kasutada neid skriptides (vaikimisi on saadaval lua-raamatukogud töötamiseks json-i ja csv-ga)
saata HTTP pÀringuid oma skriptidest (ja loomulikult vastu vÔtta vastuseid)
pakub API-d (veel ei ole nii funktsionaalne, nagu sooviksime)
ekspordib mÔÔdikud Prometheuse formaadis
Mida veel sooviksime osata?
On juba selge, et kasutajad ja me soovime vĂ”imalust hallata skriptide kĂ€ivitamist sĂŒntaksiga cron. See tehakse enne versiooni v1.0.0
Tahaks toetada rohkem andmeallikaid ja teate edastamise kanaleid. NÀiteks mÔnele vÔib kindlasti puududa MongoDB. MÔnele Elastic Search. Saata SMS ja/vÔi helistada mobiiltelefonile. Soovime osata saada skripte mitte ainult failidest, vaid ka nÀiteks andmebaasist. LÔpuks tahame projektile mugavama kodulehe ja paremat dokumentatsiooni.
Alati kellegil midagi vajaka) Siin loodame kogukonna pÀringutele, et Ôigeid prioriteete seada. Ja kogukonna abi, et kÔik ellu viia
KokkuvÔtteks
Me kasutame oleme seda juba pĂ€ris kaua teinud. KĂŒmned skriptid seisavad meie rahu nimel. Loodan, et see töö on kasulik ka kellegile teisele.
Ja tere tulemast oma probleemide ja PR-idega.
Allikas: habr.com
