-- @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、用于在日志中显示、用于测试)
连接日志输出模块
连接模块以访问具有名称的 clickhouse ch1 (连接本身在配置中配置)
向 clickhouse 发送请求
如果出现错误,我们会在日志中显示一条消息并退出
将查询结果与常量进行比较(在实际示例中,我们可以例如从 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')