Gwaith hawdd gyda rhybuddion cymhleth. Neu hanes creu Balerter

Gwaith hawdd gyda rhybuddion cymhleth. Neu hanes creu Balerter

Mae pawb yn caru rhybuddion.

Wrth gwrs, mae'n llawer gwell cael gwybod pan fydd rhywbeth wedi digwydd (neu wedi'i drwsio) nag eistedd ac edrych ar graffiau a chwilio am anghysondebau.

Ac mae llawer o offer wedi'u creu ar gyfer hyn. Alertmanager o ecosystem Prometheus a vmalert o grΕ΅p cynnyrch VictoriaMetrics. Hysbysiadau a rhybuddion Zabbix yn Grafana. Sgriptiau hunan-ysgrifenedig mewn botiau bash a Telegram sy'n tynnu rhywfaint o URL i fyny o bryd i'w gilydd ac yn dweud wrthych a oes rhywbeth o'i le. Llawer o bopeth.

Fe wnaethom ni, yn ein cwmni, ddefnyddio gwahanol atebion hefyd nes i ni ddod i'r afael Γ’'r cymhlethdod, neu, yn hytrach, yr amhosibl o greu rhybuddion cymhleth, cyfansawdd. Mae'r hyn yr oeddem ei eisiau a'r hyn y gwnaethom ei wneud yn y pen draw yn is na'r toriad. TLDR: Dyma sut yr ymddangosodd y prosiect ffynhonnell agored Balerter

Am gyfnod eithaf hir buom yn byw'n dda gyda rhybuddion wedi'u ffurfweddu yn Grafana. Ie, nid dyma'r ffordd orau. Argymhellir bob amser i ddefnyddio rhai atebion arbenigol, megis Alertmanager. Ac fe edrychon ni hefyd tuag at symud fwy nag unwaith. Ac yna, fesul tipyn, roedden ni eisiau mwy.

