ML/MLOps Engineer
Metrics Monitoring and Alerting system (๋ฒˆ์—ญ)

Metrics Monitoring and Alerting system ์„ ์ฝ๊ณ  ๋ฒˆ์—ญํ•˜์˜€์Šต๋‹ˆ๋‹ค.

ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋ฉ”ํŠธ๋ฆญ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•˜์—ฌ ์‹œ์Šคํ…œ ์ƒ์—์„œ ๊ด€์ธก ๊ฐ€๋Šฅํ•œ ๋ฉ”ํŠธ๋ฆญ(metric)๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์— ๋”ฐ๋ฅธ ์‚ฌ์šฉ์ž ์ •์˜ ๋ฉ”ํŠธ๋ฆญ๋„ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ ๋ฉ”ํŠธ๋ฆญ ์˜ˆ์‹œ

  1. CPU ๋ถ€ํ•˜
  2. ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰
  3. ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰
  4. RPC ์„œ๋น„์Šค์˜ ์ดˆ๋‹น ์š”์ฒญ ์ˆ˜
  5. RPC ์„œ๋น„์Šค ์ง€์—ฐ ์‹œ๊ฐ„

RPC๋Š” ์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ(Remote Procedure Call)์„ ๋œปํ•˜๋ฉฐ, ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹  ๊ธฐ์ˆ  ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. RPC๋ฅผ ์ด์šฉํ•˜๋ฉด, ๋ณ„๋„์˜ ์›๊ฒฉ ์ œ์–ด ์ฝ”๋”ฉ ์—†์ด ๋‹ค๋ฅธ ์ฃผ์†Œ ๊ณต๊ฐ„์—์„œ ํ•จ์ˆ˜๋‚˜ ํ”„๋กœ์‹œ์ €๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
RPC์˜ ์ฃผ์š” ํŠน์ง•

  • ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค ๊ฐ„์— ์›๊ฒฉ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ—ˆ์šฉ
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰ ํ”„๋กœ๊ทธ๋žจ์— ๋กœ์ปฌ ์œ„์น˜์— ์žˆ๋“  ์›๊ฒฉ ์œ„์น˜์— ์žˆ๋“  ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • API ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•œ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๊ณ  ์˜ค๋ž˜๋œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜

์‚ฌ์šฉ์ž ์ •์˜ ๋ฉ”ํŠธ๋ฆญ ์˜ˆ์‹œ

  1. ์ง€์—ญ(locale)๋ณ„ ์‚ฌ์šฉ์ž ์ˆ˜
  2. ์—”๋“œ ํˆฌ ์—”๋“œ ๋ฉ”์‹œ์ง€ ์ „์†ก ์ง€์—ฐ ์‹œ๊ฐ„: ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€์˜ ๋ฉ”์‹œ์ง€ ์ „์†ก ์‹œ์ž‘ ์‹œ๊ฐ„~์ˆ˜์‹ ์ž์—๊ฒŒ ์ „๋‹ฌ๋œ ์‹œ๊ฐ„

์‹œ์Šคํ…œ์€ ๋ฉ”ํŠธ๋ฆญ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฒฝ๊ณ ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ฒฝ๊ณ  ์˜ˆ์‹œ

  1. RPC ์˜ค๋ฅ˜ ๋น„์œจ์ด ์ž„๊ณ„๊ฐ’์„ ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ ๊ฒฝ๊ณ  ์ƒ์„ฑ
  2. ์„œ๋ฒ„์˜ CPU ์‚ฌ์šฉ๋Ÿ‰์ด ์ž„๊ณ„๊ฐ’์„ ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ ๊ฒฝ๊ณ  ์ƒ์„ฑ
  3. ๋กœ๊ทธ์ธ ์žฌ์‹œ๋„ ํšŸ์ˆ˜๋ฅผ ์นด์šดํŠธํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๋ฉ”ํŠธ๋ฆญ์ด ์ œํ•œ์„ ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ ๊ฒฝ๊ณ ๋ฅผ ์ƒ์„ฑ

