Murakkab ogohlantirishlar bilan oson ishlash. Yoki Balerter tarixi

Murakkab ogohlantirishlar bilan oson ishlash. Yoki Balerter tarixi

Hamma ogohlantirishlarni yaxshi ko'radi.

Albatta, grafiklarga qarab o‘tirib, anomaliyalarni izlashdan ko‘ra, biror narsa sodir bo‘lganidan (yoki tuzatilganidan) xabardor qilingan ma’qul.

Va buning uchun ko'plab vositalar yaratilgan. Prometey ekotizimidan Alertmanager va VictoriaMetrics mahsulotlar guruhidan vmalert. Grafana'da Zabbix bildirishnomalari va ogohlantirishlari. Bash va Telegram botlarida o'z-o'zidan yozilgan skriptlar vaqti-vaqti bilan URL manzillarini ochadi va biror narsa noto'g'ri ekanligini sizga aytadi. Hamma narsadan ko'p.

Biz, bizning kompaniyamizda, murakkablik, aniqrog'i, murakkab, kompozit ogohlantirishlarni yaratishning iloji yo'qligiga duch kelmagunimizcha, turli xil echimlardan foydalandik. Biz xohlagan va biz nima qilishni yakunladik, kesmaning ostida. TLDR: Ochiq kodli loyiha shunday paydo bo'ldi Balerter

Uzoq vaqt davomida biz Grafana-da sozlangan ogohlantirishlar bilan yaxshi yashadik. Ha, bu eng yaxshi yo'l emas. Har doim Alertmanager kabi maxsus echimlardan foydalanish tavsiya etiladi. Va biz bir necha marta harakatlanishga qaradik. Va keyin asta-sekin biz ko'proq narsani xohladik.

Ayting-chi, ma'lum bir jadval qachon XX% ga tushib ketgan/ko'paygan va oldingi M soatlik davrga nisbatan u erda N daqiqa bo'lgan? Buni Grafana yoki Alertmanager bilan amalga oshirishga urinib ko'rishingiz mumkin, ammo bu unchalik oson emas. (Yoki bu mumkin emas, hozir aytmayman)

Turli manbalardan olingan ma'lumotlar asosida ogohlantirish qarori qabul qilinishi kerak bo'lganda, ishlar yanada murakkablashadi. Jonli misol:

Biz ikkita Clickhouse ma'lumotlar bazasidan ma'lumotlarni tekshiramiz, keyin uni Postgres ma'lumotlari bilan solishtiramiz va ogohlantirish haqida qaror qabul qilamiz. Signal yoki bekor qiling

Qarorimiz haqida o'ylash uchun bizda juda ko'p shunga o'xshash istaklar to'plangan. Va keyin biz ushbu xizmatning hali yaratilmagan talablari/imkoniyatlarining birinchi ro'yxatini tuzishga harakat qildik.

  • turli ma'lumotlar manbalariga kirish. Masalan, Prometey, Clickhouse, Postgres

  • turli kanallarga ogohlantirishlar yuborish - telegram, slack va boshqalar.

  • fikrlash jarayonida men deklarativ tavsifni emas, balki skript yozish qobiliyatini xohlayotganim ayon bo'ldi.

  • jadval bo'yicha skriptlarni ishga tushirish

  • xizmatni qayta ishga tushirmasdan skriptlarni oson yangilash

  • xizmatni manba kodlaridan qayta qurmasdan qandaydir tarzda funksionallikni kengaytirish qobiliyati

Ushbu ro'yxat taxminiy va juda aniq emas. Ba'zi nuqtalar o'zgardi, ba'zilari o'ldi. Hammasi odatdagidek.

Aslida, Balerterning tarixi shunday boshlangan.

Murakkab ogohlantirishlar bilan oson ishlash. Yoki Balerter tarixi

Men oxirida nima bo'lganini va u qanday ishlashini qisqacha tasvirlashga harakat qilaman. (Ha, albatta, bu oxiri emas. Mahsulotni ishlab chiqish bo'yicha ko'plab rejalar mavjud. Men bugun to'xtab qolaman)

U qanday ishlaydi?

Siz Luada skript yozasiz, u erda siz aniq so'rovlar yuborasiz (Prometey, Clickhouse va boshqalar). Siz javob olasiz va qandaydir tarzda ularni qayta ishlaysiz va taqqoslaysiz. Keyin qandaydir ogohlantirishni yoqing / o'chiring. Balerterning o'zi siz sozlagan kanallarga bildirishnoma yuboradi (elektron pochta, telegram, slack va boshqalar). Skript belgilangan vaqt oralig'ida bajariladi. Va... umuman olganda, hammasi shu)

Buni misol bilan ko'rsatish yaxshidir:

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

