ProHoster > ΠΠ»ΠΎΠ³ > Pagdumala > Sayon nga trabaho nga adunay komplikado nga mga alerto. O ang kasaysayan sa paglalang sa Balerter
Sayon nga trabaho nga adunay komplikado nga mga alerto. O ang kasaysayan sa paglalang sa Balerter
Ang tanan ganahan og alerto.
Siyempre, mas maayo nga mapahibalo kung adunay nahitabo (o naayo) kaysa sa paglingkod ug pagtan-aw sa mga graph ug pagpangita sa mga anomaliya.
Ug daghang mga himan ang gihimo alang niini. Alertmanager gikan sa Prometheus ecosystem ug vmalert gikan sa VictoriaMetrics nga grupo sa produkto. Mga pahibalo ug alerto sa Zabbix sa Grafana. Ang mga sinulat sa kaugalingon nga mga script sa bash ug Telegram bots nga matag karon ug unya mokuha sa pipila ka URL ug isulti kanimo kung adunay sayup. Daghan sa tanan.
Kami, sa among kompaniya, migamit usab ug lain-laing mga solusyon hangtod nga nasinati namo ang pagkakomplikado, o, hinuon, ang imposibilidad sa paghimo og komplikado, composite nga mga alerto. Ang among gusto ug kung unsa ang among nahimo naa sa ubos sa pagputol. TLDR: Ingon niini ang pagpakita sa open source nga proyekto Balerter
Sa dugay nga panahon nagpuyo kami nga maayo sa mga alerto nga gi-configure sa Grafana. Oo, dili kini ang pinakamaayo nga paagi. Kanunay nga girekomenda ang paggamit sa pipila ka mga espesyal nga solusyon, sama sa Alertmanager. Ug mitan-aw usab kami sa paglihok labaw pa sa kausa. Ug dayon, sa hinay-hinay, gusto namong dugang.
Ingna kung kanus-a ang usa ka tsart nahulog/mitaas sa XX% ug naa didto sulod sa N minuto kumpara sa miaging yugto sa M oras? Ingon og mahimo nimong sulayan nga ipatuman kini gamit ang Grafana o Alertmanager, apan dili kini kadali. (O tingali dili kini mahimo, dili nako isulti karon)
Ang mga butang mahimong labi ka komplikado kung ang alerto nga desisyon kinahanglan himuon base sa datos gikan sa lainlaing mga gigikanan. Live nga pananglitan:
Gisusi namo ang datos gikan sa duha ka mga database sa Clickhouse, unya itandi kini sa pipila ka datos gikan sa Postgres, ug pagdesisyon sa usa ka alerto. Signal o kanselahon
Daghan na kaayo mig natigom nga susamang mga tinguha nga among hunahunaon ang among desisyon. Ug dayon gisulayan namon ang pagtipon sa una nga lista sa mga kinahanglanon / kapabilidad sa kini nga serbisyo, nga wala pa nahimo.
pag-access sa lain-laing mga tinubdan sa datos. Pananglitan, Prometheus, Clickhouse, Postgres
magpadala mga alerto sa lainlaing mga channel - telegrama, slack, ug uban pa.
sa proseso sa paghunahuna, nahimong tin-aw nga dili ko gusto ang usa ka deklaratibo nga paghulagway, apan ang abilidad sa pagsulat sa mga script
pagpadagan sa mga script sa usa ka eskedyul
dali nga pag-update sa mga script nga wala i-restart ang serbisyo
ang abilidad sa usa ka paagi sa pagpalapad sa pagpaandar nga walay pagtukod pag-usab sa serbisyo gikan sa mga source code
Kini nga lista gibanabana ug lagmit dili kaayo tukma. Ang ubang mga punto nausab, ang uban namatay. Ang tanan sama sa naandan.
Sa tinuud, ingon niini nagsugod ang kasaysayan sa Balerter.
Akong sulayan ang paghulagway sa daklit kung unsa ang nahitabo sa katapusan ug kung giunsa kini molihok. (Oo, siyempre, dili kini ang katapusan. Adunay daghang mga plano alang sa pagpalambo sa produkto. Mohunong na lang ko karong adlawa)
Unsang paagi kini sa trabaho?
Nagsulat ka og script sa Lua diin klaro ka nga nagpadala og mga hangyo (sa Prometheus, Clickhouse, ug uban pa). Makadawat ka og mga tubag ug sa usa ka paagi iproseso ug itandi kini. Dayon i-on/i-off ang usa ka matang sa alerto. Ang Balerter mismo magpadala usa ka pahibalo sa mga channel nga imong gi-configure (Email, telegrama, slack, ug uban pa). Ang script gipatuman sa piho nga mga agwat. Ug... sa kinatibuk-an, kana lang)
Labing maayo nga ipakita uban ang usa ka pananglitan:
-- @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
Unsa ang nahitabo dinhi:
Gipakita namon nga kini nga script kinahanglan ipatuman matag 10 segundos
ipakita ang ngalan sa script (alang sa API, para ipakita sa mga log, para gamiton sa mga pagsulay)
ikonektar ang module alang sa pag-output sa mga log
ikonektar ang usa ka module aron ma-access ang clickhouse nga adunay ngalan ch1 (ang koneksyon mismo gi-configure sa config)
magpadala ug hangyo sa clickhouse
sa kaso sa usa ka sayop, kita nagpakita sa usa ka mensahe sa log ug exit
itandi ang resulta sa pangutana sa usa ka makanunayon (sa usa ka buhi nga pananglitan, makuha nato kini nga bili, pananglitan, gikan sa database sa Postgres)
i-enable o i-disable ang alert gamit ang ID rps-min-limit
makadawat ka usa ka pahibalo kung ang kahimtang sa alerto nausab
Ang pananglitan yano ug masabtan. Bisan pa, siyempre, sa tinuud nga kinabuhi nga mga script mahimoβg taas ug komplikado. Dali ra maglibog ug masayop.
Busa, ang usa ka lohikal nga tinguha nahamtong - nga makahimo sa pagsulat sa mga pagsulay alang sa imong mga script. Ug sa bersyon v0.4.0 kini nagpakita.
Pagsulay sa mga script
Pananglitan nga pagsulay alang sa among script gikan sa pananglitan sa ibabaw:
-- @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')
Ang mga lakang:
ipakita ang ngalan sa script diin gisulat ang pagsulay
ngalan sa pagsulay (alang sa mga log)
ikonektar ang module sa pagsulay
giingon namon kung unsang resulta ang kinahanglan ibalik alang sa usa ka piho nga hangyo sa clickhouse ch1
among gisusi nga ang alert (error) rps-min-limit nga adunay gipiho nga mensahe gitawag
susiha nga ang rps-min-limit alert wala ma-disable (malampuson)
Unsa pa ang mahimo ni Balerter?
Ako mosulay sa paghikap sa labing importante, sa akong opinyon, Balerter kahanas. Makita nimo ang tanan sa detalye sa opisyal nga website https://balerter.com
makadawat data gikan sa
clickhouse
postgres
MySQL
Prometheus
loki
ipadala ang mga pahibalo sa mga channel
huyang
telegram
syslog
notify (mga pahibalo sa UI sa imong computer)
email
panagbulag
paghimo og mga graph base sa imong data, i-upload ang imahe sa S3 compatible storage ug i-attach kini sa notifications (Pananglitan nga adunay mga litrato)
nagtugot kanimo sa pagbayloay og data tali sa mga script - global Key/Value storage
isulat ang imong kaugalingon nga mga librarya sa Lua ug gamita kini sa mga script (sa default, ang mga librarya sa lua gihatag alang sa pagtrabaho sa json, csv)
ipadala ang mga hangyo sa HTTP gikan sa imong mga script (ug makadawat mga tubag, siyempre)
naghatag usa ka API (dili pa ingon ka magamit sa gusto namon)
nag-eksport sa mga sukatan sa Prometheus nga pormat
Unsa pa ang gusto nimo nga mahimo?
Klaro na nga ang mga tiggamit ug gusto namon ang abilidad sa pagkontrol sa paglansad sa mga script gamit ang syntax cron. Kini buhaton sa wala pa ang bersyon v1.0.0
Gusto nako nga suportahan ang daghang mga gigikanan sa datos ug mga agianan sa paghatud sa pahibalo. Pananglitan, adunay usa nga siguradong mingawon sa MongoDB. Elastic Pagpangita alang sa pipila. Pagpadala og SMS ug/o paghimo og mga tawag sa imong mobile phone. Gusto namon nga makadawat mga script dili lamang gikan sa mga file, apan usab, pananglitan, gikan sa usa ka database. Sa katapusan, gusto namon ang usa ka labi ka user-friendly nga website ug mas maayo nga dokumentasyon alang sa proyekto.
Adunay kanunay nga kulang sa usa ka butang) Dinhi kami nagsalig sa hangyo sa komunidad aron mabutang ang mga prayoridad sa husto. Ug sa pagtabang sa komunidad nga maamgohan ang tanan
Sa konklusyon
Gigamit namon Balerter Naa koy dugay na. Daghang mga script ang nagbantay sa among kalinaw sa hunahuna. Nanghinaut ko nga kini nga trabaho mapuslanon sa uban.