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.

Auðveld vinna með flóknum viðvörunum. Eða sögu sköpunar Balerter

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

Og velkominn með málefnið þitt og PR.

Heimild: www.habr.com

Bæta við athugasemd