Aiki mai sauƙi tare da faɗakarwa mai rikitarwa. Ko tarihin halittar Balerter

Aiki mai sauƙi tare da faɗakarwa mai rikitarwa. Ko tarihin halittar Balerter

Kowa na son faɗakarwa.

Tabbas, yana da kyau a sanar da kai lokacin da wani abu ya faru (ko aka gyara) da a zauna a duba jadawali a nemi abubuwan da ba su dace ba.

Kuma an ƙirƙiri kayan aiki da yawa don wannan. Alertmanager daga Prometheus muhallin halittu da vmalert daga VictoriaMetrics samfurin kungiyar. Zabbix sanarwar da faɗakarwa a cikin Grafana. Rubutun da aka rubuta da kansu a cikin bash da Bots na Telegram waɗanda lokaci-lokaci suna jan wasu URL kuma su gaya muku idan wani abu ba daidai ba. Yawancin komai.

Mu, a cikin kamfaninmu, kuma mun yi amfani da mafita daban-daban har sai mun shiga cikin sarƙaƙƙiya, ko, maimakon haka, rashin yiwuwar ƙirƙirar faɗakarwa mai rikitarwa. Abin da muke so kuma abin da muka ƙare yana yi a ƙasa da yanke. TLDR: Wannan shine yadda aikin buɗe tushen ya bayyana Balerter

Na dogon lokaci muna rayuwa da kyau tare da saita faɗakarwa a cikin Grafana. Ee, wannan ba ita ce hanya mafi kyau ba. Ana ba da shawarar koyaushe a yi amfani da wasu na musamman mafita, kamar Alertmanager. Kuma mun kuma duba zuwa motsi fiye da sau ɗaya. Sannan, kadan kadan, muna son ƙari.

Ka ce lokacin da wani ginshiƙi ya faɗi / ya ƙaru da XX% kuma ya kasance a can na mintuna N idan aka kwatanta da lokacin da ya gabata na sa'o'i M? Da alama kuna iya ƙoƙarin aiwatar da wannan tare da Grafana ko Alertmanager, amma ba abu ne mai sauƙi ba. (Ko watakila ba zai yiwu ba, ba zan ce yanzu ba)

Abubuwa suna ƙara rikitarwa lokacin da dole ne a yanke shawarar faɗakarwa bisa bayanai daga tushe daban-daban. Misali kai tsaye:

Muna duba bayanan daga maballin Clickhouse guda biyu, sannan mu kwatanta shi da wasu bayanai daga Postgres, sannan mu yanke shawara kan faɗakarwa. Sigina ko soke

Mun tara abubuwa da yawa iri ɗaya don mu yi tunani game da shawararmu. Sannan mun yi ƙoƙarin tattara jerin buƙatu na farko na wannan sabis ɗin, wanda har yanzu ba a ƙirƙira shi ba.

  • samun dama ga kafofin bayanai daban-daban. Misali, Prometheus, Clickhouse, Postgres

  • aika faɗakarwa zuwa tashoshi daban-daban - telegram, slack, da sauransu.

  • a cikin aiwatar da tunani, ya bayyana a fili cewa ba na son bayanin bayyanawa, amma ikon rubuta rubutun.

  • gudanar da rubutun akan jadawali

  • sauƙin sabunta rubutun ba tare da sake kunna sabis ɗin ba

  • ikon ko ta yaya fadada ayyuka ba tare da sake gina sabis daga lambobin tushe ba

Wannan jeri yana da ƙima kuma wataƙila ba daidai ba ne. Wasu maki sun canza, wasu sun mutu. Komai kamar kullum ne.

A gaskiya, wannan shine yadda tarihin Balerter ya fara.

Aiki mai sauƙi tare da faɗakarwa mai rikitarwa. Ko tarihin halittar Balerter

Zan yi ƙoƙarin bayyana a taƙaice abin da ya faru a ƙarshe da yadda yake aiki. (Ee, ba shakka, wannan ba ƙarshen ba ne. Akwai tsare-tsare da yawa don haɓaka samfura. Zan tsaya a yau)

Yaya ta yi aiki?

Kuna rubuta rubutun a cikin Lua inda kuka aika buƙatun a sarari (zuwa Prometheus, Clickhouse, da sauransu). Kuna karɓar amsoshi kuma kuna aiwatar da ko ta yaya kuma kuna kwatanta su. Sannan kunna/kashe wani irin faɗakarwa. Balerter da kansa zai aika sanarwa zuwa tashoshin da kuka tsara (Imel, telegram, slack, da sauransu). Ana aiwatar da rubutun a ƙayyadadden tazara. Kuma ... gaba ɗaya, shi ke nan)