์ด๋Ÿฌํ•œ ๊ฒฝ๊ณ ๋Š” ์ด๋ฉ”์ผ, ํœด๋Œ€ํฐ ๋ฌธ์ž ๋ฉ”์‹œ์ง€, PagerDuty, ๋˜๋Š” ์›นํ›… HTTP ํ˜ธ์ถœ๋กœ ์ „์†ก๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ : ์ด ์„ค๊ณ„์—์„œ๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์ด ์ˆ˜์ง‘ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฒฝ๊ณ ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. ๊ฒฝ๊ณ ๋Š” ์„œ๋ฒ„ ๋กœ๊ทธ๋‚˜ ์•ก์„ธ์Šค ๋กœ๊ทธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

High level system design


ํ•„์š”ํ•œ ๊ตฌ์„ฑ ์š”์†Œ

  • ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘: ๋‹ค์–‘ํ•œ ์†Œ์Šค์—์„œ ๋ฉ”ํŠธ๋ฆญ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘
  • ๋ฐ์ดํ„ฐ ์ „์†ก: ์†Œ์Šค์—์„œ ๋ฉ”ํŠธ๋ฆญ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†ก
  • ๋ฐ์ดํ„ฐ ์ €์žฅ: ๋ฉ”ํŠธ๋ฆญ ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ์ €์žฅ
  • ์ฟผ๋ฆฌ ์„œ๋น„์Šค: ๋ฉ”ํŠธ๋ฆญ ๋ฐ์ดํ„ฐ๋ฅผ ์ฟผ๋ฆฌ
  • ์‹œ๊ฐํ™”: ์‹ค์‹œ๊ฐ„ ๋ฐ ๊ณผ๊ฑฐ ๋ฉ”ํŠธ๋ฆญ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์–‘ํ•œ ๊ทธ๋ž˜ํ”„์™€ ์ฐจํŠธ๋กœ ์‹œ๊ฐํ™”
  • ๊ฒฝ๊ณ : ๋ฐ์ดํ„ฐ์— ๊ทœ์น™์„ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฝ๊ณ ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํ†ต์‹  ์ฑ„๋„๋กœ ์•Œ๋ฆผ์„ ๋ณด๋ƒ„Data collection and transmitting to monitoring system
  1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ฉ”ํŠธ๋ฆญ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ณด๋‚ด๋„๋ก ์ˆ˜์ •๋ฉ๋‹ˆ๋‹ค.
  2. ๊ฐ ์„œ๋ฒ„์— ๋ฉ”ํŠธ๋ฆญ ์—์ด์ „ํŠธ๋ฅผ ์„ค์น˜ํ•˜์—ฌ ๋ฉ”ํŠธ๋ฆญ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.
  3. ์—์ด์ „ํŠธ๋Š” ๋กœ์ปฌ ๋ฒ„ํผ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ, ๋ฒ„ํผ๊ฐ€ ๊ฐ€๋“ ์ฐจ๋ฉด UDP ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฐ์น˜(batch) ํ˜•ํƒœ๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์— ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
  4. TCP๋ณด๋‹ค UDP ํ”„๋กœํ† ์ฝœ์„ ์„ ํ˜ธํ•˜๋Š” ์ด์œ ๋Š” ์ง€์—ฐ ์‹œ๊ฐ„์ด ๋‚ฎ๊ณ  ๋ฐ์ดํ„ฐ ์†์‹ค ์œ„ํ—˜์ด ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.Data model for storage๋ฉ”ํŠธ๋ฆญ ๋ฐ์ดํ„ฐ๋Š” ์†Œ์Šค์—์„œ ํŠน์ • ํƒ€์ž„์Šคํƒฌํ”„์™€ ํ•จ๊ป˜ ์ƒ์„ฑ๋˜๋Š” ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.
  5. ์„œ๋ฒ„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ: server_user, job_name, machine_name, process_id ๋“ฑ ์„œ๋ฒ„ ๊ด€๋ จ ์ •๋ณด
  6. ๋ฉ”ํŠธ๋ฆญ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ: metric_name ๋ฐ ๊ธฐํƒ€ ์‚ฌ์šฉ์ž ์ •์˜ ํƒœ๊ทธ(์˜ˆ: client_type, language ๋“ฑ)
  7. ๋ฉ”ํŠธ๋ฆญ ๊ฐ’: ๋ฉ”ํŠธ๋ฆญ์˜ ์‹œ๊ณ„์—ด ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋ˆ„์ (cumulative) ๋˜๋Š” ๋น„๋ˆ„์ (non-cumulative)์ผ ์ˆ˜ ์žˆ์Œ

