๋ณต์žกํ•œ ๊ฒฝ๊ณ ๋กœ ์‰ฝ๊ฒŒ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” Balerter ์ฐฝ์กฐ์˜ ์—ญ์‚ฌ

๋ณต์žกํ•œ ๊ฒฝ๊ณ ๋กœ ์‰ฝ๊ฒŒ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” Balerter ์ฐฝ์กฐ์˜ ์—ญ์‚ฌ

๋ชจ๋‘๊ฐ€ ์•Œ๋ฆผ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์•‰์•„์„œ ๊ทธ๋ž˜ํ”„๋ฅผ ๋ณด๊ณ  ์ด์ƒ ํ˜„์ƒ์„ ์ฐพ๋Š” ๊ฒƒ๋ณด๋‹ค ์–ด๋–ค ์ผ์ด ๋ฐœ์ƒ(๋˜๋Š” ์ˆ˜์ •)๋˜์—ˆ์„ ๋•Œ ์•Œ๋ฆผ์„ ๋ฐ›๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋‚ซ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด ๋งŽ์€ ๋„๊ตฌ๊ฐ€ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. Prometheus ์ƒํƒœ๊ณ„์˜ Alertmanager์™€ VictoriaMetrics ์ œํ’ˆ ๊ทธ๋ฃน์˜ vmalert์ž…๋‹ˆ๋‹ค. Grafana์˜ Zabbix ์•Œ๋ฆผ ๋ฐ ๊ฒฝ๊ณ . ์ •๊ธฐ์ ์œผ๋กœ ์ผ๋ถ€ URL์„ ๊ฐ€์ ธ์™€์„œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ๋Š” bash ๋ฐ Telegram ๋ด‡์˜ ์ž์ฒด ์ž‘์„ฑ ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ.

์šฐ๋ฆฌ ํšŒ์‚ฌ์—์„œ๋„ ๋ณต์žกํ•œ ๋ณตํ•ฉ ๊ฒฝ๊ณ ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋ณต์žกํ•˜๊ฑฐ๋‚˜ ๋ถˆ๊ฐ€๋Šฅํ•  ๋•Œ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์›ํ–ˆ๋˜ ๊ฒƒ๊ณผ ๊ฒฐ๊ตญ ํ•˜๊ฒŒ ๋œ ๊ฒƒ์€ ์ปท ์•„๋ž˜์— ์žˆ์Šต๋‹ˆ๋‹ค. TLDR: ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋Š” ์ด๋ ‡๊ฒŒ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค ๋ฐœ๋ ˆํ„ฐ

๊ฝค ์˜ค๋žซ๋™์•ˆ ์šฐ๋ฆฌ๋Š” Grafana์— ๊ตฌ์„ฑ๋œ ๊ฒฝ๊ณ ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž˜ ์‚ด์•˜์Šต๋‹ˆ๋‹ค. ์˜ˆ, ์ด๊ฒƒ์ด ์ตœ์„ ์˜ ๋ฐฉ๋ฒ•์€ ์•„๋‹™๋‹ˆ๋‹ค. ํ•ญ์ƒ Alertmanager์™€ ๊ฐ™์€ ์ผ๋ถ€ ํŠน์ˆ˜ ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ํ•œ ๋ฒˆ ์ด์ƒ ์›€์ง์ด๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ ์ฐจ ์šฐ๋ฆฌ๋Š” ๋” ๋งŽ์€ ๊ฒƒ์„ ์›ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํŠน์ • ์ฐจํŠธ๊ฐ€ XX% ํ•˜๋ฝ/์ฆ๊ฐ€ํ–ˆ๊ณ  ์ด์ „ M์‹œ๊ฐ„์— ๋น„ํ•ด N๋ถ„ ๋™์•ˆ ๋จธ๋ฌผ๋ €๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด์„ธ์š”. Grafana๋‚˜ Alertmanager๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์ง€๋งŒ ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (๋˜๋Š” ๋ถˆ๊ฐ€๋Šฅํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ๋งํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค)

๋‹ค์–‘ํ•œ ์†Œ์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฒฝ๊ณ  ๊ฒฐ์ •์„ ๋‚ด๋ ค์•ผ ํ•˜๋ฉด ์ƒํ™ฉ์€ ๋”์šฑ ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค. ์‹ค์ œ ์˜ˆ:

๋‘ ๊ฐœ์˜ Clickhouse ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•œ ๋‹ค์Œ ์ด๋ฅผ Postgres์˜ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ์™€ ๋น„๊ตํ•˜๊ณ  ๊ฒฝ๊ณ ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ด๊ฑฐ๋‚˜ ์ทจ์†Œํ•˜์„ธ์š”

