سهولة العمل مع التنبيهات المعقدة. أو القصة وراء Balerter

الجميع يحب التنبيهات.

بالطبع ، من الأفضل أن يتم إخطارك عند حدوث شيء ما (أو إصلاحه) بدلاً من الجلوس للنظر في الرسوم البيانية والبحث عن الانحرافات.

وقد تم إنشاء الكثير من الأدوات لهذا الغرض. Alertmanager من نظام Prometheus البيئي و vmalert من مجموعة منتجات VictoriaMetrics. تنبيهات وتنبيهات Zabbix في Grafana. نصوص مكتوبة ذاتيًا على روبوتات bash و Telegram التي تسحب بعض عناوين URL بشكل دوري وتقول إذا كان هناك خطأ ما. الكثير من كل شيء.

لقد استخدمنا في شركتنا أيضًا حلولًا مختلفة حتى واجهنا التعقيد ، أو بالأحرى استحالة إنشاء تنبيهات معقدة ومركبة. ما أردناه وما فعلناه في نهاية المطاف هو تحت الخفض. TLDR: هكذا ظهر مشروع المصدر المفتوح Balerter

لفترة طويلة ، عشنا جيدًا مع التنبيهات التي تم تكوينها في Grafana. نعم ، هذه ليست أفضل طريقة. يوصى دائمًا باستخدام نوع من الحلول المتخصصة ، مثل Alertmanager. ونظرنا أيضًا في اتجاه المعبر أكثر من مرة. وبعد ذلك ، شيئًا فشيئًا ، أردنا المزيد.

قل عندما انخفض / ارتفع مخطط معين بنسبة XX ٪ وهل هناك N دقيقة مقارنة بالفترة السابقة من M ساعة؟ يبدو أنه يمكنك محاولة تنفيذه باستخدام Grafana أو Alertmanager ، لكن هذا ليس بالأمر السهل. (أو ربما لا ، لن أقول الآن)

, . :

Clickhouse, Postgres, .

, . / , ,

  • . , Prometheus, Clickhouse, Postgres

  • - telegram, slack ..

  • , ,

  • -

, , . - , - . .

, Balerter.

, . (, , . . )

?

Lua, ( Prometheus, Clickhouse .). - . / - . Balerter , (Email, telegram, slack ..). . … - )

:

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

  • -

  • ( , , 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

  • , (error) rps-min-limit

  • , rps-min-limit (success)

Balerter?

, , Balerter. https://balerter.com

    • clickhouse

    • postgres

    • mysql

    • prometheus

    • loki

    • slack

    • telegram

    • syslog

    • notiify (UI )

    • email

    • discord

  • , S3 ( )

  • - Key/Value

  • Lua (- lua- json, csv)

  • HTTP ( , )

  • API ( , )

  • Prometheus

?

,  cron. v1.0.0

. , - MongoDB. - Elastic Search. SMS / . , , , . .

- - ) , . ,

Balerter . . , - .

Issue PR.




All Articles