Könnyű munka összetett riasztásokkal. Vagy Balerter története

Könnyű munka összetett riasztásokkal. Vagy Balerter története

Mindenki szereti a figyelmeztetéseket.

Természetesen sokkal jobb értesítést kapni, ha valami történt (vagy kijavították), mint ülni, grafikonokat nézegetni, és anomáliákat keresni.

És ehhez számos eszközt készítettek. Alertmanager a Prometheus ökoszisztémából és vmalert a VictoriaMetrics termékcsoportból. Zabbix értesítések és figyelmeztetések a Grafana-ban. Ön által írt szkriptek bash és Telegram robotokban, amelyek időnként előhívnak valamilyen URL-t, és jelzik, ha valami nincs rendben. Sok minden.

Cégünknél is különböző megoldásokat alkalmaztunk, amíg bele nem ütköztünk az összetett, összetett riasztások létrehozásának bonyolultságába, vagy inkább lehetetlenségébe. Amit akartunk, és mire jutottunk, az a vágás alatt van. TLDR: Így jelent meg a nyílt forráskódú projekt Balerter

Elég sokáig jól éltünk a Grafanában konfigurált riasztásokkal. Igen, ez nem a legjobb módszer. Mindig ajánlott néhány speciális megoldás, például az Alertmanager használata. És a költözés felé is többször tekintettünk. Aztán apránként többet akartunk.

Mondjuk, amikor egy bizonyos diagram XX%-ot esett/nőtt, és N perce volt ott az előző M órás periódushoz képest? Úgy tűnik, hogy megpróbálhatja ezt megvalósítani a Grafana vagy az Alertmanager segítségével, de ez nem olyan egyszerű. (Vagy talán nem is lehetséges, most nem mondom)

A dolgok még bonyolultabbá válnak, ha a riasztási döntést különböző forrásokból származó adatok alapján kell meghozni. Élő példa:

Ellenőrizzük két Clickhouse adatbázis adatait, majd összehasonlítjuk a Postgres egyes adataival, és döntünk a riasztás mellett. Jelölje vagy törölje

Elég sok hasonló vágy halmozódott fel bennünk, hogy elgondolkodjunk a döntésünkön. Aztán megpróbáltuk összeállítani ennek a szolgáltatásnak az első követelményeit/képességeit, ami még nem készült el.

  • különböző adatforrásokhoz hozzáférni. Például Prometheus, Clickhouse, Postgres

  • riasztások küldése különböző csatornákra - távirat, laza stb.

  • a gondolkodás során világossá vált, hogy nem deklaratív leírást akarok, hanem forgatókönyvírás képességét

  • szkriptek ütemezett futtatása

  • a szkriptek egyszerű frissítése a szolgáltatás újraindítása nélkül

  • a funkcionalitás valamilyen módon történő bővítésének képessége anélkül, hogy a szolgáltatást forráskódokból újra kellene építeni

Ez a lista hozzávetőleges, és valószínűleg nem túl pontos. Néhány pont megváltozott, néhány elhalt. Minden a szokásos.

Valójában így kezdődött Balerter története.

Könnyű munka összetett riasztásokkal. Vagy Balerter története

Megpróbálom röviden leírni, mi történt végül és hogyan működik. (Igen, persze, ez még nem a vége. Sok terv van a termékfejlesztéssel kapcsolatban. A mai napon megállok)

Hogyan működik?

Írsz egy szkriptet a Lua-ban, ahol kifejezetten kéréseket küldesz (Prometheusnak, Clickhouse-nak stb.). Válaszokat kap, és valahogy feldolgozza és összehasonlítja őket. Ezután kapcsoljon be/ki valamilyen riasztást. Maga a Balerter értesítést küld az Ön által beállított csatornáknak (e-mail, távirat, slack stb.). A szkript meghatározott időközönként fut le. És... általában ennyi)

A legjobb egy példával bemutatni:

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