Dywedwch pryd mae siart benodol wedi gostwng/cynyddu XX% ac wedi bod yno am N munud o'i gymharu Γ’'r cyfnod M awr blaenorol? Mae'n ymddangos y gallwch chi geisio gweithredu hyn gyda Grafana neu Alertmanager, ond nid yw'n hawdd iawn. (Neu efallai nad yw'n bosibl, ni ddywedaf nawr)

Mae pethau'n mynd yn fwy cymhleth fyth pan fydd yn rhaid gwneud y penderfyniad effro yn seiliedig ar ddata o wahanol ffynonellau. Enghraifft fyw:

Rydym yn gwirio'r data o ddwy gronfa ddata Clickhouse, yna'n ei gymharu Γ’ rhywfaint o ddata gan Postgres, ac yn penderfynu ar rybudd. Arwyddo neu ganslo

Rydym wedi cronni cryn dipyn o ddymuniadau tebyg i ni feddwl am ein penderfyniad. Ac yna fe wnaethom geisio llunio'r rhestr gyntaf o ofynion / galluoedd y gwasanaeth hwn, nad yw wedi'i greu eto.

  • cyrchu ffynonellau data gwahanol. Er enghraifft, Prometheus, Clickhouse, Postgres

  • anfon rhybuddion i sianeli amrywiol - telegram, slac, ac ati.

  • yn y broses o feddwl, daeth yn amlwg nad oeddwn eisiau disgrifiad datganiadol, ond y gallu i ysgrifennu sgriptiau

  • rhedeg sgriptiau ar amserlen

  • diweddaru sgriptiau'n hawdd heb ailgychwyn y gwasanaeth

  • y gallu i rywsut ehangu ymarferoldeb heb ailadeiladu'r gwasanaeth o godau ffynhonnell

Mae'r rhestr hon yn fras ac mae'n debyg nad yw'n gywir iawn. Newidiodd rhai pwyntiau, bu farw rhai. Mae popeth fel arfer.

A dweud y gwir, dyma sut y dechreuodd hanes Balerter.

Gwaith hawdd gyda rhybuddion cymhleth. Neu hanes creu Balerter

Byddaf yn ceisio disgrifio'n fyr beth ddigwyddodd yn y diwedd a sut mae'n gweithio. (Ie, wrth gwrs, nid dyma'r diwedd. Mae llawer o gynlluniau ar gyfer datblygu cynnyrch. Byddaf yn stopio heddiw)

Sut mae'n gweithio?

Rydych chi'n ysgrifennu sgript yn Lua lle rydych chi'n anfon ceisiadau'n benodol (i Prometheus, Clickhouse, ac ati). Rydych chi'n derbyn atebion a rhywsut yn eu prosesu a'u cymharu. Yna trowch ymlaen / i ffwrdd rhyw fath o rybudd. Bydd Balerter ei hun yn anfon hysbysiad i'r sianeli rydych chi wedi'u ffurfweddu (E-bost, telegram, slac, ac ati). Gweithredir y sgript ar adegau penodol. Ac... yn gyffredinol, dyna i gyd)

Mae'n well dangos gydag enghraifft:

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

Beth sy'n digwydd yma:

  • rydym yn nodi y dylid gweithredu'r sgript hon bob 10 eiliad

  • nodwch enw'r sgript (ar gyfer yr API, i'w harddangos mewn logiau, i'w defnyddio mewn profion)

  • cysylltu'r modiwl ar gyfer allbynnu logiau

  • cysylltu modiwl i gael mynediad i'r clickhouse gyda'r enw ch1 (mae'r cysylltiad ei hun wedi'i ffurfweddu yn y ffurfwedd)

  • anfon cais i clickhouse

  • rhag ofn y bydd gwall, rydym yn arddangos neges yn y log ac allanfa

  • cymharu canlyniad yr ymholiad Γ’ chysonyn (mewn enghraifft fyw, gallem gael y gwerth hwn, er enghraifft, o gronfa ddata Postgres)

  • galluogi neu analluogi rhybudd gydag ID rps-min-limit

  • byddwch yn derbyn hysbysiad os yw statws y rhybudd wedi newid

Mae'r enghraifft yn eithaf syml a dealladwy. Fodd bynnag, wrth gwrs, mewn bywyd go iawn gall sgriptiau fod yn eithaf hir a chymhleth. Mae'n hawdd drysu a gwneud camgymeriadau.

Felly, mae awydd rhesymegol wedi aeddfedu - i allu ysgrifennu profion ar gyfer eich sgriptiau. Ac yn fersiwn v0.4.0 ymddangosodd hyn.

Profi sgriptiau

Prawf enghreifftiol ar gyfer ein sgript o'r enghraifft uchod:

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

Y camau:

  • nodwch enw'r sgript yr ysgrifennwyd y prawf ar ei chyfer

  • enw prawf (ar gyfer logiau)

  • cysylltu y modiwl profi

  • dywedwn pa ganlyniad y dylid ei ddychwelyd am gais penodol i'r clickhouse ch1

  • rydym yn gwirio bod y rhybudd (gwall) rps-min-limit gyda'r neges benodedig wedi'i alw

  • gwirio nad oedd y rhybudd rps-min-limit wedi'i analluogi (llwyddiant)

Beth arall all Balerter ei wneud?

Byddaf yn ceisio cyffwrdd ar y sgiliau Balerter pwysicaf, yn fy marn i. Gallwch weld popeth yn fanwl ar y wefan swyddogol https://balerter.com

  • derbyn data oddi wrth

    • clichouse

    • postgres

    • mysql

    • Prometheus

    • Loki

  • anfon hysbysiadau i sianeli

    • lladd

    • telegram

    • syslog

    • hysbysu (hysbysiadau UI ar eich cyfrifiadur)

    • e-bost

    • anghytgord

  • adeiladu graffiau yn seiliedig ar eich data, uwchlwytho'r ddelwedd i storfa gydnaws S3 a'i hatodi i hysbysiadau (Enghraifft gyda lluniau)

  • yn eich galluogi i gyfnewid data rhwng sgriptiau - storfa Allwedd/Gwerth byd-eang

  • ysgrifennu eich llyfrgelloedd eich hun yn Lua a'u defnyddio mewn sgriptiau (yn ddiofyn, darperir llyfrgelloedd lu ar gyfer gweithio gyda json, csv)

  • anfon ceisiadau HTTP o'ch sgriptiau (a derbyn ymatebion, wrth gwrs)

  • yn darparu API (ddim eto mor ymarferol ag yr hoffem)

  • yn allforio metrigau ar ffurf Prometheus

Beth arall hoffech chi allu ei wneud?

Mae eisoes yn amlwg bod defnyddwyr ac rydym am gael y gallu i reoli lansiad sgriptiau gan ddefnyddio'r gystrawen cron. Gwneir hyn cyn fersiwn v1.0.0

Hoffwn gefnogi mwy o ffynonellau data a sianeli cyflwyno hysbysiadau. Er enghraifft, bydd rhywun yn bendant yn gweld eisiau MongoDB. Elastig Chwilio am rai. Anfon SMS a/neu wneud galwadau i'ch ffΓ΄n symudol. Rydym am allu derbyn sgriptiau nid yn unig o ffeiliau, ond hefyd, er enghraifft, o gronfa ddata. Yn y diwedd, rydym eisiau gwefan sy'n haws ei defnyddio a dogfennaeth well ar gyfer y prosiect.

Mae rhywun wastad yn colli rhywbeth) Yma rydym yn dibynnu ar gais y gymuned er mwyn gosod blaenoriaethau yn gywir. Ac i gymorth y gymuned i wireddu popeth

I gloi

Rydym yn defnyddio Balerter Rwyf wedi ei gael ers cryn amser bellach. Mae dwsinau o sgriptiau yn gwarchod ein tawelwch meddwl. Rwy'n gobeithio y bydd y gwaith hwn yn ddefnyddiol i rywun arall.

A chroeso gyda'ch Rhifyn a Chysylltiadau Cyhoeddus.

Ffynhonnell: hab.com

Ychwanegu sylw