๋ชจ๋“  ๋ฉ”ํŠธ๋ฆญ์€ ์ž์ฒด ํ…Œ์ด๋ธ”์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ํ–‰์€ ์„œ๋ฒ„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ๋ฉ”ํŠธ๋ฆญ ํƒœ๊ทธ์˜ ํŠน์ • ์กฐํ•ฉ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์ž…๋‹ˆ๋‹ค.

/search/counter ๋ฉ”ํŠธ๋ฆญ์˜ ์Šคํ‚ค๋งˆ ์˜ˆ์ œ:

ServerUser JobName MachineName ProcessId ClientType Language /search/counter  
xxxx        yyyy    zzzz        1         Web        EN      t1:xx,t2:xxx,t3:xx  
xxxx        yyyy    zzzz        1         iOS        EN      t1:xx,t2:xxx,t3:xx  
xxxx        yyyy    zzzz        1         Android    EN      t1:xx,t2:xxx,t3:xx

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํŠน์ • ๊ฐ„๊ฒฉ์œผ๋กœ ๊ฐ’์„ ๊ธฐ๋กํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด ๋ฐ์ดํ„ฐ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ํƒ€์ž„์Šคํƒฌํ”„์—์„œ ๊ธฐ๋ก๋˜๋Š” ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์ž…๋‹ˆ๋‹ค.

/search/counter ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ ์˜ˆ์ œ:

  1. ๊ฐ ํ–‰์€ ํŠน์ • ํƒ€์ž„์Šคํƒฌํ”„์—์„œ ์ˆ˜์ง‘๋œ ๊ฐ’์„ ํฌํ•จํ•œ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์ž…๋‹ˆ๋‹ค.
  2. ์ด ์˜ˆ์ œ์—์„œ ๊ฐ’์€ ์ฆ๊ฐ€ํ•˜์ง€๋งŒ, ๋ฐ์ดํ„ฐ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๊ฐ’์ด ์ฆ๊ฐ€ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ ํƒ€์ž…
  • Boolean
  • Int64
  • Double
  • String
  • Tuple
  • Distribution

