
الجميع يحب التنبيهات.
بالطبع ، من الأفضل أن يتم إخطارك عند حدوث شيء ما (أو إصلاحه) بدلاً من الجلوس للنظر في الرسوم البيانية والبحث عن الانحرافات.
وقد تم إنشاء الكثير من الأدوات لهذا الغرض. 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
- Key/Value
Lua (- lua- json, csv)
HTTP ( , )
API ( , )
Prometheus
?
, cron. v1.0.0
. , - MongoDB. - Elastic Search. SMS / . , , , . .
- - ) , . ,
Balerter . . , - .
Issue PR.