Bu erda nima bo'lyapti:

  • biz ushbu skript har 10 soniyada bajarilishi kerakligini bildiramiz

  • skript nomini ko'rsating (API uchun, jurnallarda ko'rsatish, testlarda foydalanish uchun)

  • jurnallarni chiqarish uchun modulni ulang

  • nomi bilan klikxonaga kirish uchun modulni ulang ch1 (ulanishning o'zi konfiguratsiyada sozlangan)

  • clickhouse-ga so'rov yuboring

  • xato bo'lsa, jurnalda xabarni ko'rsatamiz va chiqamiz

  • so'rov natijasini doimiy bilan solishtiring (jonli misolda biz bu qiymatni, masalan, Postgres ma'lumotlar bazasidan olishimiz mumkin)

  • ID bilan ogohlantirishni yoqish yoki o'chirish rps-min-limit

  • ogohlantirish holati o'zgargan bo'lsa, siz xabarnoma olasiz

Misol juda oddiy va tushunarli. Biroq, albatta, real hayotda skriptlar ancha uzun va murakkab bo'lishi mumkin. Adashib qolish va xato qilish oson.

Shu sababli, mantiqiy istak paydo bo'ldi - skriptlaringiz uchun testlar yozish imkoniyatiga ega bo'lish. Va v0.4.0 versiyasida bu paydo bo'ldi.

Sinov skriptlari

Yuqoridagi misoldan skriptimiz uchun namuna testi:

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

Qadamlarda:

  • test yoziladigan skript nomini ko'rsating

  • test nomi (jurnallar uchun)

  • sinov modulini ulang

  • biz klikxonaga ma'lum bir so'rov uchun qanday natijani qaytarish kerakligini aytamiz ch1

  • biz ko'rsatilgan xabar bilan ogohlantirish (xato) rps-min-limiti chaqirilganligini tekshiramiz

  • rps-min-limiti ogohlantirishi o'chirilganligini tekshiring (muvaffaqiyatli)

Balerter yana nima qila oladi?

Men eng muhim, mening fikrimcha, Balerter mahoratiga tegishga harakat qilaman. Rasmiy veb-saytda hamma narsani batafsil ko'rishingiz mumkin https://balerter.com

  • dan ma'lumotlarni olish

    • klik uyi

    • postgres

    • mysql

    • prometey

    • loki

  • kanallarga bildirishnomalar yuborish

    • bo'shashmaslik

    • telegramma

    • syslog

    • bildirish (kompyuteringizda UI bildirishnomalari)

    • elektron pochta

    • kelishmovchilik

  • maʼlumotlaringiz asosida grafiklar yarating, tasvirni S3-ga mos xotiraga yuklang va bildirishnomalarga biriktiring (Rasmlar bilan misol)

  • skriptlar o'rtasida ma'lumot almashish imkonini beradi - global Key/Value saqlash

  • Lua-da o'z kutubxonalaringizni yozing va ularni skriptlarda ishlating (sukut bo'yicha, lua kutubxonalari json, csv bilan ishlash uchun taqdim etiladi)

  • skriptlaringizdan HTTP so'rovlarini yuboring (va, albatta, javoblarni oling)

  • API taqdim etadi (hali biz xohlagan darajada funktsional emas)

  • ko'rsatkichlarni Prometey formatida eksport qiladi

Yana nimaga qodir bo'lishni xohlaysiz?

Foydalanuvchilar va biz sintaksis yordamida skriptlarni ishga tushirishni boshqarish qobiliyatini xohlashimiz allaqachon aniq cron. Bu v1.0.0 versiyasidan oldin amalga oshiriladi

Men koʻproq maʼlumot manbalari va bildirishnomalarni yetkazib berish kanallarini qoʻllab-quvvatlamoqchiman. Misol uchun, kimdir MongoDB-ni albatta sog'inadi. Ba'zilar uchun elastik qidiruv. Mobil telefoningizga SMS yuboring va/yoki qo'ng'iroq qiling. Biz skriptlarni nafaqat fayllardan, balki, masalan, ma'lumotlar bazasidan ham olish imkoniyatiga ega bo'lishni xohlaymiz. Oxir-oqibat, biz foydalanuvchilarga qulayroq veb-sayt va loyiha uchun yaxshiroq hujjatlarni xohlaymiz.

Kimdir har doim nimadir etishmaydi) Bu erda biz ustuvorliklarni to'g'ri belgilash uchun hamjamiyat so'roviga tayanamiz. Va hamma narsani amalga oshirish uchun jamiyatning yordamiga

Xulosa

Biz foydalanamiz Balerter Menda anchadan beri bor. O'nlab skriptlar bizning xotirjamligimizni himoya qiladi. Umid qilamanki, bu ish boshqa birovga foydali bo'ladi.

Muammo va PR bilan xush kelibsiz.

Manba: www.habr.com

a Izoh qo'shish