ํƒ€์ž…์€ ์•„๋ž˜์™€ ๊ฐ™์ด ๋‹ค์‹œ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋น„๋ˆ„์ (Non-cumulative): String ๋˜๋Š” Boolean์€ ํ•ญ์ƒ ๋น„๋ˆ„์ ์ž…๋‹ˆ๋‹ค. ์ˆซ์ž(Number) ๊ฐ’๋„ ๋น„๋ˆ„์ ์ผ ์ˆ˜ ์žˆ์Œ. ์˜ˆ: RPC ์ง€์—ฐ ์‹œ๊ฐ„(RPC latency).
  2. ๋ˆ„์ (Cumulative): ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜๋ช… ๋™์•ˆ ๊ฐ’์ด ์ ˆ๋Œ€ ๊ฐ์†Œํ•˜์ง€ ์•Š๋Š” ๋ฉ”ํŠธ๋ฆญ์ž…๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ ์žฌ์‹œ์ž‘๋˜์—ˆ์„ ๋•Œ๋งŒ ์ดˆ๊ธฐํ™”. ์˜ˆ: ํ•จ์ˆ˜๊ฐ€ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ํšŸ์ˆ˜๋ฅผ ์นด์šดํŠธํ•˜๋Š” ๋ฉ”ํŠธ๋ฆญ์€ ํ”„๋กœ์„ธ์Šค ์ˆ˜๋ช… ๋™์•ˆ ๊ฐ์†Œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ถ„ํฌ ๋ฐ์ดํ„ฐ ํƒ€์ž…(Distribution Data Type)

  1. ๋ถ„ํฌ(Distribution) ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ ๋ฉ”ํŠธ๋ฆญ ์‹œ์Šคํ…œ์— ๊ณ ์œ ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ž…๋‹ˆ๋‹ค.
  2. ํŠน์ • ๊ฐ’์„ ์—ฌ๋Ÿฌ ๋ฒ”์œ„(๋ฒ„ํ‚ท)๋กœ ๋‚˜๋ˆ„๋Š” ํžˆ์Šคํ† ๊ทธ๋žจ์„ ํฌํ•จ
  3. ๊ฐ ๋ฒ„ํ‚ท์€ ํ•ฉ๊ณ„(sum), ํ‰๊ท (mean), ๊ฐœ์ˆ˜(count), ํ‘œ์ค€ํŽธ์ฐจ(standard deviation) ๋“ฑ์˜ ํ†ต๊ณ„๊ฐ’์„ ์š”์•ฝํ•˜์—ฌ ์ €์žฅ
  4. ๋””๋ฒ„๊น… ๋ชฉ์ ์œผ๋กœ ๋ฒ„ํ‚ท๋ณ„๋กœ ์˜ˆ์ œ ๊ฐ’์„ ํฌํ•จํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถ„ํฌ ๋ฐ์ดํ„ฐ ํƒ€์ž…์—์„œ ๋ˆ„์ (Cumulative)๊ณผ ๋น„๋ˆ„์ (Non-Cumulative)์˜ ์ฐจ์ด

Streams:(00:01,0.3)(00.01,0.5)(00.01,1.8)(00:02,0.3)(00:02,0.5)(00:02,2.7)  

Non Cumulative distributions:  
Bucket T0 T0+1m T0+2m  
[0,1) 0 2 2  
[1,2) 0 1 0  
[2,4) 0 0 1  

Cumulative distributions:  
Bucket T0 T0+1m T0+2m  
[0,1) 0 2 4  
[1,2) 0 1 1  
[2,4) 0 0 1

Data storage system

๋ฉ”ํŠธ๋ฆญ ๋ฐ์ดํ„ฐ๋Š” ์Šคํ‚ค๋งˆ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ์ด๋ฉด์„œ ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. ๊ฒฝ๊ณ  ์‹œ์Šคํ…œ์€ ๋ฉ”ํŠธ๋ฆญ ์ €์žฅ์†Œ์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ €์žฅ ์‹œ์Šคํ…œ์€ ๋น ๋ฅด๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ๊ธฐ๋กํ•˜๋Š” ๋Œ€์‹  ์ธ๋ฉ”๋ชจ๋ฆฌ(in-memory) ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ๋ฅผ ์œ„ํ•ด ๋””์Šคํฌ์— ๊ธฐ๋กํ•˜๋Š” ๊ธฐ๋Šฅ์€ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ์žƒ์–ด๋„ ๊ดœ์ฐฎ์œผ๋ฏ€๋กœ ๋ณต๊ตฌ ๋กœ๊ทธ๋ฅผ ์“ธ ๋•Œ ํ™•์ธ(acknowledge)์„ ๊ธฐ๋‹ค๋ฆด ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

Intra zone setup