Zai fi kyau a nuna da misali:

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

Me ke faruwa a nan:

  • muna nuna cewa yakamata a aiwatar da wannan rubutun kowane sakan 10

  • nuna sunan rubutun (na API, don nunawa a cikin rajistan ayyukan, don amfani a gwaje-gwaje)

  • haɗa module don fitarwa rajistan ayyukan

  • haɗa wani tsari don samun damar gidan dannawa tare da sunan ch1 (An saita haɗin kanta a cikin config)

  • aika buƙatun zuwa gidan dannawa

  • idan akwai kuskure, muna nuna saƙo a cikin log ɗin da fita

  • kwatanta sakamakon tambayar da akai-akai (a cikin misali mai rai, za mu iya samun wannan ƙimar, misali, daga bayanan Postgres)

  • kunna ko kashe faɗakarwa tare da ID rps-min-limit

  • za ku sami sanarwa idan yanayin faɗakarwa ya canza

Misalin abu ne mai sauki da fahimta. Koyaya, ba shakka, a cikin rubutun rayuwa na gaske na iya zama tsayi sosai kuma masu rikitarwa. Yana da sauƙi a ruɗe da yin kuskure.

Don haka, sha'awar ma'ana ta girma - don samun damar rubuta gwaje-gwaje don rubutun ku. Kuma a cikin sigar v0.4.0 wannan ya bayyana.

Rubutun gwaji

Misalin gwajin rubutun mu daga misalin da ke sama:

-- @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')

Mataki-mataki:

  • nuna sunan rubutun da aka rubuta jarabawar

  • Sunan gwaji (na rajistan ayyukan)

  • haɗa tsarin gwaji

  • mun ce wane sakamako ya kamata a dawo don takamaiman buƙatun zuwa gidan dannawa ch1

  • mun duba cewa an kira faɗakarwar (kuskure) rps-min-limit tare da takamaiman saƙon

  • duba cewa faɗakarwar rps-min-limit ba ta kashe ba (nasara)

Me kuma Balerter zai iya yi?

Zan yi ƙoƙari in taɓa mafi mahimmanci, a ganina, ƙwarewar Balerter. Kuna iya ganin komai daki-daki akan gidan yanar gizon hukuma https://balerter.com

  • karbi bayanai daga

    • danna gidan

    • matsayi

    • MySQL

    • karinsani

    • loki

  • aika sanarwa zuwa tashoshi

    • slack

    • telegram

    • syslog

    • sanarwa (sanarwar UI akan kwamfutarka)

    • email

    • sabani

  • gina jadawalai dangane da bayanan ku, loda hoton zuwa ma'ajin da ke dacewa da S3 kuma haɗa shi zuwa sanarwa (Misali tare da hotuna)

  • yana ba ku damar musayar bayanai tsakanin rubutun - Maɓalli/Ma'ajiyar ƙimar duniya

  • rubuta naku dakunan karatu a cikin Lua kuma yi amfani da su a cikin rubutun (ta tsohuwa, ana ba da ɗakunan karatu na Lua don aiki tare da json, csv)

  • aika buƙatun HTTP daga rubutunku (kuma karɓar martani, ba shakka)

  • yana ba da API (har yanzu bai yi aiki kamar yadda muke so ba)

  • fitarwa awo a cikin tsarin Prometheus

Me kuma kuke so ku iya yi?

Ya riga ya bayyana cewa masu amfani kuma muna son ikon sarrafa ƙaddamar da rubutun ta amfani da haɗin gwiwa cron. Za a yi wannan kafin sigar v1.0.0

Ina so in goyi bayan ƙarin tushen bayanai da tashoshin isar da sanarwa. Misali, babu shakka wani zai rasa MongoDB. Neman Na roba don wasu. Aika SMS da/ko yin kira zuwa wayarka ta hannu. Muna so mu sami damar karɓar rubutun ba kawai daga fayiloli ba, har ma, misali, daga bayanan bayanai. A ƙarshe, muna son ƙarin gidan yanar gizon abokantaka mai amfani da ingantattun takardu don aikin.

Wani yana rasa wani abu koyaushe) Anan muna dogara ga buƙatar al'umma don saita abubuwan da suka fi dacewa daidai. Kuma ga taimakon al'umma don fahimtar komai

A ƙarshe

Muna amfani Balerter Na ɗan jima yanzu. Yawancin rubutun suna kiyaye kwanciyar hankalinmu. Ina fatan wannan aikin zai zama da amfani ga wani.

Kuma maraba da Batun ku da PR.

source: www.habr.com

Add a comment