์šฐ๋ฆฌ๋Š” ์šฐ๋ฆฌ์˜ ๊ฒฐ์ •์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด ๋ณด๊ณ  ์‹ถ์€ ๋น„์Šทํ•œ ์š•๊ตฌ๋ฅผ ๊ฝค ๋งŽ์ด ์ถ•์ ํ•ด ์™”์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์•„์ง ์ƒ์„ฑ๋˜์ง€ ์•Š์€ ์ด ์„œ๋น„์Šค์˜ ์ฒซ ๋ฒˆ์งธ ์š”๊ตฌ ์‚ฌํ•ญ/๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ์ปดํŒŒ์ผํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์†Œ์Šค์— ์•ก์„ธ์Šคํ•˜์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค, ํด๋ฆญํ•˜์šฐ์Šค, ํฌ์ŠคํŠธ๊ทธ๋ ˆ์Šค

  • ํ…”๋ ˆ๊ทธ๋žจ, ์Šฌ๋ž™ ๋“ฑ ๋‹ค์–‘ํ•œ ์ฑ„๋„๋กœ ์•Œ๋ฆผ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

  • ์ƒ๊ฐํ•˜๋Š” ๊ณผ์ •์—์„œ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์€ ์„ ์–ธ์ ์ธ ์„ค๋ช…์ด ์•„๋‹ˆ๋ผ ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ ๋Šฅ๋ ฅ์ด๋ผ๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

  • ์ผ์ •์— ๋”ฐ๋ผ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰

  • ์„œ๋น„์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์ง€ ์•Š๊ณ ๋„ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‰ฝ๊ฒŒ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์†Œ์Šค ์ฝ”๋“œ์—์„œ ์„œ๋น„์Šค๋ฅผ ๋‹ค์‹œ ๊ตฌ์ถ•ํ•˜์ง€ ์•Š๊ณ ๋„ ์–ด๋–ป๊ฒŒ๋“  ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ

์ด ๋ชฉ๋ก์€ ๋Œ€๋žต์ ์ธ ๊ฒƒ์ด๋ฉฐ ์ •ํ™•ํ•˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์ ์€ ๋ฐ”๋€Œ์—ˆ๊ณ , ์–ด๋–ค ์ ์€ ์ฃฝ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ํ‰์†Œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค ๋ฐœ๋ ˆํ„ฐ์˜ ์—ญ์‚ฌ๋Š” ์ด๋ ‡๊ฒŒ ์‹œ์ž‘๋๋‹ค.

๋ณต์žกํ•œ ๊ฒฝ๊ณ ๋กœ ์‰ฝ๊ฒŒ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” Balerter ์ฐฝ์กฐ์˜ ์—ญ์‚ฌ

๊ฒฐ๊ตญ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚ฌ๊ณ  ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. (๋„ค, ๋ฌผ๋ก  ์ด๊ฒŒ ๋์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ œํ’ˆ ๊ฐœ๋ฐœ ๊ณ„ํš๋„ ๋งŽ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ์ด๋งŒ ๋งˆ์น˜๊ฒ ์Šต๋‹ˆ๋‹ค)

์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

Prometheus, Clickhouse ๋“ฑ์— ์š”์ฒญ์„ ๋ช…์‹œ์ ์œผ๋กœ ๋ณด๋‚ด๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ Lua์—์„œ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋‹ต๋ณ€์„ ๋ฐ›๊ณ  ์–ด๋–ป๊ฒŒ๋“  ์ฒ˜๋ฆฌํ•˜๊ณ  ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ผ์ข…์˜ ๊ฒฝ๊ณ ๋ฅผ ์ผœ๊ฑฐ๋‚˜ ๋•๋‹ˆ๋‹ค. 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์šฉ, ๋กœ๊ทธ ํ‘œ์‹œ์šฉ, ํ…Œ์ŠคํŠธ์šฉ)

  • ๋กœ๊ทธ ์ถœ๋ ฅ์šฉ ๋ชจ๋“ˆ ์—ฐ๊ฒฐ

  • ์ด๋ฆ„์ด ์žˆ๋Š” ํด๋ฆญํ•˜์šฐ์Šค์— ์•ก์„ธ์Šคํ•˜๋ ค๋ฉด ๋ชจ๋“ˆ์„ ์—ฐ๊ฒฐํ•˜์„ธ์š”. 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 ะฝะต ะฑั‹ะป ะพั‚ะบะปัŽั‡ะตะฝ (success)

Balerter๋Š” ๋˜ ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

