Татаал эскертүүлөр менен оңой иштөө. Же Балертердин жаралуу тарыхы

Татаал эскертүүлөр менен оңой иштөө. Же Балертердин жаралуу тарыхы

Ар бир адам эскертүүлөрдү жакшы көрөт.

Албетте, графиктерди карап отуруп, аномалияларды издегенден көрө, бир нерсе болгондо (же оңдолуп калганда) кабардар болуу алда канча жакшы.

Жана бул үчүн көптөгөн куралдар түзүлгөн. Prometheus экосистемасынан Alertmanager жана VictoriaMetrics продуктулар тобунан vmalert. Grafanaдагы Zabbix эскертмелери жана эскертүүлөрү. Bash жана Telegram ботторунда өз алдынча жазылган скрипттер, алар мезгил-мезгили менен кандайдыр бир URL даректерин чыгарып, бир нерсе туура эмес болсо айтып беришет. Баарынан көп.

Биз, биздин компанияда, ошондой эле татаал, же, тагыраак айтканда, татаал, курама эскертүүлөрдү түзүү мүмкүн эмес болуп калганга чейин ар кандай чечимдерди колдондук. Биз эмнени кааладык жана эмнени бүтүрдүк? TLDR: Ачык булак долбоору ушундайча пайда болду Балертер

Бир топ убакыт бою биз Grafana конфигурацияланган эскертүүлөр менен жакшы жашадык. Ооба, бул эң жакшы жол эмес. Ар дайым Alertmanager сыяктуу кээ бир адистештирилген чечимдерди колдонуу сунушталат. Ошондой эле биз бир нече жолу көчүп кетүүнү көздөгөнбүз. Анан акырындык менен биз дагы көптү кааладык.

Белгилүү бир диаграмма XX%га төмөндөп/көбөйүп, мурунку M саатка салыштырганда ал жерде N мүнөт болгондо айтыңызчы? Сиз муну Grafana же Alertmanager менен ишке ашырууга аракет кылсаңыз болот окшойт, бирок бул оңой эмес. (Же мүмкүн эместир, азыр айтпайм)

Ар кандай булактардан алынган маалыматтардын негизинде эскертүү чечими кабыл алынышы керек болгондо, иштер ого бетер татаалдашат. Тирүү мисал:

Биз эки Clickhouse маалымат базасынан маалыматтарды текшеребиз, андан кийин Postgres айрым маалыматтары менен салыштырып, эскертүү жөнүндө чечим кабыл алабыз. Сигнал же жокко чыгаруу

Биздин чечимибиз жөнүндө ойлонуу үчүн бизде көптөгөн окшош каалоолор топтолгон. Анан биз али түзүлө элек бул кызматтын талаптарынын/мүмкүнчүлүктөрүнүн биринчи тизмесин түзүүгө аракет кылдык.

  • ар кандай маалымат булактарына кирүү. Мисалы, Prometheus, Clickhouse, Postgres

  • ар кандай каналдарга эскертүүлөрдү жөнөтүү - телеграмма, боштук ж.б.

  • ой жүгүртүү процессинде, мен декларативдик сыпаттаманы эмес, сценарий жазуу жөндөмүн каалаарым айкын болду.

  • график боюнча скрипттерди иштетүү

  • кызматты кайра баштабастан скрипттерди оңой жаңыртуу

  • кызматты баштапкы коддордон калыбына келтирбестен кандайдыр бир жол менен функцияны кеңейтүү мүмкүнчүлүгү

Бул тизме болжолдуу жана өтө так эмес. Кээ бир пункттар өзгөрдү, кээ бирлери өлдү. Баары кадимкидей.

Чынында, Балертердин тарыхы ушундай башталган.

Татаал эскертүүлөр менен оңой иштөө. Же Балертердин жаралуу тарыхы

Мен аягында эмне болгонун жана ал кандайча иштээрин кыскача сүрөттөп берүүгө аракет кылам. (Ооба, албетте, бул аягы эмес. Продукцияны өнүктүрүү боюнча көптөгөн пландар бар. Мен бүгүн эле токтоп калам)

Бул кандай иштейт?

Сиз Луада скрипт жазасыз, анда сурамдарды ачык жөнөтөсүз (Prometheus, Clickhouse ж.б.). Сиз жооп аласыз жана кандайдыр бир жол менен аларды иштеп чыгып, салыштырыңыз. Андан кийин кандайдыр бир сигналды күйгүзүү/өчүрүү. Балертер өзү сиз конфигурациялаган каналдарга эскертме жөнөтөт (Электрондук почта, телеграмма, боштук ж.б.). Скрипт белгиленген аралыктарда аткарылат. Жана... жалпы, ушунча)

Бул мисал менен көрсөтүү жакшы:

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

