рдЬрдЯрд┐рд▓ рдЕрд▓рд░реНрдЯрд╣рд░реВрд╕рдБрдЧ рд╕рдЬрд┐рд▓реЛ рдХрд╛рдоред рд╡рд╛ Balerter рдХреЛ рд╕рд┐рд░реНрдЬрдирд╛ рдХреЛ рдЗрддрд┐рд╣рд╛рд╕

рдЬрдЯрд┐рд▓ рдЕрд▓рд░реНрдЯрд╣рд░реВрд╕рдБрдЧ рд╕рдЬрд┐рд▓реЛ рдХрд╛рдоред рд╡рд╛ Balerter рдХреЛ рд╕рд┐рд░реНрдЬрдирд╛ рдХреЛ рдЗрддрд┐рд╣рд╛рд╕

рд╕рдмреИрд▓рд╛рдИ рд╕рддрд░реНрдХрддрд╛ рдорди рдкрд░реНрдЫред

рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣, рдмрд╕реЗрд░ рдЧреНрд░рд╛рдлрд╣рд░реВ рд╣реЗрд░реНрди рд░ рд╡рд┐рд╕рдВрдЧрддрд┐рд╣рд░реВ рдЦреЛрдЬреНрдиреБ рднрдиреНрджрд╛ рдХреЗрд╣рд┐ рднрдпреЛ (рд╡рд╛ рдирд┐рд╢реНрдЪрд┐рдд рдЧрд░рд┐рдПрдХреЛ) рд╕реВрдЪрд┐рдд рдЧрд░реНрди рдзреЗрд░реИ рд░рд╛рдореНрд░реЛ рдЫред

рд░ рдпрд╕рдХрд╛ рд▓рд╛рдЧрд┐ рдзреЗрд░реИ рдЙрдкрдХрд░рдгрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреНред рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рд░ рднрд┐рдХреНрдЯреЛрд░рд┐рдпрд╛рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЙрддреНрдкрд╛рджрди рд╕рдореВрд╣рдмрд╛рдЯ vmalert рдмрд╛рдЯ рдЕрд▓рд░реНрдЯ рдкреНрд░рдмрдиреНрдзрдХред Zabbix рд╕реВрдЪрдирд╛рд╣рд░реВ рд░ Grafana рдорд╛ рдЕрд▓рд░реНрдЯрд╣рд░реВред bash рд░ Telegram рдмрдЯрд╣рд░реВрдорд╛ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВ рдЬреБрди рдЖрд╡рдзрд┐рдХ рд░реВрдкрдорд╛ рдХреЗрд╣реА URL рддрд╛рдиреНрдЫрдиреН рд░ рдХреЗрд╣реА рдЧрд▓рдд рдЫ рднрдиреЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдмрддрд╛рдЙрдБрдЫрдиреНред рд╕рдмреИ рдХреБрд░рд╛ рдзреЗрд░реИред

рд╣рд╛рдореАрд▓реЗ, рд╣рд╛рдореНрд░реЛ рдХрдореНрдкрдиреАрдорд╛, рдЬрдЯрд┐рд▓рддрд╛, рд╡рд╛ рдмрд░реБ, рдЬрдЯрд┐рд▓, рд╕рдордЧреНрд░ рдЕрд▓рд░реНрдЯрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдЕрд╕рдореНрднрд╡рддрд╛рдорд╛ рдирдкреБрдЧреЗрд╕рдореНрдо рд╡рд┐рднрд┐рдиреНрди рд╕рдорд╛рдзрд╛рдирд╣рд░реВ рдкрдирд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдпреМрдВред рд╣рд╛рдореАрд▓реЗ рдХреЗ рдЪрд╛рд╣реЗрдХрд╛ рдерд┐рдпреМрдВ рд░ рд╣рд╛рдореАрд▓реЗ рдХреЗ рдЧрд░реНрдпреМрдВ рддреНрдпреЛ рдХрдЯ рддрд▓ рдЫред TLDR: рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдпрд╕рд░реА рджреЗрдЦрд╛ рдкрд░реНтАНрдпреЛ Balerter

