Күрделі ескертулермен оңай жұмыс. Немесе Балертердің құрылу тарихы

Күрделі ескертулермен оңай жұмыс. Немесе Балертердің құрылу тарихы

Барлығы дабылдарды жақсы көреді.

Әрине, графиктерге қарап, ауытқуларды іздегенше, бірдеңе болған (немесе түзетілген) туралы хабардар ету әлдеқайда жақсы.

Және бұл үшін көптеген құралдар жасалды. Prometheus экожүйесінен Alertmanager және VictoriaMetrics өнімдер тобынан vmalert. Grafana-дағы Zabbix хабарландырулары мен ескертулері. URL мекенжайын мезгіл-мезгіл шығарып тұратын және бірдеңе дұрыс емес екенін көрсететін bash және Telegram боттарында өздігінен жазылған сценарийлер. Бәрінен де көп.

Біз өз компаниямызда күрделілікке, дәлірек айтсақ, күрделі, құрама ескертулерді жасау мүмкін еместігіне тап болғанша әртүрлі шешімдерді қолдандық. Біздің қалағанымыз және орындағанымыз кесілгеннен төмен. TLDR: Ашық бастапқы жоба осылай пайда болды Балертер

Ұзақ уақыт бойы біз Графанада конфигурацияланған ескертулермен жақсы өмір сүрдік. Иә, бұл ең жақсы әдіс емес. Әрқашан Alertmanager сияқты кейбір арнайы шешімдерді пайдалану ұсынылады. Сондай-ақ біз бірнеше рет көшуге ұмтылдық. Содан кейін біз бірте-бірте көп нәрсені қаладық.

Белгілі бір диаграмманың қашан ХХ% төмендегенін/өскенін және алдыңғы 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 үшін, журналдарда көрсету үшін, сынақтарда пайдалану үшін)

  • журналдарды шығаруға арналған модульді қосыңыз

  • аты бар кликхаусқа кіру үшін модульді қосыңыз 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

  • деректерін алады

    • кликхаус

    • postgres

    • MySQL

    • прометея

    • loki

  • арналарға хабарландырулар жіберу

    • босаңсу

    • жеделхат

    • syslog

    • хабарлау (компьютердегі UI хабарландырулары)

    • электрондық пошта

    • келіспеушілік

  • деректеріңізге негізделген графиктер жасаңыз, суретті S3 үйлесімді жадына жүктеп салыңыз және оны хабарландыруларға тіркеңіз (Суреттермен мысал)

  • сценарийлер арасында деректер алмасуға мүмкіндік береді - жаһандық кілт/мәнді сақтау

  • Луада өз кітапханаларыңызды жазыңыз және оларды сценарийлерде пайдаланыңыз (әдепкі бойынша lua кітапханалары json, csv-мен жұмыс істеу үшін беріледі)

  • сценарийлеріңізден HTTP сұрауларын жіберу (әрине жауаптарды алу)

  • API ұсынады (әлі біз қалағандай функционалды емес)

  • метриканы Prometheus пішімінде экспорттайды

Сіз тағы не істей алғыңыз келеді?

Пайдаланушылар мен біз синтаксисті пайдаланып сценарийлерді іске қосуды басқару мүмкіндігін қалайтынымыз анық Cron. Бұл v1.0.0 нұсқасына дейін орындалады

Мен көбірек деректер көздеріне және хабарландыруларды жеткізу арналарына қолдау көрсеткім келеді. Мысалы, біреу MongoDB-ді міндетті түрде сағынады. Кейбіреулер үшін серпімді іздеу. Ұялы телефоныңызға SMS жіберіңіз және/немесе қоңырау шалыңыз. Біз сценарийлерді тек файлдардан ғана емес, сонымен қатар, мысалы, дерекқордан алу мүмкіндігін алғымыз келеді. Ақыр соңында, біз пайдаланушыға ыңғайлы веб-сайт пен жоба үшін жақсырақ құжаттаманы қалаймыз.

Біреуге әрқашан бірдеңе жетіспейді) Мұнда біз басымдықтарды дұрыс орнату үшін қауымдастықтың сұрауына сүйенеміз. Және барлығын жүзеге асыру үшін қоғамдастықтың көмегіне

Қорытындылай келе

Біз қолданамыз Балертер Менде біраз уақыт болды. Ондаған сценарий біздің тыныштығымызды сақтайды. Бұл жұмыс басқа біреуге пайдалы болады деп үміттенемін.

Мәселеңізбен және PRыңызбен қош келдіңіз.

Ақпарат көзі: www.habr.com

пікір қалдыру