轻松处理复杂的警报。还是Balerter创立的历史

每个人都喜欢警报。

当然,比起坐在周围查看图表和查找异常情况,最好在发生(或修复)某事时通知他们。

为此已经创建了许多工具。来自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

  • , S3 ( )

  • - Key/Value

  • Lua (- lua- json, csv)

  • HTTP ( , )

  • API ( , )

  • Prometheus

?

,  cron. v1.0.0

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

- - ) , . ,

我们已经使用Balerter相当一段时间了。数十个脚本保护着我们省心。希望这项工作对其他人有帮助。

欢迎来到您的问题和公关。




All Articles