рдзреЗрд░реИ рд▓рд╛рдореЛ рд╕рдордп рдХреЛ рд▓рд╛рдЧреА рд╣рд╛рдореА Grafana рдорд╛ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХрд╛ рдЕрд▓рд░реНрдЯрд╣рд░реБ рд╕рдВрдЧ рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рдмрд╕реНрдпреМрдВред рд╣реЛ, рдпреЛ рдЙрддреНрддрдо рддрд░рд┐рдХрд╛ рд╣реЛрдЗрдиред рдпреЛ рд╕рдБрдзреИ рдХреЗрд╣рд┐ рд╡рд┐рд╢реЗрд╖ рд╕рдорд╛рдзрд╛рдирд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдиреНрдЫ, рдЬрд╕реНрддреИ Alertmanagerред рд░ рд╣рд╛рдореАрд▓реЗ рдкрдирд┐ рдПрдХ рдкрдЯрдХ рднрдиреНрджрд╛ рдмрдврд┐ рд╕рд░реНрдиреЗ рджрд┐рд╢рд╛рдорд╛ рд╣реЗрд░реНрдпреМрдВред рд░ рддреНрдпрд╕рдкрдЫрд┐, рдмрд┐рд╕реНрддрд╛рд░реИ, рд╣рд╛рдореА рдердк рдЪрд╛рд╣рдиреНрдереНрдпреМрдВред

M рдШрдгреНрдЯрд╛рдХреЛ рдЕрдШрд┐рд▓реНрд▓реЛ рдЕрд╡рдзрд┐рдХреЛ рддреБрд▓рдирд╛рдорд╛ рдХреБрдиреИ рдирд┐рд╢реНрдЪрд┐рдд рдЪрд╛рд░реНрдЯ XX% рд▓реЗ рдШрдЯреЗрдХреЛ/рдмрдвреНрдиреЗ рд░ N рдорд┐рдиреЗрдЯрдХреЛ рд▓рд╛рдЧрд┐ рддреНрдпрд╣рд╛рдБ рднрдПрдХреЛ рдмреЗрд▓рд╛ рднрдиреНрдиреБрд╣реЛрд╕реН? рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ рдХрд┐ рддрдкрд╛рдЗрдБ рдпрд╕рд▓рд╛рдИ Grafana рд╡рд╛ Alertmanager рдорд╛рд░реНрдлрдд рд▓рд╛рдЧреВ рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рддрд░ рдпреЛ рдзреЗрд░реИ рд╕рдЬрд┐рд▓реЛ рдЫреИрдиред (рд╡рд╛ рд╕рд╛рдпрдж рдпреЛ рд╕рдореНрднрд╡ рдЫреИрди, рдо рдЕрд╣рд┐рд▓реЗ рднрдиреНрджрд┐рди)

рдХреБрд░рд╛рд╣рд░реВ рдЕрдЭ рдЬрдЯрд┐рд▓ рд╣реБрдиреНрдЫрдиреН рдЬрдм рдЕрд▓рд░реНрдЯ рдирд┐рд░реНрдгрдп рд╡рд┐рднрд┐рдиреНрди рд╕реНрд░реЛрддрд╣рд░реВрдмрд╛рдЯ рдбрд╛рдЯрд╛рдХреЛ рдЖрдзрд╛рд░рдорд╛ рд╣реБрдиреБрдкрд░реНрдЫред рдкреНрд░рддреНрдпрдХреНрд╖ рдЙрджрд╛рд╣рд░рдг:

рд╣рд╛рдореА рджреБрдИ рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕ рдбрд╛рдЯрд╛рдмреЗрд╕рд╣рд░реВрдмрд╛рдЯ рдбрд╛рдЯрд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрдЫреМрдВ, рддреНрдпрд╕рдкрдЫрд┐ рдпрд╕рд▓рд╛рдИ Postgres рдмрд╛рдЯ рдХреЗрд╣реА рдбрд╛рдЯрд╛рд╕рдБрдЧ рддреБрд▓рдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рд░ рдЪреЗрддрд╛рд╡рдиреАрдорд╛ рдирд┐рд░реНрдгрдп рдЧрд░реНрдиреБрд╣реЛрд╕реНред рд╕рдВрдХреЗрдд рд╡рд╛ рд░рджреНрдж рдЧрд░реНрдиреБрд╣реЛрд╕реН

рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдирд┐рд░реНрдгрдпрдХреЛ рдмрд╛рд░реЗрдорд╛ рд╕реЛрдЪреНрдирдХреЛ рд▓рд╛рдЧрд┐ рдзреЗрд░реИ рд╕рдорд╛рди рдЗрдЪреНрдЫрд╛рд╣рд░реВ рдЬрдореНрдорд╛ рдЧрд░реЗрдХрд╛ рдЫреМрдВред рд░ рддреНрдпрд╕рдкрдЫрд┐ рд╣рд╛рдореАрд▓реЗ рдпрд╕ рд╕реЗрд╡рд╛рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВ / рдХреНрд╖рдорддрд╛рд╣рд░реВрдХреЛ рдкрд╣рд┐рд▓реЛ рд╕реВрдЪреА рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдпреМрдВ, рдЬреБрди рдЕрд╣рд┐рд▓реЗрд╕рдореНрдо рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдЫреИрдиред

  • рд╡рд┐рднрд┐рдиреНрди рдбрд╛рдЯрд╛ рд╕реНрд░реЛрддрд╣рд░реВ рдкрд╣реБрдБрдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдкреНрд░реЛрдореЗрдерд┐рдпрд╕, рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕, рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕

  • рд╡рд┐рднрд┐рдиреНрди рдЪреНрдпрд╛рдирд▓рд╣рд░реВрдорд╛ рдЕрд▓рд░реНрдЯрд╣рд░реВ рдкрдард╛рдЙрдиреБрд╣реЛрд╕реН - рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдо, рд╕реНрд▓реНрдпрд╛рдХ, рдЖрджрд┐ред

  • рд╕реЛрдЪреНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдорд╛, рдпреЛ рд╕реНрдкрд╖реНрдЯ рднрдпреЛ рдХрд┐ рдо рдШреЛрд╖рдгрд╛рддреНрдордХ рд╡рд┐рд╡рд░рдг рдЪрд╛рд╣рдиреНрди, рддрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЗрдЦреНрдиреЗ рдХреНрд╖рдорддрд╛

  • рддрд╛рд▓рд┐рдХрд╛рдорд╛ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВ

  • рд╕реЗрд╡рд╛ рдкреБрди: рд╕реБрд░реБ рдирдЧрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВрдХреЛ рд╕рдЬрд┐рд▓реЛ рдЕрдкрдбреЗрдЯ

  • рд╕реНрд░реЛрдд рдХреЛрдбрд╣рд░реВрдмрд╛рдЯ рд╕реЗрд╡рд╛ рдкреБрди: рдирд┐рд░реНрдорд╛рдг рдирдЧрд░реА рдХреБрдиреИ рди рдХреБрдиреИ рд░реВрдкрдорд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛

рдпреЛ рд╕реВрдЪреА рдЕрдиреБрдорд╛рдирд┐рдд рдЫ рд░ рд╕рдореНрднрд╡рддрдГ рдзреЗрд░реИ рд╕рд╣реА рдЫреИрдиред рдХреЗрд╣реА рдмрд┐рдиреНрджреБрд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рднрдП, рдХреЗрд╣реА рдорд░реЗред рд╕рдмреИ рд╕рд╛рдорд╛рдиреНрдп рдЬрд╕реНрддреИ рдЫред

рд╡рд╛рд╕реНрддрд╡рдорд╛, рдпреЛ рдХрд╕рд░реА Balerter рдХреЛ рдЗрддрд┐рд╣рд╛рд╕ рд╕реБрд░реБ рднрдпреЛред

рдЬрдЯрд┐рд▓ рдЕрд▓рд░реНрдЯрд╣рд░реВрд╕рдБрдЧ рд╕рдЬрд┐рд▓реЛ рдХрд╛рдоред рд╡рд╛ Balerter рдХреЛ рд╕рд┐рд░реНрдЬрдирд╛ рдХреЛ рдЗрддрд┐рд╣рд╛рд╕

рдо рдЕрдиреНрддрдорд╛ рдХреЗ рднрдпреЛ рд░ рдпрд╕рд▓реЗ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдЫ рднрдиреЗрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдкрдорд╛ рд╡рд░реНрдгрди рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреЗрдЫреБред (рд╣реЛ, рдЕрд╡рд╢реНрдп рдкрдирд┐, рдпреЛ рдЕрдиреНрддреНрдп рд╣реЛрдЗрдиред рдЙрддреНрдкрд╛рджрди рд╡рд┐рдХрд╛рд╕рдХрд╛ рд▓рд╛рдЧрд┐ рдзреЗрд░реИ рдпреЛрдЬрдирд╛рд╣рд░реВ рдЫрдиреНред рдо рдЖрдЬ рдорд╛рддреНрд░ рд░реЛрдХреНрдЫреБ)

