Lihtne töö keeruliste hoiatustega. Või Balerteri loomise ajalugu

Lihtne töö keeruliste hoiatustega. Või Balerteri loomise ajalugu

Kõik armastavad hoiatusi.

Muidugi on palju parem saada teada, kui midagi on juhtunud (või parandatud), kui istuda ja vaadata graafikuid ja otsida kõrvalekaldeid.

Ja selleks on loodud palju tööriistu. Alertmanager Prometheuse ökosüsteemist ja vmalert VictoriaMetricsi tooterühmast. Zabbixi märguanded ja hoiatused Grafanas. Bash- ja Telegrami robotites ise kirjutatud skriptid, mis tõmbavad perioodiliselt mõne URL-i ja annavad teada, kui midagi on valesti. Palju kõike.

Ka meie, oma ettevõttes, kasutasime erinevaid lahendusi, kuni sattusime keeruliste koondhoiatuste loomise keerukuse, õigemini võimatuse. See, mida me tahtsime ja milleni lõpuks tegime, jääb allapoole. TLDR: nii ilmus avatud lähtekoodiga projekt Balerter

Üsna pikka aega elasime Grafanas konfigureeritud hoiatustega hästi. Jah, see pole parim viis. Alati on soovitatav kasutada mõnda spetsiaalset lahendust, näiteks Alertmanager. Ja ka kolimise poole vaatasime rohkem kui korra. Ja siis, vähehaaval, tahtsime rohkem.

Ütle, millal teatud diagramm on langenud/tõusnud XX% ja on seal olnud N minutit võrreldes eelmise M-tunnise perioodiga? Näib, et võite proovida seda rakendada Grafana või Alertmanageriga, kuid see pole päris lihtne. (Või võib-olla pole see võimalik, ma ei ütle praegu)

Asi läheb veelgi keerulisemaks, kui hoiatusotsus tuleb teha erinevatest allikatest pärit andmete põhjal. Elav näide:

Kontrollime andmeid kahest Clickhouse'i andmebaasist, võrdleme neid mõne Postgresi andmetega ja otsustame hoiatuse. Anna märku või tühista

Meile on kogunenud üsna palju sarnaseid soove oma otsuse üle järele mõelda. Ja siis proovisime koostada esimest nimekirja selle teenuse nõuetest/võimalustest, mida pole veel loodud.

  • pääseda juurde erinevatele andmeallikatele. Näiteks Prometheus, Clickhouse, Postgres

  • saata teateid erinevatele kanalitele - telegramm, slack jne.

  • mõtlemise käigus sai selgeks, et ma ei taha deklaratiivset kirjeldust, vaid skriptide kirjutamise oskust

  • skriptide käivitamine ajakava järgi

  • skriptide lihtne värskendamine ilma teenust taaskäivitamata

  • võimalus funktsionaalsust kuidagi laiendada ilma teenust lähtekoodidest ümber ehitamata

See nimekiri on ligikaudne ja tõenäoliselt mitte väga täpne. Mõned punktid muutusid, mõned surid. Kõik on nagu tavaliselt.

Tegelikult sai nii Balerteri ajalugu alguse.

Lihtne töö keeruliste hoiatustega. Või Balerteri loomise ajalugu

Püüan lühidalt kirjeldada, mis lõpuks juhtus ja kuidas see toimib. (Jah, muidugi, see pole veel lõpp. Tootearenduse plaane on palju. Ma peatun täna)

Kuidas see toimib?

