Lan erraza alerta konplexuekin. Edo Balerterren historia

Lan erraza alerta konplexuekin. Edo Balerterren historia

Denek maite dituzte alertak.

Jakina, askoz hobe da zerbait gertatu denean (edo konpondu denean) jakinaraztea grafikoei begira eseri eta anomaliak bilatzea baino.

Eta horretarako tresna asko sortu dira. Prometheus ekosistemako Alertmanager eta VictoriaMetrics produktu taldeko vmalert. Zabbix jakinarazpenak eta alertak Grafanan. Bash eta Telegram bot-etan norberak idatzitako script-ak aldian-aldian URL batzuk ateratzen dituzten eta zerbait gaizki dagoen ala ez adierazten dizute. Denetarik asko.

Guk, gure enpresan, konponbide desberdinak ere erabili genituen konplexutasunarekin edo, hobeto esanda, alerta konplexu eta konposatuak sortzeko ezintasunarekin topo egin genuen arte. Nahi genuena eta azkenean egiten genuena ebakiaren azpian dago. TLDR: Horrela agertu zen kode irekiko proiektua Balerter

Denbora luzez ondo bizi izan ginen Grafanan konfiguratutako alertekin. Bai, hau ez da biderik onena. Beti gomendatzen da soluzio espezializatu batzuk erabiltzea, hala nola Alertmanager. Eta behin baino gehiagotan mugitzeari ere begiratu diogu. Eta gero, pixkanaka, gehiago nahi genuen.

Esan taula jakin bat % XX jaitsi/hazi den eta N minutuz egon den M orduko aurreko aldiarekin alderatuta? Badirudi Grafana edo Alertmanager-ekin hau inplementatzen saia zaitezkeela, baina ez da oso erraza. (Edo agian ez da posible, orain ez dut esango)

Gauzak are gehiago zaildu egiten dira alerta-erabakia iturri ezberdinetako datuetan oinarrituta hartu behar denean. Zuzeneko adibidea:

Bi Clickhouse datu-baseetako datuak egiaztatzen ditugu, gero Postgres-en datu batzuekin konparatu eta alerta bat erabakitzen dugu. Seinalatu edo bertan behera utzi

Antzeko gogo asko pilatu ditugu gure erabakia pentsatzeko. Eta gero, oraindik sortu ez den zerbitzu honen eskakizun/gaitasunen lehen zerrenda osatzen saiatu ginen.

  • datu-iturri desberdinetara sartzeko. Adibidez, Prometheus, Clickhouse, Postgres

  • bidali alertak hainbat kanaletara: telegrama, slack, etab.

  • pentsatzeko prozesuan, argi geratu zen ez nuela deskribapen deklaratiborik nahi, gidoiak idazteko gaitasuna baizik

  • gidoiak programazio batean exekutatzen

  • scripten eguneratze erraza zerbitzua berrabiarazi gabe

  • nolabait funtzionalitateak zabaltzeko gaitasuna iturburu-kodeetatik zerbitzua berreraiki gabe

Zerrenda hau gutxi gorabeherakoa da eta ziurrenik ez da oso zehatza. Puntu batzuk aldatu ziren, beste batzuk hil ziren. Dena ohi bezala da.

Egia esan, horrela hasi zen Balerterren historia.

Lan erraza alerta konplexuekin. Edo Balerterren historia

Azkenean zer gertatu den eta nola funtzionatzen duen deskribatzen saiatuko naiz. (Bai, noski, hau ez da amaiera. Produktuen garapenerako plan asko daude. Gaur bertan geldituko naiz)

Nola funtzionatzen du?

Luan gidoi bat idazten duzu eta bertan eskaerak espresuki bidaltzen dituzu (Prometheus, Clickhouse, etab.). Erantzunak jasotzen dituzu eta nolabait prozesatu eta konparatzen dituzu. Ondoren, piztu/desaktibatu alerta motaren bat. Balerterrek berak jakinarazpen bat bidaliko die konfiguratu dituzun kanalei (E-posta, telegrama, slack, etab.). Script-a zehaztutako tarteetan exekutatzen da. Eta... oro har, hori da dena)

Hobe da adibide batekin erakustea:

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

