-- @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')