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