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.

Sayon nga trabaho nga adunay komplikado nga mga alerto. O ang kasaysayan sa paglalang 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.

Ug welcome sa imong Isyu ug PR.

Source: www.habr.com

Idugang sa usa ka comment