๊ณ ๋„๋กœ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ์€ ์ง€๋ฆฌ์ ์œผ๋กœ ๋ถ„์‚ฐ๋œ ๋‹ค์ˆ˜์˜ ์กด์— ์„ค์น˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (์‚ฌ์šฉ์ž ์ง€์›, ์ฒ˜๋ฆฌ๋Ÿ‰ ํ–ฅ์ƒ, ์‹ ๋ขฐ์„ฑ ํ–ฅ์ƒ์„ ์œ„ํ•œ ๊ฒƒ). ๊ฐ ์กด์— ๋…๋ฆฝ์ ์ธ ์ง€์—ญ ๋‹จ์œ„(local unit)๋กœ ๋ฐฐํฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ ๋‹จ์œ„๋Š” ํ•ด๋‹น ์กด์—์„œ ์ƒ์„ฑ๋œ ๋ชจ๋“  ๋ฉ”ํŠธ๋ฆญ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ํ™•์‚ฐ(ingestion fanout)์„ ํฌ๊ฒŒ ์ค„์ž…๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ ์‹คํ–‰ ์‹œ ๋ชจ๋“  ๊ฐ€์šฉํ•œ ์กด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•œ ๋’ค ๋‹จ์ผ ์ถœ๋ ฅ(single output)์œผ๋กœ ์‘๋‹ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋Š” ์ผ๋ถ€ ์กด์˜ ์œ ๋‹›์ด ์‹คํŒจํ•ด๋„ ๋ฉ”ํŠธ๋ฆญ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ์ด ์ค‘๋‹จ๋˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

Ingestion fanout์€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋˜๋Š” ์ „์†ก ๊ณผ์ •์—์„œ ๋‹จ์ผ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋กœ๋ถ€ํ„ฐ ์—ฌ๋Ÿฌ ๋ชฉ์ ์ง€(destination) ๋˜๋Š” ์ฒ˜๋ฆฌ ๊ฒฝ๋กœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ๋ถ„๋ฐฐํ•˜๋Š” ํŒจํ„ด์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒจํ„ด์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ „์†กํ•˜๊ฑฐ๋‚˜ ์ฒ˜๋ฆฌํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ณ  ํ™•์žฅ์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  1. ๋ฐ์ดํ„ฐ ๋ณต์ œ: ์›๋ณธ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ๋ชฉ์ ์ง€๋กœ ๋™์‹œ์— ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ: ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์–‘ํ•œ ์ฒ˜๋ฆฌ ๊ฒฝ๋กœ์—์„œ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์œ ์—ฐ์„ฑ: ์—ฌ๋Ÿฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ์„œ๋น„์Šค๊ฐ€ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•„์š”๋กœ ํ•  ๋•Œ ํšจ์œจ์ ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Aggregation using bucket and admission window

Storage layer๋Š” sliding admission window์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„ํ‚ท์˜ ์ข…๋ฃŒ ์‹œ๊ฐ„์ด admission window์—์„œ ๋ฒ—์–ด๋‚˜๋ฉด ํ•ด๋‹น ๋ฒ„ํ‚ท์€ ํ™•์ •(finalized)๋ฉ๋‹ˆ๋‹ค. ์ง‘๊ณ„๋œ ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ๋Š” ์ธ๋ฉ”๋ชจ๋ฆฌ ์ €์žฅ์†Œ์™€ ๋ณต๊ตฌ ๋กœ๊ทธ์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ ์˜ค์ฐจ(clock skew)๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด TrueTime์„ ์‚ฌ์šฉํ•˜์—ฌ deltas, buckets, admission window.์— ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Query Engine


๋ฉ”ํŠธ๋ฆญ ๋ฐ์ดํ„ฐ๋ฅผ ์ฟผ๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ฟผ๋ฆฌ ์—”์ง„์„ ๊ตฌ์ถ•ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ ์—”์ง„์€ ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ฝ๊ณ  ๊ฒฝ๊ณ  ๋˜๋Š” ์‹œ๊ฐํ™”์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋Š” ์—ฌ๋Ÿฌ ๋…ธ๋“œ์™€ ์กด์— ๊ฑธ์ณ ๋ถ„์‚ฐ ์ €์žฅ๋˜๋ฏ€๋กœ, ๊ฐ ์ฟผ๋ฆฌ๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ ํƒ์ƒ‰๊ธฐ(leaf nodes finder)๋ฅผ ํ†ตํ•ด ๋ฆฌํ”„ ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

 

SQL ์Šคํƒ€์ผ ์ฟผ๋ฆฌ ์˜ˆ์ œ:

