誰もがアラートが大好きです。
もちろん、グラフを見て異常を探すよりも、何かが起こった(または修正された)ときに通知を受ける方がはるかに優れています。
そして、このために多くのツールが作成されています。PrometheusエコシステムのAlertmanagerとVictoriaMetrics製品グループのvmalert。GrafanaでのZabbixの通知とアラート。定期的にURLを取得し、問題があるかどうかを通知するbashおよびTelegramボットの自作スクリプト。すべての多く。
私たちの会社では、複雑になるまで、または複雑な複合アラートを作成することが不可能になるまで、さまざまなソリューションを使用していました。私たちが望んでいたこと、そして最終的に私たちがしたことは、カットの下にあります。TLDR:これがオープンソースプロジェクトBalerterの登場です
長い間、Grafanaで構成されたアラートでかなりうまくいっていました。はい、これは最善の方法ではありません。Alertmanagerなど、ある種の特殊なソリューションを使用することを常にお勧めします。そして、交差点の方向も何度も見ました。そして、ゆっくりと、もっと欲しかった。
特定のチャートがXX%減少/増加し、前のM時間と比較してN分間存在する場合を考えてみてください。GrafanaまたはAlertmanagerで実装を試みることができるようですが、それは簡単ではありません。(またはそうではないかもしれませんが、今は言いません)
アラートに関する決定をさまざまなソースからのデータに基づいて行う必要がある場合、事態はさらに複雑になります。実例:
2つのClickhouseデータベースのデータを確認し、それをPostgresのデータと比較して、アラートを決定します。信号またはキャンセル
そんな思いをたくさん積み重ねてきました。そして、まだ作成されていないこのサービスの要件/機能の最初のリストをコンパイルしようとしました
さまざまなデータソースにアクセスします。たとえば、Prometheus、Clickhouse、Postgres
テレグラム、スラックなど、さまざまなチャネルにアラートを送信します。
, ,
-
, , . - , - . .
, 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はかなり前から使用しています。何十ものスクリプトが私たちの安心を守っています。この作品が他の誰かに役立つことを願っています。
そして、あなたの問題とPRへようこそ。