Lihtne töö keeruliste hoiatustega. VÔi Balerteri loomise lugu.

Lihtne töö keeruliste hoiatustega. VÔi Balerteri loomise lugu.

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

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.

Lihtne töö keeruliste hoiatustega. VÔi Balerteri loomise 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-limit

  • saate 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 ch1

  • kontrollime, 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 https://balerter.com

  • 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 (NĂ€ide piltidega)

  • 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 Balerter 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

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster