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

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

KÔik armastavad teateid.

Muidugi on palju parem saada teadet, kui midagi on juhtunud (vÔi parandatud), kui istuda ja vaadata graafikuid ning otsida anomaaliaid.

Ja selliste tööriistade jaoks on loodud mitmeid. Alertmanager Prometheuse ökosĂŒsteemist ja vmalert VictoriaMetricsi tootegrupist. Zabbixi teated ja teated Grafanas. Isiklikud skriptid bashis ja Telegrami botid, mis aeg-ajalt uurivad mĂ”nda URL-i ja ĂŒtlevad, kui midagi on valesti. Palju kĂ”ike.

Meie ettevĂ”ttes kasutasime samuti erinevaid lahendusi, kuni silmitsi seisisime keerukuse vĂ”i pigem vĂ”imatuse loomisega keerukate, koostisosalistest teatedest. Mida me tahtsime ja mida lĂ”puks tegime - allpool. TLDR: Nii sĂŒndis open source projekt Balerter

Pikka aega elasime hĂ€sti teatistega, mis olid seadistatud Grafanas. Jah, see ei ole parim tee. Alati on soovitatav kasutada mingeid spetsialiseeritud lahendusi, nagu Alertmanager. Ja me vaatlesime ka ĂŒht-teist uue lahenduse suunas. Ja siis, aeglaselt, soovime rohkem.

Kas öelda, kui mingi graafik on langenud/tĂ”usnud XX% ja on seal olnud juba N minutit, vĂ”rreldes eelmise M tunni perioodiga? Tundub, et seda saab proovida realiseerida Grafana vĂ”i Alertmanageriga, kuid ĂŒsna keeruline. (VĂ”ib-olla ei saagi, ma ei oska hetkel öelda)

KÔik muutub veel keerulisemaks, kui teate vastuvÔtt tuleb langetada erinevatest allikatest saadud andmete pÔhjal. Elav nÀide:

Kontrollime andmeid kahest Clickhouse'i andmebaasist, seejĂ€rel vĂ”rdleme neid mĂ”nede Postgresi andmete kanssa ja teeme otsuse teate kohta. Signalisatsiooni anda vĂ”i tĂŒhistada

Sarnaseid soove on meil kogunenud piisavalt palju, et me hakkasime mÔtlema oma lahendusele. Ja siis proovisin koostada esimest nimekirja nÔudmistest/vÔimalustest selle, veel loomata, teenuse jaoks

  • pöörduda erinevate andmeallikate poole. NĂ€iteks Prometheus, Clickhouse, Postgres

  • saata teateid erinevatesse kanalitesse — telegram, slack jne.

  • mĂ”tlemise kĂ€igus selgus, et tahame mitte deklaratiivset kirjeldust, vaid vĂ”imalust kirjutada skripte

  • skriptide kĂ€ivitamine ajakava jĂ€rgi

  • skriptide lihtne uuendamine teenuse taaskĂ€ivitamata

  • vĂ”imalus laiendada funktsionaalsust ilma teenuse lĂ€htekoodist uuesti koostamata

See on umbkaudne nimekiri ja tÔenÀoliselt mitte vÀga tÀpne. MÔned punktid muutsid oma vormi, mÔned kadusid. KÔik nagu tavaliselt.

Just nii algas Balerteri lugu.

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

Proovin lĂŒhidalt kirjeldada, mis lĂ”puks vĂ€lja tuli ja kuidas see töötab. (Jah, muidugi, see ei ole veel lĂ”pp. Toote arendamiseks on palju plaane. Peatun lihtsalt tĂ€nases pĂ€evas.)

Kuidas see töötab?