Kirjutate Luas skripti, kus saadate selgesõnaliselt päringuid (Prometheusele, Clickhouse'ile jne). Sa saad vastused ning töötled ja võrdled neid kuidagi. Seejärel lülita sisse/välja mingi märguanne. Balerter saadab ise märguande teie seadistatud kanalitele (e-post, telegramm, lõtk jne). Skripti käivitatakse määratud ajavahemike järel. Ja... üldiselt on see kõik)

Parim on näidata näitega:

-- @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:

  • näitame, et seda skripti tuleks käivitada iga 10 sekundi järel

  • märkige skripti nimi (API jaoks, logides kuvamiseks, testides kasutamiseks)

  • logide väljastamiseks ühendage moodul

  • ühendage moodul, et pääseda juurde nimega Clickhouse'ile ch1 (ühendus ise on seadistatud konfiguratsioonis)

  • saatke taotlus clickhouse'ile

  • vea korral kuvame logis teate ja väljume

  • võrrelge päringu tulemust konstandiga (reaalajas näites saame selle väärtuse näiteks Postgresi andmebaasist)

  • ID-ga märguande lubamine või keelamine rps-min-limit

  • saate teate, kui hoiatuse olek on muutunud

Näide on üsna lihtne ja arusaadav. Muidugi võivad skriptid päriselus olla üsna pikad ja keerulised. Lihtne on segadusse sattuda ja vigu teha.

Seetõttu on küpsenud loogiline soov – saada oma skriptidele teste kirjutada. Ja versioonis v0.4.0 see ilmus.

Skriptide testimine

Meie skripti testi näide ülaltoodud 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')

Samm sammu haaval:

  • märkige skripti nimi, mille jaoks test on kirjutatud

  • testi nimi (logide jaoks)

  • ühendage testimismoodul

  • me ütleme, milline tulemus tuleks Clickhouse'ile konkreetse päringu korral tagastada ch1

  • kontrollime, kas määratud teatega märguanne (viga) rps-min-limit kutsuti

  • kontrollige, et rps-min-limit hoiatus ei oleks keelatud (edunes)

Mida Balerter veel teha saab?

Püüan puudutada minu arvates kõige olulisemat Balerteri oskusi. Kõike näete üksikasjalikult ametlikul veebisaidil https://balerter.com

  • saada andmeid

    • clickhouse

    • postgres

    • MySQL

    • Prometheus

    • Loki

  • saata kanalitele teateid

    • nõrk

    • telegramm

    • syslog

    • teavitama (kasutajaliidese märguanded teie arvutis)

    • e-mail

    • ebakõla

  • koostage oma andmete põhjal graafikud, laadige pilt S3-ga ühilduvasse salvestusruumi ja lisage see teavitustele (Näide piltidega)

  • võimaldab vahetada andmeid skriptide vahel – globaalne võtme/väärtuse salvestus

  • kirjutage oma teegid Luas ja kasutage neid skriptides (vaikimisi pakutakse lua teeke jsoni, csv-ga töötamiseks)

  • saatke oma skriptidest HTTP-päringuid (ja saage loomulikult vastuseid)

  • pakub API-d (pole veel nii funktsionaalne, kui me sooviksime)

  • ekspordib mõõdikuid Prometheuse vormingus

Mida sa veel teha tahaksid?

Juba praegu on selge, et kasutajad ja meie soovime võimalust juhtida skriptide käivitamist süntaksi abil cron. Seda tehakse enne versiooni v1.0.0

Soovin toetada rohkem andmeallikaid ja teavituste edastamise kanaleid. Näiteks MongoDB-st jääb keegi kindlasti puudust tundma. Elastne otsing mõne jaoks. Saatke SMS-i ja/või helistage oma mobiiltelefonile. Tahame saada skripte mitte ainult failidest, vaid ka näiteks andmebaasist. Lõpuks soovime kasutajasõbralikumat veebisaiti ja projekti paremat dokumentatsiooni.

Kellelgi on alati midagi puudu) Siin lähtume kogukonna palvest, et seada prioriteedid õigesti. Ja kogukonna abiks kõike realiseerida

Kokkuvõttes

Me kasutame Balerter Mul on see juba mõnda aega olnud. Kümned skriptid valvavad meie meelerahu. Loodan, et sellest tööst on kellelegi teisele kasu.

Tere tulemast oma numbri ja suhtekorraldusega.

Allikas: www.habr.com

Lisa kommentaar