Бул жерде эмне болуп жатат:

  • биз бул скрипт ар бир 10 секунда аткарылышы керек экенин көрсөтүп турат

  • скрипттин атын көрсөтүү (API үчүн, журналдарда көрсөтүү, тесттерде колдонуу үчүн)

  • журналдарды чыгаруу үчүн модулду туташтыруу

  • аты менен Clickhouse кирүү үчүн модулду туташтыруу ch1 (байланыш өзү конфигурацияда конфигурацияланган)

  • Clickhouse үчүн сурам жөнөтүү

  • ката болгон учурда, биз журналда билдирүүнү көрсөтөбүз жана чыгабыз

  • суроонун натыйжасын туруктуу менен салыштыруу (жандуу мисалда биз бул маанини алсак болот, мисалы, Postgres маалымат базасынан)

  • ID менен сигналды иштетүү же өчүрүү rps-min-limit

  • эскертүү статусу өзгөргөн болсо, сиз эскертме аласыз

Мисал абдан жөнөкөй жана түшүнүктүү. Бирок, албетте, реалдуу жашоодо сценарийлер кыйла узун жана татаал болушу мүмкүн. Чаташып, ката кетирүү оңой.

Ошондуктан, логикалык каалоо жетилди - скрипттериңиз үчүн тест жаза алат. Ал эми v0.4.0 версиясында бул пайда болгон.

Скрипттерди текшерүү

Жогорудагы мисалдан биздин скрипт үчүн тесттин үлгүсү:

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

Кадамдар:

  • тест жазылган сценарийдин атын көрсөтүңүз

  • тесттин аталышы (журналдар үчүн)

  • сыноо модулун туташтыруу

  • биз кликканага белгилүү бир суроо-талап үчүн кандай натыйжа кайтарылышы керектигин айтабыз ch1

  • биз эскертүү (ката) rps-min-лимити көрсөтүлгөн билдирүү менен чакырылганын текшеребиз

  • rps-min-лимитин эскертүүсү өчүрүлгөн эмес экенин текшерүү (ийгилик)

Балертер дагы эмне кыла алат?

Мен эң негизги, менин оюмча, балертердин көндүмдөрүн айтууга аракет кылам. Сиз расмий сайтында майда-чүйдөсүнө чейин баарын көрө аласыз https://balerter.com

  • маалымат алуу

    • Clickhouse

    • postgres

    • MySQL

    • Prometheus

    • локи

  • каналдарга эскертмелерди жөнөтүү

    • жалкоолонуп

    • телеграмма

    • syslog

    • кабарлоо (компьютериңиздеги UI эскертмелери)

    • электрондук почта

    • келишпестиктерге

  • маалыматыңыздын негизинде графиктерди түзүңүз, сүрөттү S3 шайкеш сактагычына жүктөңүз жана аны эскертмелерге тиркиңиз (Сүрөттөр менен мисал)

  • скрипттердин ортосунда маалымат алмашууга мүмкүндүк берет - глобалдык ачкыч/нарк сактагыч

  • Луада өз китепканаларыңызды жазыңыз жана аларды скрипттерде колдонуңуз (демейки боюнча, lua китепканалары json, csv менен иштөө үчүн берилет)

  • скрипттериңизден HTTP сурамдарын жөнөтүңүз (жана, албетте, жоопторду алыңыз)

  • API менен камсыз кылат (азырынча биз каалагандай иштей элек)

  • Prometheus форматында көрсөткүчтөрдү экспорттойт

Дагы эмне кыла алгыңыз келет?

Колдонуучулар жана биз синтаксистин жардамы менен скрипттерди ишке киргизүүнү көзөмөлдөө мүмкүнчүлүгүн каалайбыз Мурунку. Бул v1.0.0 версиясына чейин аткарылат

Мен көбүрөөк маалымат булактарын жана билдирүүлөрдү жеткирүү каналдарын колдогум келет. Мисалы, кимдир бирөө MongoDBди сөзсүз сагынат. Кээ бирлери үчүн ийкемдүү издөө. Уюлдук телефонуңузга SMS жөнөтүңүз жана/же чалуу жасаңыз. Биз скрипттерди файлдардан гана эмес, мисалы, маалымат базасынан да ала алгыбыз келет. Акыр-аягы, биз колдонуучуга ыңгайлуу веб-сайтты жана долбоор үчүн жакшыраак документтерди каалайбыз.

Кимдир бирөө дайыма бир нерсе жетишпейт) Бул жерде биз артыкчылыктарды туура коюу үчүн коомчулуктун өтүнүчүнө таянабыз. Ал эми бардыгын ишке ашыруу үчүн коомчулуктун жардамына

Жыйынтык

биз колдонгон Балертер Мен аны бир топ убакыттан бери алып келем. Ондогон сценарийлер биздин бейпилдигибизди коргойт. Бул иш башка бирөө үчүн пайдалуу болот деп ишенем.

Маселе жана PR менен кош келиңиз.

Source: www.habr.com

Комментарий кошуу