Mi folyik itt:

  • jelezzük, hogy ezt a szkriptet 10 másodpercenként kell végrehajtani

  • adja meg a szkript nevét (az API-hoz, a naplókban való megjelenítéshez, a tesztekben való használatra)

  • csatlakoztassa a modult a naplók kiadásához

  • csatlakoztasson egy modult a névvel ellátott clickhouse eléréséhez ch1 (maga a kapcsolat a konfigurációban van konfigurálva)

  • küldjön kérést a clickhouse-nak

  • hiba esetén üzenetet jelenítünk meg a naplóban és kilépünk

  • hasonlítsa össze a lekérdezés eredményét egy konstanssal (egy élő példában ezt az értéket megkaphatjuk például a Postgres adatbázisból)

  • riasztás engedélyezése vagy letiltása azonosítóval rps-min-limit

  • értesítést kap, ha a riasztási állapot megváltozott

A példa meglehetősen egyszerű és érthető. Természetesen a való életben a forgatókönyvek meglehetősen hosszadalmasak és összetettek lehetnek. Könnyű összezavarodni és hibázni.

Ezért megérett egy logikus vágy – hogy tudjon teszteket írni a szkriptjeihez. És a v0.4.0 verzióban ez megjelent.

Szkriptek tesztelése

Példateszt a szkriptünkhöz a fenti példából:

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

A lépések:

  • adja meg a szkript nevét, amelyre a tesztet írták

  • tesztnév (naplókhoz)

  • csatlakoztassa a tesztelő modult

  • megmondjuk, hogy egy konkrét kérés esetén milyen eredményt kell visszaküldeni a clickhouse-nak ch1

  • ellenőrizzük, hogy a megadott üzenettel rendelkező riasztás (hiba) rps-min-limit meghívásra került-e

  • ellenőrizze, hogy az rps-min-limit riasztás nem lett-e letiltva (siker)

Mit tehet még Balerter?

Megpróbálom érinteni a véleményem szerint legfontosabb Balerter-készségeket. A hivatalos oldalon mindent részletesen megtekinthet https://balerter.com

  • adatot fogadni

    • clickhouse

    • postgres

    • mysql

    • Prométheusz

    • Loki

  • értesítéseket küldeni a csatornáknak

    • laza

    • távirat

    • syslog

    • értesítés (UI-értesítések a számítógépen)

    • email

    • viszály

  • grafikonokat készíthet adatai alapján, feltöltheti a képet S3-kompatibilis tárhelyre, és csatolhatja az értesítésekhez (Példa képekkel)

  • lehetővé teszi a szkriptek közötti adatcserét - globális kulcs/érték tároló

  • írja meg saját könyvtárait Lua-ban, és használja azokat szkriptekben (alapértelmezés szerint a lua-könyvtárak a json, csv-vel való munkavégzéshez vannak biztosítva)

  • HTTP-kérések küldése a szkriptekből (és természetesen válaszok fogadása)

  • API-t biztosít (még nem olyan működőképes, mint szeretnénk)

  • a mutatókat Prometheus formátumban exportálja

Mi mást szeretnél még csinálni?

Az már világos, hogy a felhasználók és mi is azt akarjuk, hogy a szintaxis segítségével irányíthassuk a szkriptek indítását cron. Ez a v1.0.0 verzió előtt fog megtörténni

Több adatforrást és értesítéskézbesítési csatornát szeretnék támogatni. Például valakinek biztosan hiányozni fog a MongoDB. Elasztikus Keresés néhány. Küldjön SMS-t és/vagy hívjon a mobiltelefonjára. Azt akarjuk, hogy ne csak fájlokból, hanem például adatbázisból is tudjunk szkripteket fogadni. Végül egy felhasználóbarátabb weboldalt és jobb dokumentációt szeretnénk a projekthez.

Valakinek mindig hiányzik valami) Itt a közösség kérésére hagyatkozunk a prioritások helyes felállítása érdekében. És a közösség segítségére, hogy mindent megvalósítson

Összefoglalva

Használunk Balerter Már egy jó ideje megvan. Több tucat forgatókönyv őrzi lelki békénket. Remélem, ez a munka másnak is hasznos lesz.

És üdvözöljük a kérdésével és a PR-jával.

Forrás: will.com

Hozzászólás