рдпрд╕рд▓реЗ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдЫ?

рддрдкрд╛рдЗрдБ рд▓реБрдЖрдорд╛ рдПрдЙрдЯрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЗрдЦреНрдиреБрд╣реБрдиреНрдЫ рдЬрд╣рд╛рдБ рддрдкрд╛рдЗрдБ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рдЕрдиреБрд░реЛрдзрд╣рд░реВ рдкрдард╛рдЙрдиреБрд╣реБрдиреНрдЫ (рдкреНрд░реЛрдореЗрдерд┐рдпрд╕, рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕, рдЖрджрд┐)ред рддрдкрд╛рдИрдВрд▓реЗ рдЬрд╡рд╛рдлрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ рд░ рдХреБрдиреИ рди рдХреБрдиреИ рддрд░рд┐рдХрд╛рд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд░ рддреБрд▓рдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рддреНрдпрд╕рдкрдЫрд┐ рдХреБрдиреИ рдкреНрд░рдХрд╛рд░рдХреЛ рдЕрд▓рд░реНрдЯ рдЕрди/рдЕрдл рдЧрд░реНрдиреБрд╣реЛрд╕реНред Balerter рдЖрдлреИрд▓реЗ рддрдкрд╛рдИрдВрд▓реЗ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрдиреБрднрдПрдХреЛ рдЪреНрдпрд╛рдирд▓рд╣рд░реВрдорд╛ рд╕реВрдЪрдирд╛ рдкрдард╛рдЙрдиреЗрдЫ (рдЗрдореЗрд▓, рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдо, рд╕реНрд▓реНрдпрд╛рдХ, рдЖрджрд┐)ред рд▓рд┐рдкрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЕрдиреНрддрд░рд╛рд▓рд╣рд░реВрдорд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдиреНрдЫред рд░ ... рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдпреЛ рд╕рдмреИ рд╣реЛ)

рдпреЛ рдЙрджрд╛рд╣рд░рдг рд╕рдВрдЧ рджреЗрдЦрд╛рдЙрди рд╕рдмреИ рднрдиреНрджрд╛ рд░рд╛рдореНрд░реЛ рдЫ:

-- @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 рд╕реЗрдХреЗрдиреНрдбрдорд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реБрдиреБрдкрд░реНрдЫ

  • рд▓рд┐рдкрд┐рдХреЛ рдирд╛рдо рд╕рдВрдХреЗрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН (рдПрдкреАрдЖрдИрдХреЛ рд▓рд╛рдЧрд┐, рд▓рдЧрд╣рд░реВрдорд╛ рдкреНрд░рджрд░реНрд╢рдирдХреЛ рд▓рд╛рдЧрд┐, рдкрд░реАрдХреНрд╖рдгрд╣рд░реВрдорд╛ рдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐)

  • рдЖрдЙрдЯрдкреБрдЯ рд▓рдЧрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдореЛрдбреНрдпреБрд▓ рдЬрдбрд╛рди рдЧрд░реНрдиреБрд╣реЛрд╕реН

  • рдирд╛рдордХреЛ рд╕рд╛рде рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕ рдкрд╣реБрдБрдЪ рдЧрд░реНрди рдореЛрдбреНрдпреБрд▓ рдЬрдбрд╛рди рдЧрд░реНрдиреБрд╣реЛрд╕реН 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

  • рд╣рд╛рдореАрд▓реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдиреНрджреЗрд╢рдХреЛ рд╕рд╛рде рдЕрд▓рд░реНрдЯ (рддреНрд░реБрдЯрд┐) rps-min-limit рд▓рд╛рдИ рдХрд▓ рдЧрд░рд┐рдПрдХреЛ рдЬрд╛рдБрдЪ рдЧрд░реНрдЫреМрдВ

  • рдЬрд╛рдБрдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд┐ rps-min-limit рдЕрд▓рд░реНрдЯ рдЕрд╕рдХреНрд╖рдо рдЧрд░рд┐рдПрдХреЛ рдЫреИрди (рд╕рдлрд▓)

