Нарийн төвөгтэй дохиололтой ажиллахад хялбар. Эсвэл Балертерийг бүтээсэн түүх

Нарийн төвөгтэй дохиололтой ажиллахад хялбар. Эсвэл Балертерийг бүтээсэн түүх

Хүн бүр сэрэмжлүүлэгт дуртай.

Мэдээжийн хэрэг, ямар нэг зүйл тохиолдсон (эсвэл зассан) үед мэдэгдэх нь график харж, гажиг хайхаас хамаагүй дээр.

Үүний тулд олон хэрэгслийг бий болгосон. Prometheus экосистемийн Alertmanager болон VictoriaMetrics бүтээгдэхүүний бүлгийн vmalert. Grafana дахь Zabbix-ийн мэдэгдэл, сэрэмжлүүлэг. Өөрөө bash болон Telegram роботууд дээр бичсэн скриптүүд нь үе үе URL-г татаж, ямар нэг зүйл буруу байвал танд хэлдэг. Бүх зүйл маш их.

Манай компанид бид нарийн төвөгтэй, эсвэл бүр нарийн төвөгтэй, нийлмэл сэрэмжлүүлэг үүсгэх боломжгүй байдалд орох хүртэл өөр өөр шийдлүүдийг ашигласан. Бидний хүсч байсан зүйл, хийж дуусгасан зүйл нь захын доор байна. TLDR: Нээлттэй эхийн төсөл ингэж гарч ирсэн Балертер

Удаан хугацааны турш бид Графана-д тохируулсан сэрэмжлүүлэгтэй сайхан амьдарч байсан. Тийм ээ, энэ бол хамгийн сайн арга биш юм. Alertmanager гэх мэт тусгай шийдлүүдийг ашиглахыг үргэлж зөвлөж байна. Мөн бид нэгээс олон удаа нүүх гэж үзсэн. Тэгээд бид бага багаар илүү ихийг хүсч байсан.

Өмнөх М цагтай харьцуулахад тодорхой диаграм XX%-иар буурч/өсөж, 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')

Алхам алхамаар:

  • тест бичсэн скриптийн нэрийг зааж өгнө

  • туршилтын нэр (логуудын хувьд)

  • туршилтын модулийг холбоно уу

  • clickhouse-д тодорхой хүсэлт гаргавал ямар үр дүнг буцаах ёстойг бид хэлж байна ch1

  • Бид заасан мессеж бүхий дохиолол (алдаа) rps-min-хязгаар дуудагдсан эсэхийг шалгана

  • rps-min-limit дохио идэвхгүй болоогүй эсэхийг шалгана уу (амжилттай)

Балертер өөр юу хийж чадах вэ?

Би хамгийн чухал, миний бодлоор Балертерийн ур чадварыг хөндөхийг хичээх болно. Та албан ёсны вэбсайтаас бүх зүйлийг нарийвчлан үзэх боломжтой https://balerter.com

  • -аас өгөгдөл хүлээн авах

    • clickhouse

    • Шуудангийн материал

    • MySQL

    • prometheus

    • loki

  • сувгууд руу мэдэгдэл илгээх

    • сул байна

    • цахилгаан мэдээ

    • syslog

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

    • И-мэйл

    • зөрчилдөөн

  • Өгөгдөл дээрээ үндэслэн график үүсгэж, зургийг S3-тэй нийцтэй санах ойд байршуулж, мэдэгдэлд хавсаргана уу (Зурагтай жишээ)

  • скриптүүдийн хооронд өгөгдөл солилцох боломжийг танд олгоно - global Key/Value storage

  • Lua хэл дээр өөрийн номын санг бичиж, тэдгээрийг скрипт дээр ашиглах (анхдагчаар, lua номын санг json, csv-тэй ажиллахад нийлүүлдэг)

  • скриптээсээ HTTP хүсэлт илгээх (мэдээж хариултыг хүлээн авах)

  • API-г өгдөг (бидний хүссэн шиг ажиллахгүй байна)

  • хэмжигдэхүүнийг Prometheus форматаар экспортлодог

Та өөр юу хийхийг хүсч байна вэ?

Хэрэглэгчид болон бид синтакс ашиглан скриптийг эхлүүлэхийг хянах чадварыг хүсч байгаа нь тодорхой болсон cron. Үүнийг v1.0.0 хувилбараас өмнө хийх болно

Би илүү олон мэдээллийн эх сурвалж болон мэдэгдлийн сувгийг дэмжихийг хүсч байна. Жишээлбэл, хэн нэгэн MongoDB-г санах нь гарцаагүй. Заримыг нь уян харимхай хайх. SMS илгээх ба/эсвэл гар утсандаа дуудлага хийх. Бид скриптийг зөвхөн файлаас төдийгүй, жишээлбэл, мэдээллийн сангаас хүлээн авах боломжтой байхыг хүсч байна. Эцэст нь бид илүү хэрэглэгчдэд ээлтэй вэб сайт, төслийн илүү сайн баримт бичгийг хүсч байна.

Хэн нэгэнд үргэлж ямар нэг зүйл дутагдаж байдаг) Энд бид тэргүүлэх чиглэлээ зөв тогтоохын тулд олон нийтийн хүсэлтийг харгалзан үздэг. Мөн бүх зүйлийг ухамсарлахын тулд хамт олны тусламж

Эцэст нь хэлэхэд

Бидний хэрэглэдэг Балертер Би үүнийг нэлээн удаж байна. Олон арван скрипт бидний сэтгэлийн амар амгаланг хамгаалдаг. Энэ ажил хэн нэгэнд хэрэг болно гэж найдаж байна.

Асуудал болон PR-аа тавтай морилно уу.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх