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.

Kazi rahisi na arifa changamano. Au historia ya uumbaji wa Balerter

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.

Na karibu na Toleo lako na PR.

Chanzo: mapenzi.com

Kuongeza maoni