Balerter рдЕрд░реВ рдХреЗ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ?

рдо рд╕рдмреИрднрдиреНрджрд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдорд╛ рдЫреБрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреЗрдЫреБ, рдореЗрд░реЛ рд╡рд┐рдЪрд╛рд░рдорд╛, Balerter рдХреМрд╢рд▓ред рддрдкрд╛рдИрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯрдорд╛ рд╡рд┐рд╕реНрддреГрдд рд░реВрдкрдорд╛ рд╕рдмреИ рдХреБрд░рд╛ рд╣реЗрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ https://balerter.com

  • рдмрд╛рдЯ рдбрд╛рдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН

    • рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕

    • рдкреЛрд╕реНрдЯрдЧреЗрдЬ

    • MySQL

    • рдкреНрд░реЛрдореЗрдерд┐рдпрд╕

    • loki

  • рдЪреНрдпрд╛рдирд▓рд╣рд░реВрдорд╛ рд╕реВрдЪрдирд╛рд╣рд░реВ рдкрдард╛рдЙрдиреБрд╣реЛрд╕реН

    • рдврд┐рд▓реЛ

    • рдЯреЗрд▓реАрдЧреНрд░рд╛рдо

    • syslog

    • рд╕реВрдЪрд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН (рддрдкрд╛рдИрдБрдХреЛ рдХрдореНрдкреНрдпреБрдЯрд░рдорд╛ UI рд╕реВрдЪрдирд╛рд╣рд░реВ)

    • рдИрдореЗрд▓

    • рдорддрднреЗрдж

  • рддрдкрд╛рдИрдВрдХреЛ рдбрд╛рдЯрд╛рдорд╛ рдЖрдзрд╛рд░рд┐рдд рдЧреНрд░рд╛рдлрд╣рд░реВ рдмрдирд╛рдЙрдиреБрд╣реЛрд╕реН, рдЫрд╡рд┐рд▓рд╛рдИ S3 рдЙрдкрдпреБрдХреНрдд рднрдгреНрдбрд╛рд░рдгрдорд╛ рдЕрдкрд▓реЛрдб рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рд╕реВрдЪрдирд╛рд╣рд░реВрдорд╛ рд╕рдВрд▓рдЧреНрди рдЧрд░реНрдиреБрд╣реЛрд╕реН (рдЪрд┐рддреНрд░рд╣рд░реБ рд╕рдВрдЧ рдЙрджрд╛рд╣рд░рдг)

  • рддрдкрд╛рдИрдВрд▓рд╛рдИ рд▓рд┐рдкрд┐рд╣рд░реВ рдмреАрдЪ рдбрд╛рдЯрд╛ рдЖрджрд╛рдирдкреНрд░рджрд╛рди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ - рд╡рд┐рд╢реНрд╡рд╡реНрдпрд╛рдкреА рдХреБрдЮреНрдЬреА/рдорд╛рди рднрдгреНрдбрд╛рд░рдг

  • рд▓реБрдЖрдорд╛ рдЖрдлреНрдиреИ рдкреБрд╕реНрддрдХрд╛рд▓рдпрд╣рд░реВ рд▓реЗрдЦреНрдиреБрд╣реЛрд╕реН рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд▓рд┐рдкрд┐рд╣рд░реВрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН (рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛, рд▓реБрдЖ рдкреБрд╕реНрддрдХрд╛рд▓рдпрд╣рд░реВ json, csv рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдЖрдкреВрд░реНрддрд┐ рдЧрд░рд┐рдиреНрдЫ)

  • рддрдкрд╛рдИрдВрдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдмрд╛рдЯ HTTP рдЕрдиреБрд░реЛрдзрд╣рд░реВ рдкрдард╛рдЙрдиреБрд╣реЛрд╕реН (рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдЕрд╡рд╢реНрдп рдкрдирд┐)

  • рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ (рд╣рд╛рдореАрд▓реЗ рдЪрд╛рд╣реЗрдХреЛ рдЬрд╕реНрддреЛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЫреИрди)

  • рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдврд╛рдБрдЪрд╛рдорд╛ рдирд┐рд░реНрдпрд╛рдд рдореЗрдЯреНрд░рд┐рдХреНрд╕

