ProHoster > Blog > Stjórnsýsla > Auðveld vinna með flóknum viðvörunum. Eða sögu sköpunar Balerter
Auðveld vinna með flóknum viðvörunum. Eða sögu sköpunar Balerter
Allir elska viðvaranir.
Auðvitað er miklu betra að fá tilkynningu þegar eitthvað hefur gerst (eða verið lagað) en að sitja og skoða línurit og leita að frávikum.
Og mörg verkfæri hafa verið búin til fyrir þetta. Alertmanager frá Prometheus vistkerfinu og vmalert frá VictoriaMetrics vöruflokknum. Zabbix tilkynningar og viðvaranir í Grafana. Sjálfskrifuð handrit í bash og Telegram vélmenni sem draga upp einhverja vefslóð reglulega og segja þér hvort eitthvað sé að. Mikið af öllu.
Við, í fyrirtækinu okkar, notuðum líka mismunandi lausnir þar til við lentum í flókninni, eða réttara sagt, ómöguleikann á að búa til flóknar, samsettar viðvaranir. Það sem við vildum og það sem við enduðum á að gera er fyrir neðan niðurskurðinn. TLDR: Svona virtist opinn uppspretta verkefnið Balerter
Í nokkuð langan tíma bjuggum við vel með viðvaranir stilltar í Grafana. Já, þetta er ekki besta leiðin. Það er alltaf mælt með því að nota einhverjar sérhæfðar lausnir eins og Alertmanager. Og við horfðum líka til að flytja oftar en einu sinni. Og svo, smátt og smátt, vildum við meira.
Segðu þegar ákveðið graf hefur lækkað/hækkað um XX% og hefur verið þar í N mínútur miðað við fyrra tímabil M klukkustunda? Það virðist sem þú getur reynt að útfæra þetta með Grafana eða Alertmanager, en það er ekki alveg auðvelt. (Eða kannski er það ekki hægt, ég segi ekki núna)
Hlutirnir verða enn flóknari þegar viðvörunarákvörðunin verður að vera byggð á gögnum frá mismunandi aðilum. Lifandi dæmi:
Við athugum gögnin úr tveimur Clickhouse gagnagrunnum, berum þau svo saman við nokkur gögn frá Postgres og ákveðum viðvörun. Gefðu til kynna eða hættu við
Við höfum safnað töluvert af svipuðum löngunum til að við hugsum um ákvörðun okkar. Og svo reyndum við að setja saman fyrsta lista yfir kröfur/möguleika þessarar þjónustu, sem hefur ekki enn verið búin til.
aðgang að mismunandi gagnaveitum. Til dæmis, Prometheus, Clickhouse, Postgres
senda viðvaranir á ýmsar rásir - símskeyti, slaki osfrv.
í hugsunarferlinu varð ljóst að ég vildi ekki lýsandi lýsingu, heldur getu til að skrifa handrit
keyra forskriftir á áætlun
auðveld uppfærsla á forskriftum án þess að endurræsa þjónustuna
getu til að auka virkni á einhvern hátt án þess að endurbyggja þjónustuna frá frumkóðum
Þessi listi er áætlaður og líklega ekki mjög nákvæmur. Sumir punktar breyttust, sumir dóu. Allt er eins og venjulega.
Reyndar byrjaði saga Balerter þannig.
Ég ætla að reyna að lýsa stuttlega hvað gerðist á endanum og hvernig það virkar. (Já, auðvitað er þetta ekki endirinn. Það eru margar áætlanir um vöruþróun. Ég læt aðeins staðar numið í dag)
Hvernig virkar það?
Þú skrifar handrit í Lua þar sem þú sendir beinlínis beiðnir (til Prometheus, Clickhouse o.s.frv.). Þú færð svör og vinnur þau á einhvern hátt og ber saman þau. Kveiktu/slökktu svo á einhvers konar viðvörun. Balerter sjálfur mun senda tilkynningu til rásanna sem þú hefur stillt (Tölvupóstur, símskeyti, slaki osfrv.). Handritið er keyrt með tilteknu millibili. Og... almennt, það er allt)
Best er að sýna með dæmi:
-- @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
Hvað er í gangi hér:
við gefum til kynna að þetta handrit ætti að vera keyrt á 10 sekúndna fresti
tilgreinið heiti skriftunnar (fyrir API, til birtingar í annálum, til notkunar í prófum)
tengdu eininguna til að gefa út logs
tengdu einingu til að fá aðgang að smellahúsinu með nafninu ch1 (tengingin sjálf er stillt í stillingunni)
sendu beiðni til clickhouse
ef um villu er að ræða birtum við skilaboð í skránni og hættum
bera saman fyrirspurnarniðurstöðuna við fasta (í lifandi dæmi gætum við fengið þetta gildi, til dæmis úr Postgres gagnagrunninum)
virkja eða slökkva á viðvörun með auðkenni rps-min-limit
þú færð tilkynningu ef viðvörunarstaðan hefur breyst
Dæmið er frekar einfalt og skiljanlegt. Hins vegar, í raunveruleikanum, geta handrit verið frekar löng og flókin. Það er auðvelt að ruglast og gera mistök.
Þess vegna hefur rökrétt löngun þroskast - að geta skrifað próf fyrir handritin þín. Og í útgáfu v0.4.0 birtist þetta.
Prófa forskriftir
Dæmi um próf fyrir handritið okkar úr dæminu hér að ofan:
-- @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')
Skref fyrir skref:
tilgreinið nafn handritsins sem prófið er skrifað fyrir
prófunarheiti (fyrir logs)
tengdu prófunareininguna
við segjum hvaða niðurstöðu ætti að skila fyrir tiltekna beiðni til smellihússins ch1
við athugum að viðvörun (villu) rps-min-takmarkið með tilgreindum skilaboðum hafi verið kallað
athugaðu að rps-min-limit viðvörunin hafi ekki verið óvirk (vel heppnuð)
Hvað annað getur Balerter gert?
Ég mun reyna að snerta mikilvægustu, að mínu mati, Balerter færni. Þú getur séð allt í smáatriðum á opinberu vefsíðunni https://balerter.com
fá gögn frá
smellahús
postgres
MySQL
promethean
Loki
senda tilkynningar á rásir
slaki
símskeyti
syslog
tilkynna (HÍ tilkynningar á tölvunni þinni)
Tölvupóst eða
discord
byggðu línurit byggð á gögnunum þínum, hlaðið myndinni upp í S3 samhæfða geymslu og hengja hana við tilkynningar (Dæmi með myndum)
gerir þér kleift að skiptast á gögnum á milli forskrifta - alþjóðlegt Key/Value geymsla
skrifaðu þín eigin bókasöfn í Lua og notaðu þau í forskriftum (sjálfgefið eru Lua bókasöfn til að vinna með json, csv)
sendu HTTP beiðnir úr skriftunum þínum (og fáðu svör, auðvitað)
býður upp á API (ekki enn eins virkt og við viljum)
flytur út mælikvarða á Prometheus sniði
Hvað annað myndir þú vilja geta gert?
Það er þegar ljóst að notendur og við viljum hafa möguleika á að stjórna ræsingu forskrifta með því að nota setningafræði cron. Þetta verður gert fyrir útgáfu v1.0.0
Mig langar til að styðja við fleiri gagnaveitur og tilkynningaleiðir. Til dæmis mun einhver örugglega sakna MongoDB. Teygjanlegt Leit að sumum. Sendu SMS og/eða hringdu í farsímann þinn. Við viljum geta tekið á móti skriftum ekki aðeins úr skrám, heldur einnig til dæmis úr gagnagrunni. Að lokum viljum við notendavænni vef og betri skjöl fyrir verkefnið.
Einhver vantar alltaf eitthvað) Hér treystum við á beiðni samfélagsins til að forgangsraða rétt. Og til hjálpar samfélaginu að átta sig á öllu
Að lokum
Við notum Balerter Ég er búinn að vera með það í nokkuð langan tíma núna. Tugir handrita standa vörð um hugarró okkar. Ég vona að þessi vinna nýtist einhverjum öðrum.