
Semua orang menyukai peringatan.
Tentu saja, jauh lebih baik untuk diberi tahu ketika sesuatu terjadi (atau diperbaiki) daripada hanya duduk-duduk melihat grafik dan mencari anomali.
Dan banyak alat telah dibuat untuk ini. Alertmanager dari ekosistem Prometheus dan vmalert dari grup produk VictoriaMetrics. Pemberitahuan dan peringatan Zabbix di Grafana. Skrip yang ditulis sendiri pada bot bash dan Telegram yang secara berkala menarik beberapa URL dan mengatakan jika ada yang salah. Segalanya.
Kami, di perusahaan kami, juga menggunakan solusi yang berbeda sampai kami mengalami kerumitan, atau lebih tepatnya kemustahilan untuk membuat lansiran gabungan yang rumit. Apa yang kami inginkan dan apa yang kami lakukan pada akhirnya akan dipotong. TLDR: Ini adalah bagaimana proyek open source Balerter muncul
Untuk waktu yang lama, kami hidup cukup baik dengan peringatan yang dikonfigurasi di Grafana. Ya, ini bukan cara terbaik. Itu selalu disarankan untuk menggunakan beberapa jenis solusi khusus, seperti Alertmanager. Dan kami juga melihat ke arah penyeberangan lebih dari satu kali. Dan kemudian, sedikit demi sedikit, kami menginginkan lebih.
Katakanlah ketika grafik tertentu turun / tumbuh sebesar XX% dan apakah ada selama N menit dibandingkan dengan periode M jam sebelumnya? Tampaknya Anda dapat mencoba menerapkannya dengan Grafana atau Alertmanager, tetapi itu tidak mudah. (Atau mungkin tidak, saya tidak akan mengatakannya sekarang)
, . :
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.