
KÔik armastavad hoiatusi.
Loomulikult on palju parem saada teade, kui midagi on juhtunud (vÔi parandatud), kui lihtsalt vaadata graafikuid ja otsida anomaaliaid.
Ja selleks on loodud palju tööriistu. Alertmanager Prometheuse ökosĂŒsteemist ja vmalert VictoriaMetricsi toodete grupist. Zabbixi teavitused ja hoiatused Grafanas. KĂ€sitsi kirjutatud skriptid bashis ja Telegrami botid, mis aeg-ajalt tĂ”mbavad mĂ”ne URL-i ja ĂŒtlevad, kui midagi on valesti. Palju kĂ”ike.
Meie ettevĂ”ttes oleme samuti kasutanud erinevaid lahendusi, kuni sattusime keerukuse vĂ”i pigem vĂ”imatuse otsa keeruliste, koosnevate hoiatuste loomisel. Mida me soovisime ja mida lĂ”puks tegime â allpool. TLDR: Nii sai alguse avatud lĂ€htekoodiga projekt.
Pika aega elasime hÀsti Graphanas konfigureeritud hoiatustega. Jah, see ei ole parim tee. Alati soovitatakse kasutada spetsialiseeritud lahendusi nagu Alertmanager. Me oleme ka korduvalt vaadanud kolimise suunas. Ja siis, jÀrk-jÀrgult, soovisime rohkem.
Kas teeksid nÀiteks meeldetuletuse, kui mÔni graafik on langenud vÔi tÔusnud XX% ja on olnud seal N minutit vÔrreldes eelneva M tunni perioodiga? NÀib, et seda vÔiks proovida teostada Grafana vÔi Alertmanageriga, kuid see ei ole kuigi lihtne. (VÔib-olla pole see isegi vÔimalik, ma ei oska praegu öelda.)
Asjad muutuvad veelgi keerulisemaks, kui teade hÀirete tegemise kohta tuleb teha andmete pÔhjal, mis on saadud erinevatest allikatest. Elav nÀide:
Kontrollime andmeid kahest Clickhouse andmebaasist, seejĂ€rel vĂ”rdleme neid mĂ”ningate andmetega Postgresest ja teeme Ă€ratusotsuse. Andke teada vĂ”i tĂŒhistage.
Taolisi soove on meil kogunenud piisavalt palju, et oleme hakanud mÔtlema oma lahendusele. Ja siis proovisime koostada esialgse nÔuete/vÔimaluste nimekirja selle veel lÔppemate teenuse jaoks.
pöörduda erinevate andmeallikate poole. NÀiteks, Prometheus, Clickhouse, Postgres.
saata hĂ€ireid erinevatesse kanalitesse â telegrammi, slacki jne.
mÔtlemisprotsessi kÀigus sai selgeks, et soovitakse mitte deklaratiivset kirjeldust, vaid vÔimalust kirjutada skripte.
skriptide kÀivitamine ajakava jÀrgi.
kerge skriptide uuendamine ilma teenuse taaskÀivitamiseta.
vÔime laiendada funktsionaalsust ilma teenuse lÀhtelaadimisega.
See on tÔenÀoliselt ebatÀpne nimekiri. MÔned punktid on muutunud, mÔned kadunud. KÔik nagu ikka.
Just nii algas Balerteri lugu.