Zer gertatzen da hemen:

  • script hau 10 segundoro exekutatu behar dela adierazten dugu

  • adierazi script-aren izena (APIrako, erregistroetan bistaratzeko, probetan erabiltzeko)

  • konektatu erregistroak ateratzeko modulua

  • konektatu modulu bat clickhousera sartzeko izenarekin ch1 (konexioa bera konfigurazioan konfiguratuta dago)

  • bidali eskaera bat clickhouse-ra

  • akatsen bat izanez gero, mezu bat bistaratzen dugu erregistroan eta irtengo gara

  • Konparatu kontsultaren emaitza konstante batekin (zuzeneko adibide batean, balio hori lor genezake, adibidez, Postgres datu-basetik)

  • gaitu edo desgaitu alerta IDarekin rps-min-limit

  • jakinarazpen bat jasoko duzu alerta-egoera aldatu bada

Adibidea nahiko sinplea eta ulergarria da. Hala ere, noski, bizitza errealean gidoiak nahiko luzeak eta konplexuak izan daitezke. Erraza da nahastea eta akatsak egitea.

Horregatik, nahi logiko bat heldu da: zure gidoietarako probak idazteko gai izatea. Eta v0.4.0 bertsioan hau agertu zen.

Gidoiak probatzea

Goiko adibidetik gure script-erako adibidea proba:

-- @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')

Urratsez urrats:

  • adierazi zein den proba idazten den gidoiaren izena

  • probaren izena (erregistroetarako)

  • konektatu proba-modulua

  • esango dugu zein emaitza itzuli behar den eskaera zehatz baterako clickhouse-ra ch1

  • zehaztutako mezuarekin alerta (errorea) rps-min-limit deitu dela egiaztatzen dugu

  • egiaztatu rps-min-limit alerta ez dagoela desgaituta (arrakasta)

Zer gehiago egin dezake Balerterrek?

Garrantzitsuena, nire ustez, Balerter trebetasunak ukitzen saiatuko naiz. Webgune ofizialean dena zehatz-mehatz ikus dezakezu https://balerter.com

  • datuak jaso

    • clickhouse

    • postgres

    • mysql

    • prometeoa

    • loki

  • bidali jakinarazpenak kanaletara

    • slack

    • telegrama

    • syslog

    • jakinarazi (UI jakinarazpenak zure ordenagailuan)

    • e-posta

    • discord

  • sortu grafikoak zure datuetan oinarrituta, igo irudia S3 biltegiratze bateragarrian eta erantsi jakinarazpenei (Irudiekin adibidea)

  • scripten artean datuak trukatzeko aukera ematen dizu - Gako/Balioen biltegiratze globala

  • idatzi zure liburutegiak Luan eta erabili scriptetan (lehenespenez, lua liburutegiak json, csv-ekin lan egiteko hornitzen dira)

  • bidali HTTP eskaerak zure scriptetatik (eta jaso erantzunak, noski)

  • API bat eskaintzen du (oraindik ez da nahiko genukeen bezain funtzionala)

  • Prometheus formatuan metrikak esportatzen ditu

Zer gehiago egin nahiko zenuke?

Dagoeneko argi dago erabiltzaileek eta guk sintaxia erabiliz scripten abiarazte kontrolatzeko gaitasuna nahi dugula cron. Hau v1.0.0 bertsioa baino lehen egingo da

Datu-iturri eta jakinarazpenak bidaltzeko kanal gehiago onartu nahi nituzke. Adibidez, norbaitek MongoDB galduko du zalantzarik gabe. Bilaketa elastikoa batzuentzat. Bidali SMSak eta/edo egin deiak zure telefono mugikorrera. Fitxategietatik ez ezik, datu-base batetik ere, adibidez, script-ak jaso ahal izan nahi ditugu. Azkenean, webgune atseginagoa eta proiekturako dokumentazio hobea nahi dugu.

Norbaiti beti falta zaio zerbait) Hemen komunitatearen eskaeran oinarritzen gara lehentasunak behar bezala ezartzeko. Eta komunitatearen laguntza dena konturatzeko

Ondorioz

Erabiltzen dugu Balerter Denbora dezente daukat. Dozenaka gidoik gure lasaitasuna zaintzen dute. Lan hau beste norbaitentzat baliagarria izatea espero dut.

Eta ongi etorri zure Alea eta PR-ekin.

Iturria: www.habr.com

Gehitu iruzkin berria