ProHoster > blog > Utawala > Kazi rahisi na arifa changamano. Au historia ya uumbaji wa Balerter
Kazi rahisi na arifa changamano. Au historia ya uumbaji wa Balerter
Kila mtu anapenda arifa.
Bila shaka, ni bora zaidi kuarifiwa wakati kitu kimetokea (au kurekebishwa) kuliko kukaa na kuangalia grafu na kutafuta hitilafu.
Na zana nyingi zimeundwa kwa hili. Alertmanager kutoka kwa mfumo ikolojia wa Prometheus na vmalert kutoka kikundi cha bidhaa cha VictoriaMetrics. Arifa na arifa za Zabbix huko Grafana. Maandishi yaliyojiandika katika bash na boti za Telegraph ambayo mara kwa mara huvuta baadhi ya URL na kukuambia ikiwa kuna kitu kibaya. Mengi ya kila kitu.
Sisi, katika kampuni yetu, pia tulitumia suluhisho tofauti hadi tukaingia kwenye ugumu, au, badala yake, kutowezekana kwa kuunda arifu ngumu, zenye mchanganyiko. Tulichotaka na tulichoishia kufanya ni chini ya kata. TLDR: Hivi ndivyo mradi wa chanzo huria ulivyoonekana Balerter
Kwa muda mrefu tuliishi vyema na arifa zilizosanidiwa huko Grafana. Ndio, hii sio njia bora. Inapendekezwa kila wakati kutumia suluhisho maalum, kama vile Alertmanager. Na pia tuliangalia kuelekea kusonga zaidi ya mara moja. Na kisha, kidogo kidogo, tulitaka zaidi.
Sema wakati chati fulani imeshuka/kuongezeka kwa XX% na imekuwa hapo kwa dakika N ikilinganishwa na kipindi cha awali cha saa M? Inaonekana kwamba unaweza kujaribu kutekeleza hili na Grafana au Alertmanager, lakini si rahisi kabisa. (Au labda haiwezekani, sitasema sasa)
Mambo huwa magumu zaidi wakati uamuzi wa tahadhari lazima ufanywe kulingana na data kutoka vyanzo tofauti. Mfano hai:
Tunaangalia data kutoka kwa hifadhidata mbili za Clickhouse, kisha tulinganishe na data fulani kutoka Postgres, na kuamua juu ya tahadhari. Ishara au ghairi
Tumekusanya matamanio mengi kama hayo kwa sisi kufikiria juu ya uamuzi wetu. Na kisha tulijaribu kukusanya orodha ya kwanza ya mahitaji / uwezo wa huduma hii, ambayo bado haijaundwa.
fikia vyanzo tofauti vya data. Kwa mfano, Prometheus, Clickhouse, Postgres
tuma arifu kwa vituo mbalimbali - telegram, slack, nk.
katika mchakato wa kufikiria, ikawa wazi kuwa sikutaka maelezo ya kutangaza, lakini uwezo wa kuandika maandishi.
kuendesha maandishi kwenye ratiba
sasisho rahisi la maandishi bila kuanzisha tena huduma
uwezo wa kupanua utendakazi kwa njia fulani bila kuunda upya huduma kutoka kwa misimbo ya chanzo
Orodha hii ni ya kukadiria na kuna uwezekano mkubwa si sahihi sana. Pointi zingine zilibadilika, zingine zilikufa. Kila kitu ni kama kawaida.
Kwa kweli, hivi ndivyo historia ya Balerter ilianza.
Nitajaribu kuelezea kwa ufupi kile kilichotokea mwishoni na jinsi inavyofanya kazi. (Ndiyo, bila shaka, huu sio mwisho. Kuna mipango mingi ya ukuzaji wa bidhaa. Nitakoma tu leo)
Jinsi gani kazi?
Unaandika hati katika Lua ambapo unatuma maombi kwa uwazi (kwa Prometheus, Clickhouse, nk.). Unapokea majibu na kwa namna fulani kuyachakata na kuyalinganisha. Kisha washa/uzima aina fulani ya tahadhari. Balerter yenyewe itatuma arifa kwa vituo ambavyo umesanidi (Barua pepe, telegramu, slack, n.k.). Hati inatekelezwa kwa vipindi maalum. Na ... kwa ujumla, ndivyo tu)
Ni bora kuonyesha kwa mfano:
-- @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
Nini kinaendelea hapa:
tunaonyesha kuwa hati hii inapaswa kutekelezwa kila sekunde 10
onyesha jina la hati (kwa API, kwa onyesho kwenye kumbukumbu, kwa matumizi ya majaribio)
unganisha moduli ya kutoa magogo
unganisha sehemu ili kufikia kibonyezo kwa jina ch1 (muunganisho yenyewe umeundwa katika usanidi)
tuma ombi kwa clickhouse
ikiwa kuna kosa, tunaonyesha ujumbe kwenye logi na kutoka
linganisha matokeo ya hoja na ya mara kwa mara (katika mfano wa moja kwa moja, tunaweza kupata thamani hii, kwa mfano, kutoka kwa hifadhidata ya Postgres)
wezesha au lemaza arifa kwa kutumia kitambulisho rps-min-limit
utapokea arifa ikiwa hali ya tahadhari imebadilika
Mfano huo ni rahisi sana na unaeleweka. Walakini, kwa kweli, katika maisha halisi maandishi yanaweza kuwa marefu na magumu. Ni rahisi kuchanganyikiwa na kufanya makosa.
Kwa hivyo, hamu ya kimantiki imekua - kuweza kuandika majaribio kwa maandishi yako. Na katika toleo la v0.4.0 hii ilionekana.
Maandishi ya majaribio
Mtihani wa mfano wa hati yetu kutoka kwa mfano hapo juu:
-- @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')
Hatua:
onyesha jina la hati ambayo mtihani umeandikwa
jina la jaribio (kwa kumbukumbu)
unganisha moduli ya majaribio
tunasema ni matokeo gani yanapaswa kurejeshwa kwa ombi maalum kwa kubofya ch1
tunaangalia kuwa tahadhari (kosa) rps-min-limit na ujumbe ulioainishwa iliitwa
angalia kuwa arifu ya kikomo cha rps-min haikuzimwa (mafanikio)
Nini kingine Balerter anaweza kufanya?
Nitajaribu kugusa juu ya muhimu zaidi, kwa maoni yangu, ujuzi wa Balerter. Unaweza kuona kila kitu kwa undani kwenye wavuti rasmi https://balerter.com
kupokea data kutoka
clickhouse
postgres
mysql
Prometheus
loki
tuma arifa kwa vituo
slack
telegram
syslog
arifa (arifa za UI kwenye kompyuta yako)
enamel
fitna
jenga grafu kulingana na data yako, pakia picha kwenye hifadhi inayolingana ya S3 na uiambatanishe kwa arifa (Mfano na picha)
hukuruhusu kubadilishana data kati ya hati - Hifadhi ya Ufunguo/Thamani ya kimataifa
andika maktaba zako mwenyewe katika Lua na uzitumie katika hati (kwa msingi, maktaba za lua hutolewa kwa kufanya kazi na json, csv)
tuma maombi ya HTTP kutoka kwa hati zako (na upokee majibu, bila shaka)
hutoa API (bado haifanyi kazi kama tungependa)
husafirisha vipimo katika umbizo la Prometheus
Nini kingine ungependa kuweza kufanya?
Tayari ni wazi kuwa watumiaji na tunataka uwezo wa kudhibiti uzinduzi wa hati kwa kutumia syntax cron. Hii itafanywa kabla ya toleo la v1.0.0
Ningependa kuunga mkono vyanzo zaidi vya data na njia za uwasilishaji wa arifa. Kwa mfano, mtu hakika atakosa MongoDB. Utafutaji wa Elastic kwa baadhi. Tuma SMS na/au piga simu kwa simu yako ya mkononi. Tunataka kuwa na uwezo wa kupokea maandishi sio tu kutoka kwa faili, lakini pia, kwa mfano, kutoka kwa hifadhidata. Mwishowe, tunataka tovuti ifaayo zaidi kwa watumiaji na hati bora zaidi za mradi.
Mtu huwa anakosa kitu) Hapa tunategemea ombi la jumuiya ili kuweka vipaumbele kwa usahihi. Na kusaidia jamii kutambua kila kitu
Kwa kumalizia
Tunatumia Balerter Nimekuwa nayo kwa muda mrefu sasa. Maandishi mengi hulinda amani yetu ya akili. Natumaini kazi hii itakuwa na manufaa kwa mtu mwingine.