ΠΡΠ΅ Π»ΡΠ±ΡΡ Π°Π»Π΅ΡΡΡ.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π³ΠΎΡΠ°Π·Π΄ΠΎ Π»ΡΡΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ-ΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ (ΠΈΠ»ΠΈ ΠΏΠΎΡΠΈΠ½ΠΈΠ»ΠΎΡΡ), ΡΠ΅ΠΌ ΡΠΈΠ΄Π΅ΡΡ, ΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° Π³ΡΠ°ΡΠΈΠΊΠΈ ΠΈ ΠΈΡΠΊΠ°ΡΡ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ.
Π ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΎ Π½Π΅ΠΌΠ°Π»ΠΎ. Alertmanager ΠΈΠ· ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΡ Prometheus ΠΈ vmalert ΠΈΠ· Π³ΡΡΠΏΠΏΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ² VictoriaMetrics. Π£Π²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ zabbix ΠΈ Π°Π»Π΅ΡΡΡ Π² Grafana. Π‘Π°ΠΌΠΎΠΏΠΈΡΠ½ΡΠ΅ ΡΠΊΡΠΈΠΏΡΡ Π½Π° bash ΠΈ Telegram Π±ΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ Π΄Π΅ΡΠ³Π°ΡΡ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ URL ΠΈ Π³ΠΎΠ²ΠΎΡΡΡ, Π΅ΡΠ»ΠΈ ΡΡΠΎ-ΡΠΎ Π½Π΅ ΡΠ°ΠΊ. ΠΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅Π³ΠΎ.
ΠΡ, Π² Π½Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΡΠΎΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΡΠ°Π·Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΠΏΠΎΠΊΠ° Π½Π΅ ΡΠΏΠ΅ΡΠ»ΠΈΡΡ Π² ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ, ΠΈΠ»ΠΈ, ΡΠΊΠΎΡΠ΅Π΅, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ»ΠΎΠΆΠ½ΡΡ
, ΡΠΎΡΡΠ°Π²Π½ΡΡ
Π°Π»Π΅ΡΡΠΎΠ². Π§Π΅Π³ΠΎ Π½Π°ΠΌ Ρ
ΠΎΡΠ΅Π»ΠΎΡΡ ΠΈ ΡΡΠΎ Π² ΠΈΡΠΎΠ³Π΅ ΡΠ΄Π΅Π»Π°Π»ΠΈ — ΠΏΠΎΠ΄ ΠΊΠ°ΡΠΎΠΌ. TLDR: Π’Π°ΠΊ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ open source ΠΏΡΠΎΠ΅ΠΊΡ
ΠΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π΄ΠΎΠ»Π³ΠΎ ΠΌΡ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ ΠΆΠΈΠ»ΠΈ Ρ Π°Π»Π΅ΡΡΠ°ΠΌΠΈ, Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΡΠΌΠΈ Π² Grafana. ΠΠ°, ΡΡΠΎ Π½Π΅ Π»ΡΡΡΠΈΠΉ ΠΏΡΡΡ. ΠΡΠ΅Π³Π΄Π° ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΡΠΈΠΏΠ° Alertmanager. Π ΠΌΡ ΡΠΎΠΆΠ΅ Π½Π΅ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΡΠΌΠΎΡΡΠ΅Π»ΠΈ Π² ΡΡΠΎΡΠΎΠ½Ρ ΠΏΠ΅ΡΠ΅Π΅Π·Π΄Π°. Π Π·Π°ΡΠ΅ΠΌ, ΠΏΠΎΡΠΈΡ ΠΎΠ½ΡΠΊΡ, Π½Π°ΠΌ Π·Π°Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ.
Π‘ΠΊΠ°Π·Π°ΡΡ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΊΠΈΠΉ Π³ΡΠ°ΡΠΈΠΊ ΡΠΏΠ°Π»/Π²ΡΡΠΎΡ Π½Π° XX% ΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠ°ΠΌ ΡΠΆΠ΅ N ΠΌΠΈΠ½ΡΡ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΎΠΌ Π² M ΡΠ°ΡΠΎΠ²? ΠΡΠΎ, ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Ρ Grafana ΠΈΠ»ΠΈ Alertmanager, Π½ΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½Π΅ ΠΏΡΠΎΡΡΠΎ. (Π ΠΌΠΎΠΆΠ΅Ρ ΠΈ Π½Π΅Π»ΡΠ·Ρ, Ρ ΡΠ΅ΠΉΡΠ°Ρ ΠΈ Π½Π΅ ΡΠΊΠ°ΠΆΡ)
ΠΡΠ΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π΅ΡΠ΅ ΡΠ»ΠΎΠΆΠ½Π΅Π΅, ΠΊΠΎΠ³Π΄Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± Π°Π»Π΅ΡΡΠ΅ Π½Π°Π΄ΠΎ ΠΏΡΠΈΠ½ΡΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΡΠ°Π·Π½ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ². ΠΠΈΠ²ΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· Π΄Π²ΡΡ Π±Π°Π· Clickhouse, Π΄Π°Π»Π΅Π΅ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΠΌ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΈΠ· Postgres, ΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± Π°Π»Π΅ΡΡΠ΅. Π‘ΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π»ΠΈΠ±ΠΎ ΠΎΡΠΌΠ΅Π½ΠΈΡΡ
ΠΠΎΠ΄ΠΎΠ±Π½ΡΡ Ρ ΠΎΡΠ΅Π»ΠΎΠΊ Ρ Π½Π°Ρ Π½Π°ΠΊΠΎΠΏΠΈΠ»ΠΎΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΌΡ Π·Π°Π΄ΡΠΌΠ°Π»ΠΈΡΡ ΠΎ ΡΠ²ΠΎΠ΅ΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ. Π ΡΠΎΠ³Π΄Π° ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°Π»ΠΈ ΡΠΎΡΡΠ°Π²ΠΈΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ/Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΡΡΠΎΠ³ΠΎ, Π½Π΅ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠΊΠ°, ΡΠ΅ΡΠ²ΠΈΡΠ°
-
ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΡΠ°Π·Π½ΡΠΌ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°ΠΌ Π΄Π°Π½Π½ΡΡ . ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Prometheus, Clickhouse, Postgres
-
ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π°Π»Π΅ΡΡΡ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΊΠ°Π½Π°Π»Ρ — telegram, slack ΠΈ Ρ.Π΄.
-
Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΎΠ±Π΄ΡΠΌΡΠ²Π°Π½ΠΈΡ ΡΡΠ°Π»ΠΎ ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΡΡΠΎ Ρ ΠΎΡΠ΅ΡΡΡ Π½Π΅ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ, Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΈΡΠ°ΡΡ ΡΠΊΡΠΈΠΏΡΡ
-
Π·Π°ΠΏΡΡΠΊ ΡΠΊΡΠΈΠΏΡΠΎΠ² ΠΏΠΎ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΡ
-
Π»Π΅Π³ΠΊΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΊΡΠΈΠΏΡΠΎΠ² Π±Π΅Π· ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΠ²ΠΈΡΠ°
-
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΊΠ°ΠΊ-ΡΠΎ ΡΠ°ΡΡΠΈΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» Π±Π΅Π· ΠΏΠ΅ΡΠ΅ΡΠ±ΠΎΡΠΊΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΠΊΠΎΠ΄ΠΎΠ²
ΠΡΠΎ ΡΠΏΠΈΡΠΎΠΊ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΡΠΉ ΠΈ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΠΎΡΠ½ΡΠΉ. ΠΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΏΡΠ½ΠΊΡΡ Π²ΠΈΠ΄ΠΎΠΈΠ·ΠΌΠ΅Π½ΡΠ»ΠΈΡΡ, ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΡΠΌΠΈΡΠ°Π»ΠΈ. ΠΡΠ΅ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ.
Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊ Π½Π°ΡΠ°Π»Π°ΡΡ ΠΈΡΡΠΎΡΠΈΡ 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. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎ Π²ΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π° ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ°ΠΉΡΠ΅
-
ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ·
-
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 ΠΈ/ΠΈΠ»ΠΈ Π΄Π΅Π»Π°ΡΡ Π΄ΠΎΠ·Π²ΠΎΠ½ Π½Π° ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΠΉ. Π₯ΠΎΡΠΈΠΌ ΡΠΌΠ΅ΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠΊΡΠΈΠΏΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· ΡΠ°ΠΉΠ»ΠΎΠ², Π½ΠΎ ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ² Ρ ΠΎΡΠΈΠΌ Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΡΠ°ΠΉΡ ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ ΠΎΡΠΎΡΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ.
ΠΡΠ΅Π³Π΄Π° ΠΊΠΎΠΌΡ-ΡΠΎ ΡΠ΅Π³ΠΎ-ΡΠΎ Π½Π΅ Ρ Π²Π°ΡΠ°Π΅Ρ) ΠΠ΄Π΅ΡΡ ΠΌΡ Π½Π°Π΄Π΅Π΅ΠΌΡΡ Π½Π° Π·Π°ΠΏΡΠΎΡ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°, ΡΡΠΎΠ±Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π²ΡΡΡΡΠΎΠΈΡΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΡ. Π Π½Π° ΠΏΠΎΠΌΠΎΡΡ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°, ΡΡΠΎΠ±Ρ Π²ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ
Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ
Π Π΄ΠΎΠ±ΡΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°ΡΡ Ρ Π²Π°ΡΠΈΠΌΠΈ Issue ΠΈ PR.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com