Sa kirjutad Lua skripti, kus sa selgelt saadad pĂ€ringud (Prometheusse, Clickhouse'i jne). Sa saad vastuseid ja töötled ning vĂ”rreld neid mingil moel. SeejĂ€rel lĂŒlitad sisse/vĂ€lja mingi hĂ€ire. Balerter saadab ise teateid kanalitesse, mida oled seadistanud (Email, telegram, slack jne). Skript kĂ€ivitatakse kindla sagedusega. Ja... see ongi pĂ”himĂ”tteliselt 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' pÀringu viga: " .. err)
    return
end

local resultRPS = res[1].rps

if resultRPS < minResultRPS then
    alert.error("rps-min-limit", "PÀringute RPS on vÀga vÀike: " .. tostring(resultRPS))
else
    alert.success("rps-min-limit", "PĂ€ringute RPS on okei")
end 

Mis siin toimub:

  • nĂ€itame, et see skript peab kĂ€ivituma iga 10 sekundi tagant

  • siit nĂ€idatakse skripti nime (API jaoks, logides kuvamiseks, testides kasutamiseks)

  • klĂ”psame logide vĂ€ljastamise moodulit

  • klĂ”psame moodulit Clickhouse'i nimel ch1 (ende ĂŒhendamine seadistatakse konfiguratsioonis)

  • saadame pĂ€ringu Clickhouse'i

  • vea korral - vĂ€ljastame sĂ”numi logi ja lahkume

  • vĂ”rdleme pĂ€ringu tulemust konstantiga (reaalses nĂ€ites saaksime selle vÀÀrtuse nĂ€iteks PostgreSQL andmebaasist)

  • lĂŒlitame sisse vĂ”i vĂ€lja hĂ€ire ID-ga rps-min-limit

  • sa saad teate, kui hĂ€ire staatus muutub

NĂ€ide on ĂŒsna lihtne ja arusaadav. Siiski, muidugi, reaalses elus vĂ”ivad skriptid olla ĂŒsna keerukad ja komplitseeritud. Neis on lihtne segadusse minna ja vigu teha.

SeetÔttu on tekkinud loogiline soov - omada vÔimalust kirjutada teste oma skriptide jaoks. Ja versioonis v0.4.0 oli see olemas.

Skriptide testimine

NĂ€ide testist meie eespool toodud skripti jaoks:

-- @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', 'PÀringute RPS on vÀga vÀike: 10')
test.alert().assertNotCalled('success', 'rps-min-limit', 'PĂ€ringute RPS on okei')

Sammud:

  • nĂ€itame skripti nime, mille jaoks test kirjutati

  • testi nime (logide jaoks)

  • klĂ”psame testimise moodulit

  • rÀÀgime, millist tulemust tuleb tagasi anda teatud pĂ€ringu korral ClickHouse'ile ch1

  • kontrollime, et alert (error) rps-min-limit on vĂ€lja kutsutud koos soovitatud sĂ”numiga

  • kontrollime, et alert rps-min-limit ei olnud vĂ€lja lĂŒlitatud (success)

Mida veel Balerter oskab?

Proovin puudutada kĂ”ige olulisi Balerteri oskusi, minu arvates. Üksikasjalikult saab kĂ”ike vaadata ametlikul kodulehel https://balerter.com

  • andmeid

    • clickhouse

    • postgres

    • mysql

    • prometheus

    • loki

  • saata teateid kanalitesse

    • slack

    • telegram

    • syslog

    • notify (UI teated teie arvutis)

    • email

    • discord

  • ehitada graafikuid oma andmete pĂ”hjal, laadida pilte S3 ĂŒhilduvatesse salvestusse ja lisada need teatele (NĂ€ide piltidega)

  • vĂ”imaldab andmeid vahetada skriptide vahel — globaalne Key/Value salvestus

  • kirjutada oma raamatukogusid Lua-s ja kasutada neid skriptides (vaikimisi on saadaval lua-raamatukogud töötamiseks json-i ja csv-ga)

  • saata HTTP pĂ€ringuid oma skriptidest (ja loomulikult vastu vĂ”tta vastuseid)

  • pakub API-d (veel ei ole nii funktsionaalne, nagu sooviksime)

  • ekspordib mÔÔdikud Prometheuse formaadis

Mida veel sooviksime osata?

On juba selge, et kasutajad ja me soovime vĂ”imalust hallata skriptide kĂ€ivitamist sĂŒntaksiga cron. See tehakse enne versiooni v1.0.0

Tahaks toetada rohkem andmeallikaid ja teate edastamise kanaleid. NÀiteks mÔnele vÔib kindlasti puududa MongoDB. MÔnele Elastic Search. Saata SMS ja/vÔi helistada mobiiltelefonile. Soovime osata saada skripte mitte ainult failidest, vaid ka nÀiteks andmebaasist. LÔpuks tahame projektile mugavama kodulehe ja paremat dokumentatsiooni.

Alati kellegil midagi vajaka) Siin loodame kogukonna pÀringutele, et Ôigeid prioriteete seada. Ja kogukonna abi, et kÔik ellu viia

KokkuvÔtteks

Me kasutame Balerter oleme seda juba pĂ€ris kaua teinud. KĂŒmned skriptid seisavad meie rahu nimel. Loodan, et see töö on kasulik ka kellegile teisele.

Ja tere tulemast oma probleemide ja PR-idega.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster