每个人都喜欢警报。
当然,比起坐在周围查看图表和查找异常情况,最好在发生(或修复)某事时通知他们。
为此已经创建了许多工具。来自Prometheus生态系统的Alertmanager和来自VictoriaMetrics产品组的vmalert。Zabbix在Grafana中的通知和警报。bash和Telegram机器人上的自写脚本会定期提取一些URL并说出是否有问题。很多东西。
在我们公司中,我们还使用了不同的解决方案,直到遇到复杂性,或者甚至不可能创建复杂的复合警报。我们想要的和最终要做的事被削减了。TLDR:这就是开源项目Balerter的出现方式
长期以来,我们在Grafana中配置的警报都过得很好。是的,这不是最好的方法。始终建议使用某种专门的解决方案,例如Alertmanager。我们还不止一次地看了看十字路口的方向。然后,慢慢地,我们想要更多。
假设某张图表下跌/增长了XX%,并且与前一个小时的M小时相比,有N分钟吗?看来您可以尝试使用Grafana或Alertmanager来实现它,但这并不容易。(或者可能不会,我现在不说)
当必须根据来自不同来源的数据做出警报决定时,事情就变得更加复杂。现场示例:
我们检查来自两个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相当一段时间了。数十个脚本保护着我们省心。希望这项工作对其他人有帮助。
欢迎来到您的问题和公关。