ProHoster > Blog > Rêveberî > Karê hêsan bi hişyariyên tevlihev re. An jî dîroka afirandina Balerter
Karê hêsan bi hişyariyên tevlihev re. An jî dîroka afirandina Balerter
Her kes ji alertan hez dike.
Bê guman, pir çêtir e ku meriv gava tiştek qewimiye (an hatî rast kirin) were agahdar kirin ji bilî rûniştin û li grafikan binihêrin û li anomaliyan bigerin.
Û ji bo vê yekê gelek amûr hatine çêkirin. Alertmanager ji ekosîstema Prometheus û vmalert ji koma hilberê VictoriaMetrics. Agahdarî û hişyariyên Zabbix li Grafana. Nivîsarên xwe-nivîsandî di botên bash û Telegram-ê de ku bi awayekî periyodîk hin URL-ê derdixin û ji we re dibêjin ka tiştek xelet e. Gelek ji her tiştî.
Me, di pargîdaniya xwe de, di heman demê de çareseriyên cihêreng bikar anîn heya ku em ketin nav tevlihevî, an bêtir ne gengaziya afirandina hişyariyên tevlihev, tevlihev. Tiştê ku me dixwest û ya ku me bi dawî kir di bin qutbûnê de ye. TLDR: Bi vî rengî projeya çavkaniya vekirî xuya bû Balerter
Demek dirêj em bi hişyariyên ku li Grafana hatine mîheng kirin baş dijiyan. Erê, ev ne riya herî baş e. Her gav tê pêşniyar kirin ku hin çareseriyên pispor bikar bînin, wekî Alertmanager. Û me jî ji carekê zêdetir li ser tevgerê nihêrî. Û paşê, hêdî hêdî, me bêtir dixwest.
Dibêjin kengî nexşeyek diyarkirî bi %XX% ket/zêde bû û li gorî heyama berê ya M saetan N deqe li wir ma? Wusa dixuye ku hûn dikarin vê yekê bi Grafana an Alertmanager biceribînin, lê ew ne hêsan e. (An jî dibe ku ew ne gengaz be, ez ê niha nebêjim)
Gava ku divê biryara hişyariyê li ser bingeha daneyên ji çavkaniyên cihêreng were girtin, tişt hîn tevlihevtir dibin. Mînaka zindî:
Em daneyên du databasên Clickhouse kontrol dikin, dûv re wê bi hin daneyên Postgres re berhev dikin, û li ser hişyariyekê biryar didin. Signal an betal bike
Ji bo ku em li ser biryara xwe bifikirin, me gelek daxwazên mîna hev berhev kirine. Û dûv re me hewl da ku navnîşa yekem a hewcedariyên / kapasîteyên vê karûbarê, ku hîn nehatiye afirandin, berhev bikin.
xwe bigihînin çavkaniyên daneyên cuda. Ji bo nimûne, Prometheus, Clickhouse, Postgres
ji kanalên cihêreng re hişyariyan bişînin - telegram, slack, hwd.
di pêvajoya ramanê de, eşkere bû ku min ne ravekirinek daxuyandî, lê jêhatîbûna nivîsandina senaryoyan dixwest
skrîptên li ser bernameyek diherike
nûvekirina hêsan a nivîsan bêyî destpêkirina karûbarê
şiyana ku meriv bi rengekî fonksiyonê berfireh bike bêyî ku karûbarê ji kodên çavkaniyê ji nû ve ava bike
Ev lîste teqrîben e û bi îhtîmaleke mezin ne pir rast e. Hin xal hatin guhertin, hinek mirin. Her tişt wekî berê ye.
Bi rastî, bi vî rengî dîroka Balerter dest pê kir.
Ez ê hewl bidim ku bi kurtî vebêjim ka di dawiyê de çi qewimî û ew çawa dixebite. (Erê, bê guman, ev ne dawî ye. Ji bo pêşveçûna hilberê gelek plan hene. Ez ê tenê îro li ser rawestim)
Çawa dixebite?
Hûn li Lua senaryoyek dinivîsin ku hûn bi eşkere daxwazan dişînin (ji Prometheus, Clickhouse, hwd.). Hûn bersivan distînin û bi awayekî wan pêvajo dikin û didin ber hev. Dûv re hin celebek hişyariyê vekin / vekin. Balerter bixwe dê ji kanalên ku we mîheng kirine (E-name, telegram, slack, hwd.) agahdariyek bişîne. Skrîpta di navberên diyarkirî de tê meşandin. Û ... bi gelemperî, ew hemî)
Çêtir e ku meriv bi mînakek nîşan bide:
-- @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
Li vir çi diqewime:
em destnîşan dikin ku divê ev skrîpt her 10 saniyeyan carekê were darve kirin
navê skrîptê nîşan bide (ji bo API-yê, ji bo xuyangkirina têketinê, ji bo karanîna di ceribandinan de)
ji bo derxistina têketin modulê girêdin
modulek ve girêdin da ku bi navê xwe bigihîjin klîkhouse ch1 (têkilî bixwe di mîhengê de hatî mîheng kirin)
daxwazek bişînin clickhouse
heke xeletiyek hebe, em di têketinê de peyamek nîşan didin û derdikevin
Encama pirsê bi domdar re bidin hev (di mînakek zindî de, em dikarin vê nirxê, mînakî, ji databasa Postgres bistînin)
hişyariya bi ID-ê çalak bike an neçalak bike rps-min-limit
heke rewşa hişyariyê hatibe guhertin hûn ê agahdariyek bistînin
Mînak pir hêsan û têgihîştî ye. Lêbelê, bê guman, di jiyana rast de nivîsar dikarin pir dirêj û tevlihev bin. Hêsan e ku meriv tevlihev bibe û xeletiyan bike.
Ji ber vê yekê, xwestekek mantiqî mezin bûye - ku hûn bikaribin ji bo nivîsarên xwe ceribandinan binivîsin. Û di versiyona v0.4.0 de ev xuya bû.
Testkirina nivîsarên
Mînaka testa ji bo nivîsara me ji mînaka jorîn:
-- @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')
Gav bi gav:
navê skrîpta ku îmtîhan lê hatiye nivîsandin nîşan bide
navê testê (ji bo têketin)
module testê ve girêdin
em dibêjin ka çi encam ji bo daxwazek taybetî ji klîkhouseê re were vegerandin ch1
em kontrol dikin ku hişyariya (çewtî) rps-min-sînorê bi peyama diyarkirî re hat gotin
kontrol bikin ku hişyariya rps-min-sînor neçalak nebûye (serkeftin)
Balerter dikare çi bike?
Ez ê hewl bidim ku li gorî nêrîna min, jêhatîbûna Balerter-ê ya herî girîng dest pê bikim. Hûn dikarin her tiştî bi hûrgulî li ser malpera fermî bibînin https://balerter.com
daneyan ji
clickhouse
postgres
mysql
prometheus
loki
ji kanalan re ragihandinan bişînin
şaş
têlxiram
syslog
agahdar bike (agahiyên UI li ser komputera we)
email
berbiçav
Li ser bingeha daneyên xwe grafîkan ava bikin, wêneyê li hilanîna lihevhatî ya S3 barkirin û bi agahdariyan ve girêdin (Mînak bi wêneyan)
destûrê dide te ku hûn daneyan di navbera nivîsan de biguhezînin - hilanîna Key/Nirx a gerdûnî
pirtûkxaneyên xwe li Lua binivîsin û wan di skrîptan de bikar bînin (bi xwerû, pirtûkxaneyên lua ji bo xebata bi json, csv re têne peyda kirin)
daxwazên HTTP ji nivîsarên xwe bişînin (û bersivan bistînin, bê guman)
API peyda dike (hîn ne bi qasî ku em dixwazin fonksiyonel e)
metrîkên di forma Prometheus de derdixe
Ma hûn dixwazin wekî din çi bikin?
Jixwe diyar e ku bikarhêner û em dixwazin kapasîteya kontrolkirina destpêkirina nivîsan bi karanîna hevoksaziyê bikin cron. Ev ê berî guhertoya v1.0.0 were kirin
Ez dixwazim bêtir çavkaniyên daneyê û kanalên radestkirina ragihandinê piştgirî bikim. Mînakî, kesek bê guman MongoDB-ê winda dike. Lêgerîna Elastic ji bo hin. Ji telefona xweya desta re SMS bişînin û/an jî telefon bikin. Em dixwazin ne tenê ji pelan, lê ji bo nimûne, ji databasek jî nivîsan bistînin. Di dawiyê de, em ji bo projeyê malperek bikarhêner-hevaltir û belgeyên çêtir dixwazin.
Kesek her gav tiştek winda dike) Li vir em xwe dispêrin daxwaziya civakê da ku pêşanîn rast destnîşan bikin. Û ji bo alîkariya civakê ji bo her tiştî fêm bikin
Di encamê de
Em bikar tînin Balerter Ev demeke dirêj e ku min ew heye. Bi dehan senaryo aramiya hişê me diparêzin. Ez hêvî dikim ku ev kar dê ji bo kesek din bikêr be.