ΠΡΠ΅ΠΊΠΈ ΠΎΠ±ΠΈΡΠ° ΡΠΈΠ³Π½Π°Π»ΠΈΡΠ΅.
Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ Π΅ Π΄Π° Π±ΡΠ΄Π΅ΡΠ΅ ΡΠ²Π΅Π΄ΠΎΠΌΡΠ²Π°Π½ΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ Π½Π΅ΡΠΎ ΡΠ΅ Π΅ ΡΠ»ΡΡΠΈΠ»ΠΎ (ΠΈΠ»ΠΈ Π΅ ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°Π½ΠΎ), ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π΄Π° ΡΠ΅Π΄ΠΈΡΠ΅ ΠΈ Π΄Π° Π³Π»Π΅Π΄Π°ΡΠ΅ Π³ΡΠ°ΡΠΈΠΊΠΈΡΠ΅ ΠΈ Π΄Π° ΡΡΡΡΠΈΡΠ΅ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ.
Π Π·Π° ΡΠΎΠ²Π° ΡΠ° ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ. Alertmanager ΠΎΡ Π΅ΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Prometheus ΠΈ vmalert ΠΎΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ²Π°ΡΠ° Π³ΡΡΠΏΠ° VictoriaMetrics. ΠΠ·Π²Π΅ΡΡΠΈΡ ΠΈ ΡΠΈΠ³Π½Π°Π»ΠΈ Π½Π° Zabbix Π² Grafana. Π‘Π°ΠΌΠΎΠ½Π°ΠΏΠΈΡΠ°Π½ΠΈ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ Π² bash ΠΈ Π±ΠΎΡΠΎΠ²Π΅ Π½Π° Telegram, ΠΊΠΎΠΈΡΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎ ΠΈΠ·Π²Π»ΠΈΡΠ°Ρ Π½ΡΠΊΠΎΠΈ URL ΠΈ Π²ΠΈ ΠΊΠ°Π·Π²Π°Ρ, Π°ΠΊΠΎ Π½Π΅ΡΠΎ Π½Π΅ Π΅ Π½Π°ΡΠ΅Π΄. ΠΡ Π²ΡΠΈΡΠΊΠΎ ΠΏΠΎ ΠΌΠ½ΠΎΠ³ΠΎ.
ΠΠΈΠ΅, Π² Π½Π°ΡΠ°ΡΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ, ΡΡΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ
ΠΌΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ, Π΄ΠΎΠΊΠ°ΡΠΎ Π½Π΅ ΡΠ΅ Π½Π°ΡΡΠΊΠ½Π°Ρ
ΠΌΠ΅ Π½Π° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΠ°, ΠΈΠ»ΠΈ ΠΏΠΎ-ΡΠΊΠΎΡΠΎ Π½Π° Π½Π΅Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠ»ΠΎΠΆΠ½ΠΈ, ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΡΠΈΠ³Π½Π°Π»ΠΈ. Π’ΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΠΈΡΠΊΠ°Ρ
ΠΌΠ΅ ΠΈ ΠΊΠΎΠ΅ΡΠΎ Π² ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° Π½Π°ΠΏΡΠ°Π²ΠΈΡ
ΠΌΠ΅, Π΅ ΠΏΠΎΠ΄ ΡΠ°Π·ΡΠ°ΡΠΎΠ²ΠΊΠ°ΡΠ°. TLDR: ΠΡΠΎ ΠΊΠ°ΠΊ ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΡΡ Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄
ΠΠΎΡΡΠ° Π΄ΡΠ»Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΆΠΈΠ²Π΅Π΅Ρ ΠΌΠ΅ Π΄ΠΎΠ±ΡΠ΅ Ρ Π°Π»Π°ΡΠΌΠΈ, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ΠΈ Π² Grafana. ΠΠ°, ΡΠΎΠ²Π° Π½Π΅ Π΅ Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΈΡΡ Π½Π°ΡΠΈΠ½. ΠΠΈΠ½Π°Π³ΠΈ ΡΠ΅ ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π½ΡΠΊΠΎΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΠΊΠ°ΡΠΎ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Alertmanager. Π Π½ΠΈΠ΅ ΡΡΡΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π°Ρ ΠΌΠ΅ ΠΊΡΠΌ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ²Π°Π½Π΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ Π²Π΅Π΄Π½ΡΠΆ. Π ΡΠΎΠ³Π°Π²Π° ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ ΠΌΠ°Π»ΠΊΠΎ ΠΈΡΠΊΠ°Ρ ΠΌΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅.
ΠΠ° ΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠΎΠ³Π°ΡΠΎ Π΄Π°Π΄Π΅Π½Π° Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠ° Π΅ ΠΏΠ°Π΄Π½Π°Π»Π°/ΡΠ²Π΅Π»ΠΈΡΠΈΠ»Π° Ρ XX% ΠΈ Π΅ Π±ΠΈΠ»Π° ΡΠ°ΠΌ Π·Π° N ΠΌΠΈΠ½ΡΡΠΈ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡ ΠΏΠ΅ΡΠΈΠΎΠ΄ ΠΎΡ M ΡΠ°ΡΠ°? ΠΠ·Π³Π»Π΅ΠΆΠ΄Π°, ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΠΏΠΈΡΠ°ΡΠ΅ Π΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠΈΡΠ΅ ΡΠΎΠ²Π° Ρ Grafana ΠΈΠ»ΠΈ Alertmanager, Π½ΠΎ Π½Π΅ Π΅ ΡΡΠ²ΡΠ΅ΠΌ Π»Π΅ΡΠ½ΠΎ. (ΠΠ»ΠΈ ΠΌΠΎΠΆΠ΅ Π±ΠΈ Π½Π΅ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΡΠΌΠ° Π΄Π° ΠΊΠ°ΠΆΠ° ΡΠ΅Π³Π°)
ΠΠ΅ΡΠ°ΡΠ° ΡΡΠ°Π²Π°Ρ ΠΎΡΠ΅ ΠΏΠΎ-ΡΠ»ΠΎΠΆΠ½ΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ Π²Π·Π΅ΠΌΠ΅ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ. ΠΡΠΈΠΌΠ΅Ρ Π½Π° ΠΆΠΈΠ²ΠΎ:
ΠΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΎΡ Π΄Π²Π΅ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ Π½Π° Clickhouse, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π³ΠΈ ΡΡΠ°Π²Π½ΡΠ²Π°ΠΌΠ΅ Ρ Π½ΡΠΊΠΎΠΈ Π΄Π°Π½Π½ΠΈ ΠΎΡ Postgres ΠΈ Π²Π·Π΅ΠΌΠ°ΠΌΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. Π‘ΠΈΠ³Π½Π°Π» ΠΈΠ»ΠΈ ΠΎΡΠΊΠ°Π·
ΠΠ°ΡΡΡΠΏΠ°Ρ ΠΌΠ΅ Π΄ΠΎΡΡΠ° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΡ, Π·Π° Π΄Π° ΠΎΠ±ΠΌΠΈΡΠ»ΠΈΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠΈ. Π ΡΠΎΠ³Π°Π²Π° ΡΠ΅ ΠΎΠΏΠΈΡΠ°Ρ ΠΌΠ΅ Π΄Π° ΡΡΡΡΠ°Π²ΠΈΠΌ ΠΏΡΡΠ²ΠΈΡ ΡΠΏΠΈΡΡΠΊ Ρ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ/Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π½Π° ΡΠ°Π·ΠΈ ΡΡΠ»ΡΠ³Π°, ΠΊΠΎΠΉΡΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½.
-
Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ Π½Π° Π΄Π°Π½Π½ΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ Prometheus, Clickhouse, Postgres
-
ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° ΡΠΈΠ³Π½Π°Π»ΠΈ Π΄ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠ°Π½Π°Π»ΠΈ - telegram, slack ΠΈ Π΄Ρ.
-
Π² ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΠΌΠΈΡΠ»Π΅Π½Π΅ ΡΡΠ°Π½Π° ΡΡΠ½ΠΎ, ΡΠ΅ Π½Π΅ ΠΈΡΠΊΠ°ΠΌ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅, Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅
-
ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ ΠΏΠΎ Π³ΡΠ°ΡΠΈΠΊ
-
Π»Π΅ΡΠ½ΠΎ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ Π±Π΅Π· ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ°
-
ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡΠ° ΠΏΠΎ Π½ΡΠΊΠ°ΠΊΡΠ² Π½Π°ΡΠΈΠ½ Π΄Π° ΡΠ΅ ΡΠ°Π·ΡΠΈΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ°, Π±Π΅Π· Π΄Π° ΡΠ΅ Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΡΠ²Π° ΡΡΠ»ΡΠ³Π°ΡΠ° ΠΎΡ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ ΠΊΠΎΠ΄ΠΎΠ²Π΅
Π’ΠΎΠ·ΠΈ ΡΠΏΠΈΡΡΠΊ Π΅ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π΅Π½ ΠΈ Π½Π°ΠΉ-Π²Π΅ΡΠΎΡΡΠ½ΠΎ Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΎΡΠ΅Π½. ΠΡΠΊΠΎΠΈ ΡΠΎΡΠΊΠΈ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡ Π°, Π΄ΡΡΠ³ΠΈ ΡΠΌΡΡΡ Π°. ΠΡΠΈΡΠΊΠΎ Π΅ ΠΊΠ°ΠΊΡΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ.
ΠΡΡΡΠ½ΠΎΡΡ ΡΠ°ΠΊΠ° Π·Π°ΠΏΠΎΡΠ²Π° ΠΈΡΡΠΎΡΠΈΡΡΠ° Π½Π° Balerter.
Π©Π΅ ΡΠ΅ ΠΎΠΏΠΈΡΠ°ΠΌ Π΄Π° ΠΎΠΏΠΈΡΠ° Π½Π°ΠΊΡΠ°ΡΠΊΠΎ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΡΠ»ΡΡΠΈ Π² ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΠΈ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ. (ΠΠ°, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, ΡΠΎΠ²Π° Π½Π΅ Π΅ ΠΊΡΠ°ΡΡ. ΠΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½ΠΎΠ²Π΅ Π·Π° ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡΠ΅. Π©Π΅ ΡΠΏΡΠ° Π΄ΠΎ Π΄Π½Π΅Ρ)
ΠΠ°ΠΊ Π΄Π΅ΠΉΡΡΠ²Π° ΡΡ?
ΠΠΈΠ΅ ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠΊΡΠΈΠΏΡ Π² Lua, ΠΊΡΠ΄Π΅ΡΠΎ ΠΈΠ·ΡΠΈΡΠ½ΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠ°ΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ (Π΄ΠΎ Prometheus, Clickhouse ΠΈ Ρ.Π½.). ΠΠΎΠ»ΡΡΠ°Π²Π°ΡΠ΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ ΠΈ ΠΏΠΎ Π½ΡΠΊΠ°ΠΊΡΠ² Π½Π°ΡΠΈΠ½ Π³ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°ΡΠ΅ ΠΈ ΡΡΠ°Π²Π½ΡΠ²Π°ΡΠ΅. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Π²ΠΊΠ»ΡΡΠ΅ΡΠ΅/ΠΈΠ·ΠΊΠ»ΡΡΠ΅ΡΠ΅ Π½ΡΠΊΠ°ΠΊΡΠ² Π²ΠΈΠ΄ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. Π‘Π°ΠΌΠΈΡΡ Balerter ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠΈ ΠΈΠ·Π²Π΅ΡΡΠΈΠ΅ Π΄ΠΎ ΠΊΠ°Π½Π°Π»ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π»ΠΈ (ΠΈΠΌΠ΅ΠΉΠ», ΡΠ΅Π»Π΅Π³ΡΠ°ΠΌΠ°, 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, Π·Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π² ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π² ΡΠ΅ΡΡΠΎΠ²Π΅)
-
ΡΠ²ΡΡΠΆΠ΅ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»Π° Π·Π° ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅
-
ΡΠ²ΡΡΠΆΠ΅ΡΠ΅ ΠΌΠΎΠ΄ΡΠ» Π·Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ 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')
Π‘ΡΡΠΏΠΊΠ° ΠΏΠΎ ΡΡΡΠΏΠΊΠ°:
-
ΠΏΠΎΡΠΎΡΠ΅ΡΠ΅ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΡΠΊΡΠΈΠΏΡΠ°, Π·Π° ΠΊΠΎΠΉΡΠΎ Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ ΡΠ΅ΡΡΡΡ
-
ΠΈΠΌΠ΅ Π½Π° ΡΠ΅ΡΡ (Π·Π° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅)
-
ΡΠ²ΡΡΠΆΠ΅ΡΠ΅ ΡΠ΅ΡΡΠΎΠ²ΠΈΡ ΠΌΠΎΠ΄ΡΠ»
-
ΠΊΠ°Π·Π²Π°ΠΌΠ΅ ΠΊΠ°ΠΊΡΠ² ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ Π²ΡΡΠ½Π°Ρ Π·Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π° Π·Π°ΡΠ²ΠΊΠ° ΠΊΡΠΌ clickhouse
ch1
-
ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅ Π΄Π°Π»ΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ΡΠΎ (Π³ΡΠ΅ΡΠΊΠ°) rps-min-limit Ρ ΡΠΊΠ°Π·Π°Π½ΠΎΡΠΎ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π΅ ΠΈΠ·Π²ΠΈΠΊΠ°Π½ΠΎ
-
ΠΏΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ Π΄Π°Π»ΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ΡΠΎ Π·Π° rps-min-limit Π½Π΅ Π΅ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΎ (ΡΡΠΏΠ΅Ρ )
ΠΠ°ΠΊΠ²ΠΎ Π΄ΡΡΠ³ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ Balerter?
Π©Π΅ ΡΠ΅ ΠΎΠΏΠΈΡΠ°ΠΌ Π΄Π° Π·Π°ΡΠ΅Π³Π½Π° Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΈΡΠ΅, ΡΠΏΠΎΡΠ΅Π΄ ΠΌΠ΅Π½, ΡΠΌΠ΅Π½ΠΈΡ Π½Π° Balerter. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Π²ΡΠΈΡΠΊΠΎ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ Π½Π° ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΈΡ ΡΠ°ΠΉΡ
-
ΠΏΠΎΠ»ΡΡΠ°Π²Π°Ρ Π΄Π°Π½Π½ΠΈ ΠΎΡ
-
clickhouse
-
Postgres
-
MySQL
-
ΠΏΡΠΎΠΌΠ΅ΡΠ΅ΠΉ
-
ΠΠΎΠΊΠΈ
-
-
ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° ΠΈΠ·Π²Π΅ΡΡΠΈΡ Π΄ΠΎ ΠΊΠ°Π½Π°Π»ΠΈ
-
Π·Π°ΡΡΠΎΠΉ
-
ΡΠ΅Π»Π΅Π³ΡΠ°ΠΌΠ°
-
Syslog
-
ΡΠ²Π΅Π΄ΠΎΠΌΡΠ²Π°Π½Π΅ (ΠΈΠ·Π²Π΅ΡΡΠΈΡ ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π° Π²Π°ΡΠΈΡ ΠΊΠΎΠΌΠΏΡΡΡΡ)
-
Π΅Π»Π΅ΠΊΡΡΠΎΠ½Π½Π° ΠΏΠΎΡΠ°
-
ΡΠ°Π·Π΄ΠΎΡ
-
-
ΠΈΠ·Π³ΡΠ°Π΄Π΅ΡΠ΅ Π³ΡΠ°ΡΠΈΠΊΠΈ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° Π²Π°ΡΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ, ΠΊΠ°ΡΠ΅ΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π² ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎ Ρ S3 Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΈ Π³ΠΎ ΠΏΡΠΈΠΊΠ°ΡΠ΅ΡΠ΅ ΠΊΡΠΌ ΠΈΠ·Π²Π΅ΡΡΠΈΡΡΠ° (
ΠΡΠΈΠΌΠ΅Ρ ΡΡΡ ΡΠ½ΠΈΠΌΠΊΠΈ ) -
Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΎΠ±ΠΌΠ΅Π½ΡΡΠ΅ Π΄Π°Π½Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ - Π³Π»ΠΎΠ±Π°Π»Π½ΠΎ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ»ΡΡ/ΡΡΠΎΠΉΠ½ΠΎΡΡ
-
Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² Lua ΠΈ Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Π² ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ (ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ lua Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ json, csv)
-
ΠΈΠ·ΠΏΡΠ°ΡΠ°ΠΉΡΠ΅ HTTP Π·Π°ΡΠ²ΠΊΠΈ ΠΎΡ Π²Π°ΡΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ (ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΡΠ΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅)
-
ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ API (Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π΅Π½, ΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π±ΠΈΡ ΠΌΠ΅ ΠΈΡΠΊΠ°Π»ΠΈ)
-
Π΅ΠΊΡΠΏΠΎΡΡΠΈΡΠ° ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π²ΡΠ² ΡΠΎΡΠΌΠ°Ρ Prometheus
ΠΠ°ΠΊΠ²ΠΎ Π΄ΡΡΠ³ΠΎ Π±ΠΈΡ ΡΠ΅ ΠΈΡΠΊΠ°Π»ΠΈ Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠ°Π²ΠΈΡΠ΅?
ΠΠ΅ΡΠ΅ Π΅ ΡΡΠ½ΠΎ, ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ ΠΈ Π½ΠΈΠ΅ ΠΈΡΠΊΠ°ΠΌΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π΄Π° ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°ΠΌΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° Cron. Π’ΠΎΠ²Π° ΡΠ΅ Π±ΡΠ΄Π΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΎ ΠΏΡΠ΅Π΄ΠΈ Π²Π΅ΡΡΠΈΡ v1.0.0
ΠΠΈΡ ΠΈΡΠΊΠ°Π» Π΄Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΠΌ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΈ ΠΊΠ°Π½Π°Π»ΠΈ Π·Π° Π΄ΠΎΡΡΠ°Π²ΠΊΠ° Π½Π° ΠΈΠ·Π²Π΅ΡΡΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½ΡΠΊΠΎΠΉ ΡΡΡ ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ ΡΠ΅ ΠΏΡΠΎΠΏΡΡΠ½Π΅ MongoDB. ΠΠ»Π°ΡΡΠΈΡΠ½ΠΎ ΡΡΡΡΠ΅Π½Π΅ Π·Π° Π½ΡΠΊΠΎΠΈ. ΠΠ·ΠΏΡΠ°ΡΠ°ΠΉΡΠ΅ SMS ΠΈ/ΠΈΠ»ΠΈ ΠΏΡΠΎΠ²Π΅ΠΆΠ΄Π°ΠΉΡΠ΅ ΠΎΠ±Π°ΠΆΠ΄Π°Π½ΠΈΡ Π΄ΠΎ ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈΡ ΡΠΈ ΡΠ΅Π»Π΅ΡΠΎΠ½. ΠΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ Π½Π΅ ΡΠ°ΠΌΠΎ ΠΎΡ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, Π½ΠΎ ΠΈ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΡ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ. Π ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΠΈΡΠΊΠ°ΠΌΠ΅ ΠΏΠΎ-ΡΠ΄ΠΎΠ±Π΅Π½ Π·Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ ΡΠ΅Π±ΡΠ°ΠΉΡ ΠΈ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π·Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°.
ΠΡΠΊΠΎΠΉ Π²ΠΈΠ½Π°Π³ΠΈ ΠΏΡΠΎΠΏΡΡΠΊΠ° Π½Π΅ΡΠΎ) Π’ΡΠΊ ΡΠ°Π·ΡΠΈΡΠ°ΠΌΠ΅ Π½Π° ΠΈΡΠΊΠ°Π½Π΅ΡΠΎ Π½Π° ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ°, Π·Π° Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΈΡΠ΅. Π Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ° Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ° Π²ΡΠΈΡΠΊΠΎ
Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅
Π Π΄ΠΎΠ±ΡΠ΅ Π΄ΠΎΡΠ»ΠΈ Ρ Π²Π°ΡΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈ PR.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com