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.

Karê hêsan bi hişyariyên tevlihev re. An jî dîroka afirandina Balerter

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.

Û bi Pirsgirêk û PR xwe bi xêr hatî.

Source: www.habr.com

Add a comment