์ œ ์ƒ๊ฐ์—๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ Balerter ๊ธฐ์ˆ ์— ๋Œ€ํ•ด ๋‹ค๋ฃจ๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ ๋ชจ๋“  ๋‚ด์šฉ์„ ์ž์„ธํžˆ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค https://balerter.com

  • ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜๋‹ค

    • ํด๋ฆญํ•˜์šฐ์Šค

    • ํฌ์ŠคํŠธ ๊ทธ๋ ˆ์Šค

    • MySQL์€

    • ํ”„๋กœ ๋ฉ”ํ…Œ์šฐ์Šค

    • ๋กœํ‚ค

  • ์ฑ„๋„์— ์•Œ๋ฆผ ๋ณด๋‚ด๊ธฐ

    • ๋Š์Šจํ•˜๊ฒŒ

    • ์ „๋ณด

    • syslog

    • ์•Œ๋ฆผ(์ปดํ“จํ„ฐ์˜ UI ์•Œ๋ฆผ)

    • ์ด๋ฉ”์ผ

    • ๋ถˆ์ผ์น˜

  • ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ์ž‘์„ฑํ•˜๊ณ  S3 ํ˜ธํ™˜ ์Šคํ† ๋ฆฌ์ง€์— ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•œ ํ›„ ์•Œ๋ฆผ์— ์ฒจ๋ถ€ํ•ฉ๋‹ˆ๋‹ค(์‚ฌ์ง„์˜ ์˜ˆ)

  • ์Šคํฌ๋ฆฝํŠธ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค - ์ „์—ญ ํ‚ค/๊ฐ’ ์ €์žฅ์†Œ

  • Lua์—์„œ ์ž์‹ ๋งŒ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์ด๋ฅผ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (๊ธฐ๋ณธ์ ์œผ๋กœ json, csv ์ž‘์—…์„ ์œ„ํ•ด lua ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.)

  • ์Šคํฌ๋ฆฝํŠธ์—์„œ HTTP ์š”์ฒญ ๋ณด๋‚ด๊ธฐ(๋ฌผ๋ก  ์‘๋‹ต ๋ฐ›๊ธฐ)

  • API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค(์•„์ง ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋งŒํผ ๊ธฐ๋Šฅ์ ์ด์ง€ ์•Š์Œ)

  • ์ธก์ •ํ•ญ๋ชฉ์„ Prometheus ํ˜•์‹์œผ๋กœ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.

๋˜ ๋ฌด์—‡์„ ํ•˜๊ณ  ์‹ถ๋‚˜์š”?

์‚ฌ์šฉ์ž์™€ ์šฐ๋ฆฌ๊ฐ€ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์„ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๊ธฐ๋Šฅ์„ ์›ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์ด๋ฏธ ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. ํฌ๋ก . ์ด ์ž‘์—…์€ ๋ฒ„์ „ v1.0.0 ์ด์ „์— ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ ์†Œ์Šค์™€ ์•Œ๋ฆผ ์ „๋‹ฌ ์ฑ„๋„์„ ์ง€์›ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ˆ„๊ตฐ๊ฐ€๋Š” ๋ถ„๋ช…ํžˆ MongoDB๋ฅผ ๊ทธ๋ฆฌ์›Œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๋ถ€์— ๋Œ€ํ•œ ํƒ„๋ ฅ์  ๊ฒ€์ƒ‰. SMS๋ฅผ ๋ณด๋‚ด๊ฑฐ๋‚˜ ํœด๋Œ€ํฐ์œผ๋กœ ์ „ํ™”๋ฅผ ๊ฑธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํŒŒ์ผ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ์—์„œ๋„ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ์šฐ๋ฆฌ๋Š” ๋ณด๋‹ค ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ์›น์‚ฌ์ดํŠธ์™€ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋” ๋‚˜์€ ๋ฌธ์„œ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๋Š” ํ•ญ์ƒ ๋ญ”๊ฐ€๋ฅผ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.) ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ์šฐ์„  ์ˆœ์œ„๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •ํ•˜๋ผ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์š”์ฒญ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ๊ฒƒ์„ ์‹คํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๋„์›€์„ ๋ฐ›๊ธฐ ์œ„ํ•ด

๊ฒฐ๋ก ์ ์œผ๋กœ

์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ ๋ฐœ๋ ˆํ„ฐ ๋‚˜๋Š” ๊ฝค ์˜ค๋žซ๋™์•ˆ ๊ทธ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์‹ญ ๊ฐœ์˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์šฐ๋ฆฌ ๋งˆ์Œ์˜ ํ‰ํ™”๋ฅผ ์ง€์ผœ์ค๋‹ˆ๋‹ค. ์ด ์ž‘์—…์ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ท€ํ•˜์˜ ์ด์Šˆ์™€ PR์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€