{  
  fetch ComputeTask::/rpc/server/latency  
    | fitler user=="app-user"  
    | align delta(1h)  
; fetch ComputeTask::/build/lable  
    | filter user=="app-user" && job="prod-00-us"  
} | join  
  | group_by [label], aggregate(latency)

์ฟผ๋ฆฌ ์ถœ๋ ฅ ์˜ˆ์‹œ:

Sharding

๋ ˆํ‚ค์‹œ์ฝ”๊ทธ๋ž˜ํ”ฝ ์ƒค๋”ฉ(lexicographic sharding)์€ ํŠน์ • ์Šคํ‚ค๋งˆ์™€ ๊ด€๋ จ๋œ ํ‚ค ์—ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์กด ๋‚ด ๋ฐ์ดํ„ฐ๋ฅผ ์ƒค๋”ฉํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ComputeTask::sql-dba::db.server::aa::0876๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํƒ€๊ฒŸ ๋ฒ”์œ„(target range)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฟผ๋ฆฌ ๋‚ด ์ธ์ ‘ ํƒ€๊ฒŸ ๊ฐ„ ํšจ์œจ์ ์ธ ์ง‘๊ณ„์™€ ๋ฆฌํ”„ ๋…ธ๋“œ ๊ฐ„ ๋ถ€ํ•˜ ๋ถ„์‚ฐ(load balancing)์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฝ๊ณ  ์‹œ์Šคํ…œ(Alerting System)


๊ฒฝ๊ณ  ์‹œ์Šคํ…œ์€ ์ฃผ์š” ๋„ค ๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค:

  1. ๊ทœ์น™ ๊ตฌ์„ฑ(Rules Config): ๋ฉ”ํŠธ๋ฆญ ํ‰๊ฐ€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฒฝ๊ณ ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ์‚ฌ์ „ ์ •์˜๋œ ๊ทœ์น™์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ฒฝ๊ณ  ๊ด€๋ฆฌ์ž(Alert Manager): ๊ทœ์น™์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋ฉฐ ์ด์ƒ์ด ๊ฐ์ง€๋˜๋ฉด ์ด๋ฒคํŠธ๋ฅผ ํ(Queue)์— ๊ฒŒ์‹œํ•ด ๊ณ ๊ฐ์—๊ฒŒ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.
  3. ๊ฒฝ๊ณ  ์†Œ๋น„์ž(Alert Consumer): ํ์—์„œ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ , ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ†ต์‹  ์ฑ„๋„์„ ํ†ตํ•ด ์ˆ˜์‹ ์ž์—๊ฒŒ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  4. ํ†ต์‹  ์ฑ„๋„(Communication Channel): ์ด๋ฉ”์ผ, ๋ฌธ์ž ๋ฉ”์‹œ์ง€, PageDuety, Webhooks ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค

์‹œ๊ฐํ™” ์‹œ์Šคํ…œ(Visualization System)

์‹œ๊ฐํ™” ์‹œ์Šคํ…œ์€ ์ฟผ๋ฆฌ ์—”์ง„ ์œ„์— ๊ตฌ์ถ•๋˜๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  1. ํŠน์ • ๋ฉ”ํŠธ๋ฆญ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  2. ์‹œ๊ฐ„ ๋ฒ”์œ„ ๋ฐ ์‚ฌ์šฉ์ž ์ •์˜ ํƒœ๊ทธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ฉ”ํŠธ๋ฆญ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ž˜ํ”„๋กœ ์‹œ๊ฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

Reference

์ œ์•ˆ๋œ ์‹œ์Šคํ…œ ์„ค๊ณ„๋Š” Google์˜ Monarch ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”ํŠธ๋ฆญ ๋ฐ ๊ฒฝ๊ณ  ์‹œ์Šคํ…œ์— ๋Œ€ํ•ด ๋” ๊นŠ์ด ์ดํ•ดํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ ๋…ผ๋ฌธ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”. Monarch: Google’s Planet-Scale In-Memory