PĂŒĂŒan lĂŒhidalt kirjeldada, mis viimaks vĂ€lja tuli ja kuidas see töötab. (Jah, see pole loomulikult lĂ”pp. Palju plaane toote arendamiseks. Peatun lihtsalt tĂ€nases pĂ€evas.)
Kuidas see töötab?
Kirjutate skripti Lua keeles, kus saadate selgelt pĂ€ringud (Prometheus, Clickhouse jne). Saate vastused ja töötlete ning vĂ”rreldate neid mingil viisil. SeejĂ€rel lĂŒlitate sisse/vĂ€lja teatud hĂ€ire. Balerter saadab ise teavituse kanalitesse, mida olete seadistanud (Email, Telegram, Slack jne). Skript tĂ€idetakse mÀÀratud perioodilisusega. Ja⊠see on 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' 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 Mis siin toimub:
öelda, et see skript peaks tÀituma iga 10 sekundi tagant
mÀÀra skripti nimi (API jaoks, logides kuvamiseks, testimiseks)
ĂŒhendame logide vĂ€ljundimooduli
ĂŒhendame klikihoone mooduli nimega
ch1(ise ĂŒhendamine seadistatakse konfis)saadame pĂ€ringu klikihoonesse
vigade korral â kuvame logis teate ja lahkume
vÔrdleme pÀringu tulemust konstantsiga (reaalses nÀites vÔiksime selle vÀÀrtuse saada nÀiteks Postgres andmebaasist)
lĂŒlitame hĂ€ire sisse vĂ”i vĂ€lja ID-ga
rps-min-limitsaate teate, kui hÀire olek muutub
NĂ€idis on piisavalt lihtne ja arusaadav. Kuid, loomulikult, reaalses elus vĂ”ivad skriptid olla ĂŒsna keerulised ja segased. Neisse on lihtne sattuda ja vigu teha.
SeetĂ”ttu on tekkinud loogiline soov â saada vĂ”imalus kirjutada teste oma skriptide jaoks. Ja versioonis v0.4.0 on see olemas.
Skriptide testimine
NÀidis test meie skripti jaoks eelnevast nÀitest:
-- @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')Sammud:
nÀitame skripti nime, mille jaoks test on kirjutatud
testi nimi (logide jaoks)
ĂŒhendame testimismooduli
ĂŒtleme, millist tulemust tuleks teatud pĂ€ringu korral Kickhouse'ist tagastada
ch1kontrollime, et alarikkumine (error) rps-min-limit koos mÀÀratud sÔnumiga oleks kutsutud
kontrollime, et alarikkumine rps-min-limit ei olnud kutsutud (success)
Mida veel Balerter oskab?
PĂŒĂŒan puudutada kĂ”ige olulisemaid Balerter'i oskusi, minu arvates. Ăksikasju saab vaadata ametlikul veebilehel
saama andmeid
clickhouse
postgres
mysql
prometheus
loki
saata teateid kanalitesse
slack
telegram
syslog
notiify (UI teated teie arvutis)
email
discord
ehitada graafikuid teie andmete pÔhjal, laadida pilti S3-sarnasesse salvestusse ja lisada teatele ()
mööda vahetada andmeid skriptide vahel â globaalne Key/Value salvestus
kirjutada oma raamatukogusid Lua-s ja kasutada neid skriptides (vaikimisi kaasas on lua-raamatukogud tööks json-iga, csv-iga)
saata HTTP-pÀringuid oma skriptidest (ja loomulikult ka saada vastuseid)
pakub API-d (hetkel mitte nii funktsionaalne, nagu sooviksime)
ekspordib mÔÔdikud Prometheuse formaadis
Mida veel sooviks Ôppida?
On juba selge, et kasutajad ja meie soovime, et saaksime skriptide kĂ€ivitamist hallata sĂŒntaksiga cron. See saab olema valmis enne versiooni v1.0.0
Tahame toetada rohkem andmeallikaid ja teavituse edastamise kanaleid. NÀiteks kellelegi ei piisa kindlasti MongoDB-st. Kedagi huvitab Elastic Search. Saata SMS-e ja/vÔi helistada mobiilile. Tahame, et saaksime skripte saada mitte ainult failidest, vaid ka nÀiteks andmebaasist. LÔppude lÔpuks soovime projektile mugavamat veebisaiti ja paremat dokumentatsiooni.
Alati on kellegil midagi puudu) Siin loodame kogukonna pöördumistele, et Ôigesti seada prioriteedid. Ja kogukonna abi, et kÔik teoks teha
KokkuvÔtteks
Me kasutame oleme juba ĂŒsna kaua. KĂŒmned skriptid hoiavad meie rahu ja loodan, et see töö on kellelegi veel kasulik.
Ja tervetuloa Issue- ja PR-kansiosi.
Allikas: habr.com