рддрдкрд╛рдИрдВ рдЕрд░реВ рдХреЗ рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ?

рдпреЛ рдкрд╣рд┐рд▓реЗ рдиреИ рд╕реНрдкрд╖реНрдЯ рдЫ рдХрд┐ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ рд░ рд╣рд╛рдореА рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрд╕ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдХреЛ рд╕реБрд░реБрд╡рд╛рдд рдирд┐рдпрдиреНрддреНрд░рдг рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛ рдЪрд╛рд╣рдиреНрдЫреМрдВ cronред рдпреЛ рд╕рдВрд╕реНрдХрд░рдг v1.0.0 рдЕрдШрд┐ рдЧрд░рд┐рдиреЗрдЫ

рдо рдердк рдбреЗрдЯрд╛ рд╕реНрд░реЛрддрд╣рд░реВ рд░ рд╕реВрдЪрдирд╛ рд╡рд┐рддрд░рдг рдЪреНрдпрд╛рдирд▓рд╣рд░реВрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреБред рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА, рдХрд╕реИрд▓реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдкрдорд╛ MongoDB рд▓рд╛рдИ рдорд┐рд╕ рдЧрд░реНрдиреЗрдЫред рдХреЗрд╣рд┐ рдХреЛ рд▓рд╛рдЧреА рд▓реЛрдЪрджрд╛рд░ рдЦреЛрдЬред SMS рдкрдард╛рдЙрдиреБрд╣реЛрд╕реН рд░/рд╡рд╛ рдЖрдлреНрдиреЛ рдореЛрдмрд╛рдЗрд▓ рдлреЛрдирдорд╛ рдХрд▓ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рд╣рд╛рдореА рди рдХреЗрд╡рд▓ рдлрд╛рдЗрд▓рд╣рд░реВрдмрд╛рдЯ рд▓рд┐рдкрд┐рд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрди рдЪрд╛рд╣рдиреНрдЫреМрдВ, рддрд░ рдкрдирд┐, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдбрд╛рдЯрд╛рдмреЗрд╕рдмрд╛рдЯред рдЕрдиреНрддрдорд╛, рд╣рд╛рдореА рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ рдердк рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛-рдЕрдиреБрдХреВрд▓ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд░ рд░рд╛рдореНрд░реЛ рдХрд╛рдЧрдЬрд╛рддрд╣рд░реВ рдЪрд╛рд╣рдиреНрдЫреМрдВред

рдХрд╕реИрд▓рд╛рдИ рд╕рдзреИрдВ рдХреЗрд╣реА рди рдХреЗрд╣реА рд╣рд░рд╛рдЗрд░рд╣реЗрдХреЛ рдЫ) рдпрд╣рд╛рдБ рд╣рд╛рдореА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рд╣рд░реВ рд╕рд╣реА рд░реВрдкрдорд╛ рд╕реЗрдЯ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рдореБрджрд╛рдпрдХреЛ рдЕрдиреБрд░реЛрдзрдорд╛ рднрд░ рдкрд░реНрдЫреМрдВред рд░ рд╕рдмреИ рдХреБрд░рд╛ рдмреБрдЭреНрди рд╕рдореБрджрд╛рдпрдХреЛ рд╕рд╣рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐

рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛

рд╣рд╛рдореА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМ Balerter рдорд╕рдБрдЧ рдпреЛ рдзреЗрд░реИ рд╕рдордпрдХреЛ рд▓рд╛рдЧрд┐ рднрдПрдХреЛ рдЫред рджрд░реНрдЬрдиреМрдВ рд▓рд┐рдкрд┐рд╣рд░реВрд▓реЗ рд╣рд╛рдореНрд░реЛ рдордирдХреЛ рд╢рд╛рдиреНрддрд┐рдХреЛ рд░рдХреНрд╖рд╛ рдЧрд░реНрджрдЫред рдорд▓рд╛рдИ рдЖрд╢рд╛ рдЫ рдпреЛ рдХрд╛рдо рдЕрд░реВ рдХрд╕реИрд▓рд╛рдИ рдЙрдкрдпреЛрдЧреА рд╣реБрдиреЗрдЫред

рд░ рддрдкрд╛рдЗрдБрдХреЛ рдЕрдВрдХ рд░ PR рд╕рдВрдЧ рд╕реНрд╡рд╛рдЧрдд рдЫред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди