Skip to content

์•Œ๋ฆผ ๊ฐœ์š” โ€‹

๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ: 2026๋…„ 9์›” 13์ผ

๊ฒ€ํ†  ๊ธฐ์ค€: Prometheus 3.14.0, Alertmanager 0.34.0. ์˜ˆ์ œ๋Š” ๋‹จ์ผ ํด๋Ÿฌ์Šคํ„ฐ ์ˆ˜์ง‘๊ณผ ์ค‘๋ณต ์ œ๊ฑฐ๋œ ์‹œ๊ณ„์—ด์„ ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ job/๋ผ๋ฒจยท์ˆ˜์ง‘๊ธฐยท์ง€ํ‘œ ๋…ธ์ถœ์„ ํ™•์ธํ•˜๊ณ  ์ž„๊ณ„๊ฐ’์„ ์กฐ์ •ํ•˜์„ธ์š”. ๋กœ์ปฌ ๊ทœ์น™ยท๋ผ์šฐํŒ… ๊ฒ€์ฆ๋งŒ ์ˆ˜ํ–‰ํ–ˆ์œผ๋ฉฐ ํด๋Ÿฌ์Šคํ„ฐ๋‚˜ ์•Œ๋ฆผ ์ฑ„๋„์€ ์‹คํ–‰ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋ชฉ์ฐจ โ€‹


์•Œ๋ฆผ์˜ ์—ญํ• ๊ณผ ์ค‘์š”์„ฑ โ€‹

๊ด€์ธก์„ฑ 3๋Œ€ ์ถ•์—์„œ ์•Œ๋ฆผ์˜ ์œ„์น˜ โ€‹

๋ฉ”ํŠธ๋ฆญยท๋กœ๊ทธยทํŠธ๋ ˆ์ด์Šค๋Š” ๊ด€์ธก์„ฑ์—์„œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์‹ ํ˜ธ์ž…๋‹ˆ๋‹ค. ํ”„๋กœํŒŒ์ผ ๋“ฑ ๋‹ค๋ฅธ ์‹ ํ˜ธ๋„ ์žˆ์œผ๋ฉฐ, ๋ชจ๋“  ๊ทœ์น™ ์—”์ง„์ด ์„ธ ์‹ ํ˜ธ๋ฅผ ์ง์ ‘ ํ‰๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค:

๊ด€์ธก์„ฑ ์‹ ํ˜ธ๋ฅผ ์ง€์›ํ•˜๋Š” ๋ฐฑ์—”๋“œ ๊ทœ์น™ ๋˜๋Š” ์ถ”์ถœ ๋ฉ”ํŠธ๋ฆญ์œผ๋กœ ํ‰๊ฐ€ํ•œ ๋’ค ํ†ต๋ณดยท์ธ์‹œ๋˜ํŠธ ํ†ตํ•ฉ์— ์—ฐ๊ฒฐํ•˜๋Š” ํ๋ฆ„.

๊ด€์ธก์„ฑ ์‹ ํ˜ธ๋ฅผ ์ง€์›ํ•˜๋Š” ๋ฐฑ์—”๋“œ ๊ทœ์น™ ๋˜๋Š” ์ถ”์ถœ ๋ฉ”ํŠธ๋ฆญ์œผ๋กœ ํ‰๊ฐ€ํ•œ ๋’ค ํ†ต๋ณดยท์ธ์‹œ๋˜ํŠธ ํ†ตํ•ฉ์— ์—ฐ๊ฒฐํ•˜๋Š” ํ๋ฆ„.์ „์ฒด ํ™”๋ฉด์œผ๋กœ ์—ด๊ธฐ โ†—
  • ๋ฉ”ํŠธ๋ฆญ(Metrics): ์‹œ์Šคํ…œ์˜ ์ •๋Ÿ‰์  ์ƒํƒœ (CPU, ๋ฉ”๋ชจ๋ฆฌ, ์š”์ฒญ ์ˆ˜ ๋“ฑ)
  • ๋กœ๊ทธ(Logs): ์ด๋ฒคํŠธ์˜ ์ƒ์„ธํ•œ ๊ธฐ๋ก
  • ํŠธ๋ ˆ์ด์Šค(Traces): ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ์˜ ์š”์ฒญ ํ๋ฆ„

Prometheus ๊ทœ์น™์€ ๋ฉ”ํŠธ๋ฆญ์„ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธยทํŠธ๋ ˆ์ด์Šค๋Š” ํ•ด๋‹น ๋ฐฑ์—”๋“œ์˜ ๊ทœ์น™์ด๋‚˜ ์ถ”์ถœํ•œ ๋ฉ”ํŠธ๋ฆญ์„ ํ†ตํ•ด ์•Œ๋ฆผ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ง€, ํ†ต๋ณด, ๋‹ด๋‹น์ž ํ™•์ธ์€ ์„œ๋กœ ๋‹ค๋ฅธ ๋‹จ๊ณ„์ด๋ฉฐ ์ „๋‹ฌ ์„ฑ๊ณต์€ ๋ณ„๋„๋กœ ๊ฐ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•Œ๋ฆผ์ด ํ•„์š”ํ•œ ์ด์œ  โ€‹

  1. ์„ ์ œ์  ๋ฌธ์ œ ๋Œ€์‘: ์‚ฌ์šฉ์ž๊ฐ€ ๋ถˆํŽธ์„ ๋А๋ผ๊ธฐ ์ „์— ๋ฌธ์ œ๋ฅผ ์ธ์ง€
  2. ๋‹ค์šดํƒ€์ž„ ์ตœ์†Œํ™”: ๋น ๋ฅธ ๊ฐ์ง€์™€ ๋Œ€์‘์œผ๋กœ ์„œ๋น„์Šค ๊ฐ€์šฉ์„ฑ ํ–ฅ์ƒ
  3. ๋น„์šฉ ์ ˆ๊ฐ: ์ž๋™ํ™”๋œ ๋ชจ๋‹ˆํ„ฐ๋ง์œผ๋กœ ์ธ๋ ฅ ๋น„์šฉ ๊ฐ์†Œ
  4. SLA/SLO ์ค€์ˆ˜: ์„œ๋น„์Šค ์ˆ˜์ค€ ๋ชฉํ‘œ ๋‹ฌ์„ฑ์„ ์œ„ํ•œ ํ•„์ˆ˜ ์š”์†Œ
  5. ์ธ์‹œ๋˜ํŠธ ๊ธฐ๋ก: ๋ฌธ์ œ ๋ฐœ์ƒ ์ด๋ ฅ ์ถ”์  ๋ฐ ๋ถ„์„

์ข‹์€ ์•Œ๋ฆผ vs ๋‚˜์œ ์•Œ๋ฆผ โ€‹

๊ตฌ๋ถ„์ข‹์€ ์•Œ๋ฆผ๋‚˜์œ ์•Œ๋ฆผ
์‹คํ–‰ ๊ฐ€๋Šฅ์„ฑ์ฆ‰๊ฐ์ ์ธ ์กฐ์น˜๊ฐ€ ํ•„์š”ํ•จ์ •๋ณด ์ œ๊ณต๋งŒ, ์กฐ์น˜ ๋ถˆํ•„์š”
๋ช…ํ™•์„ฑ๋ฌด์—‡์ด ๋ฌธ์ œ์ธ์ง€ ๋ช…ํ™•ํ•จ๋ชจํ˜ธํ•˜๊ณ  ๋ถˆ๋ช…ํ™•ํ•จ
๊ธด๊ธ‰๋„์‹ฌ๊ฐ๋„์— ๋งž๋Š” ๊ธด๊ธ‰๋„๋ชจ๋“  ๊ฒƒ์ด ๊ธด๊ธ‰
๋นˆ๋„์ ์ ˆํ•œ ๋นˆ๋„๋„ˆ๋ฌด ์ž์ฃผ ๋˜๋Š” ๋„ˆ๋ฌด ๋“œ๋ฌผ๊ฒŒ
์ค‘๋ณต๊ด€๋ จ ์•Œ๋ฆผ ๊ทธ๋ฃนํ™”๋™์ผ ๋ฌธ์ œ์— ์ˆ˜์‹ญ ๊ฐœ ์•Œ๋ฆผ

์•Œ๋ฆผ ์ƒ๋ช…์ฃผ๊ธฐ โ€‹

๊ทธ๋ฆผ์€ ๊ทœ์น™ ์ƒํƒœ์™€ ์ธ์‹œ๋˜ํŠธ ๋Œ€์‘์„ ํ•จ๊ป˜ ๋ณด์—ฌ์ฃผ๋Š” ๊ฐœ๋…๋„์ž…๋‹ˆ๋‹ค. Prometheus ์ƒํƒœ๋Š” inactive/pending/firing์ด๋ฉฐ, acknowledged/in-progress๋Š” ์˜จ์ฝœ ๋„๊ตฌ์˜ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๋‹ด๋‹น์ž๊ฐ€ ์ธ์‹œ๋˜ํŠธ๋ฅผ ๋‹ซ์•„๋„ ๊ทœ์น™์€ ๊ณ„์† firing์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ๊ณ„์—ด ์†Œ์‹ค๋„ ๊ทœ์น™์„ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฅผ ๋ณต๊ตฌ ์ฆ๊ฑฐ๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค:

Prometheus ๊ทœ์น™ ์ƒํƒœ์™€ ๋ณ„๋„ ์ธ์‹œ๋˜ํŠธ ๋Œ€์‘ ์ƒํƒœ. ์‚ฌ๊ฑด ์ข…๋ฃŒ๋‚˜ ์‹œ๊ณ„์—ด ์†Œ์‹ค์€ ์„œ๋น„์Šค ๋ณต๊ตฌ์˜ ์ฆ๊ฑฐ๊ฐ€ ์•„๋‹ˆ๋‹ค.

Prometheus ๊ทœ์น™ ์ƒํƒœ์™€ ๋ณ„๋„ ์ธ์‹œ๋˜ํŠธ ๋Œ€์‘ ์ƒํƒœ. ์‚ฌ๊ฑด ์ข…๋ฃŒ๋‚˜ ์‹œ๊ณ„์—ด ์†Œ์‹ค์€ ์„œ๋น„์Šค ๋ณต๊ตฌ์˜ ์ฆ๊ฑฐ๊ฐ€ ์•„๋‹ˆ๋‹ค.์ „์ฒด ํ™”๋ฉด์œผ๋กœ ์—ด๊ธฐ โ†—

1. Detection (๊ฐ์ง€) โ€‹

  • ์ž„๊ณ„๊ฐ’ ๊ธฐ๋ฐ˜: ํŠน์ • ๊ฐ’์ด ์„ค์ •๋œ ์ž„๊ณ„๊ฐ’์„ ์ดˆ๊ณผํ•  ๋•Œ
  • ๋ณ€ํ™”์œจ ๊ธฐ๋ฐ˜: ๊ฐ’์˜ ๋ณ€ํ™” ์†๋„๊ฐ€ ๋น„์ •์ƒ์ ์ผ ๋•Œ
  • ์ด์ƒ ํƒ์ง€: ๊ธฐ๊ณ„ ํ•™์Šต ๊ธฐ๋ฐ˜ ๋น„์ •์ƒ ํŒจํ„ด ๊ฐ์ง€
  • ๋กœ๊ทธ ํŒจํ„ด: ํŠน์ • ๋กœ๊ทธ ํŒจํ„ด ๋ฐœ์ƒ ์‹œ
yaml
groups:
  - name: node-alerts
    rules:
      - alert: HighCPUUsage
        expr: 100 * (1 - avg by (cluster, instance) (rate(node_cpu_seconds_total{mode="idle"}[5m]))) > 80
        for: 5m
        labels:
          severity: warning
          team: sre
        annotations:
          summary: "High CPU usage detected"
          description: "CPU usage is above 80% for 5 minutes on {{ $labels.instance }}"

2. Notification (์•Œ๋ฆผ) โ€‹

  • ์ฑ„๋„ ์„ ํƒ: Slack, Email, SMS, PagerDuty ๋“ฑ
  • ๋ผ์šฐํŒ…: ์•Œ๋ฆผ ์œ ํ˜•์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ์ˆ˜์‹ ์ž์—๊ฒŒ ์ „๋‹ฌ
  • ๊ทธ๋ฃนํ™”: ๊ด€๋ จ ์•Œ๋ฆผ์„ ๋ฌถ์–ด์„œ ์ „์†ก
  • ์ค‘๋ณต ์ œ๊ฑฐ: ์ค‘๋ณต ํ†ต๋ณด๋ฅผ ์ค„์ด์ง€๋งŒ repeat_interval ์žฌํ†ต๋ณดยท์žฅ์•  ๋ณต๊ตฌ ์žฌ์ „์†ก์€ ๊ฐ€๋Šฅํ•˜๋ฉฐ exactly-once ์ „๋‹ฌ์€ ๋ณด์žฅํ•˜์ง€ ์•Š์Œ

3. Escalation (์—์Šค์ปฌ๋ ˆ์ด์…˜) โ€‹

  • ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜: ์ผ์ • ์‹œ๊ฐ„ ๋‚ด ์‘๋‹ต ์—†์œผ๋ฉด ๋‹ค์Œ ๋‹ด๋‹น์ž์—๊ฒŒ ์ „๋‹ฌ
  • ์‹ฌ๊ฐ๋„ ๊ธฐ๋ฐ˜: ์‹ฌ๊ฐ๋„์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์—์Šค์ปฌ๋ ˆ์ด์…˜ ๊ฒฝ๋กœ
  • ์ž๋™ ์—์Šค์ปฌ๋ ˆ์ด์…˜: ์˜จ์ฝœ ์„œ๋น„์Šค์— ๋ณ„๋„๋กœ ๊ตฌ์„ฑ. Alertmanager์˜ repeat_interval์€ ๋ฏธ์‘๋‹ต ํ™•์ธ์ด๋‚˜ ๋‹ด๋‹น์ž ๊ต๋Œ€ ๊ธฐ๋Šฅ์ด ์•„๋‹˜

์˜จ์ฝœ ์„œ๋น„์Šค์—์„œ ๊ตฌ์„ฑํ•˜๋Š” ์—์Šค์ปฌ๋ ˆ์ด์…˜ ์‹œ๊ฐ„ ์˜ˆ์‹œ. ํ™•์ธยท๋ฐฑ์—…ยท์žฌํ˜ธ์ถœ ๋™์ž‘์€ ์ •์ฑ…์— ๋”ฐ๋ฅธ๋‹ค.

์˜จ์ฝœ ์„œ๋น„์Šค์—์„œ ๊ตฌ์„ฑํ•˜๋Š” ์—์Šค์ปฌ๋ ˆ์ด์…˜ ์‹œ๊ฐ„ ์˜ˆ์‹œ. ํ™•์ธยท๋ฐฑ์—…ยท์žฌํ˜ธ์ถœ ๋™์ž‘์€ ์ •์ฑ…์— ๋”ฐ๋ฅธ๋‹ค.์ „์ฒด ํ™”๋ฉด์œผ๋กœ ์—ด๊ธฐ โ†—

4. Resolution (ํ•ด๊ฒฐ) โ€‹

  • ์ˆ˜๋™ ํ•ด๊ฒฐ: ๋‹ด๋‹น์ž๊ฐ€ ์ธ์‹œ๋˜ํŠธ ๋„๊ตฌ์—์„œ ์‚ฌ๊ฑด์„ ์ข…๋ฃŒํ•˜๋ฉฐ ๊ทœ์น™ ์ƒํƒœ๋Š” ๋ณ„๋„๋กœ ํ™•์ธ
  • ์ž๋™ ํ•ด๊ฒฐ: ๊ทœ์น™ ์กฐ๊ฑด ํ•ด์ œยท์ˆ˜์ง‘ ์ƒํƒœ๋ฅผ ํ™•์ธํ•œ ํ›„ ์—ฐ๋™ ์ •์ฑ…์— ๋”ฐ๋ผ ์‚ฌ๊ฑด ์ƒํƒœ ๊ฐฑ์‹ 
  • ํ•ด๊ฒฐ ์•Œ๋ฆผ: ๋ฌธ์ œ ํ•ด๊ฒฐ ์‹œ ํ•ด๊ฒฐ ์•Œ๋ฆผ ์ „์†ก

์•Œ๋ฆผ ์„ค๊ณ„ ์›์น™ โ€‹

1. Actionable Alerts (์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์•Œ๋ฆผ) โ€‹

์‚ฌ๋žŒ์„ ๊นจ์šฐ๋Š” ํŽ˜์ด์ง€๋Š” ์ฆ‰์‹œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์กฐ์น˜๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ •๋ณด์„ฑ ์ด๋ฒคํŠธ์™€ ์žฅ๊ธฐ ๊ฐœ์„  ๊ณผ์ œ๋Š” ํ‹ฐ์ผ“ยท๋Œ€์‹œ๋ณด๋“œ๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž˜๋ชป๋œ ์˜ˆ:

Alert: Database connection count increased

์˜ฌ๋ฐ”๋ฅธ ์˜ˆ:

Alert: Database connection pool exhausted
Action Required: Confirm user impact; inspect pool saturation and connection leaks using the runbook
Runbook: https://example.com/runbooks/replace-db-runbook

2. Alert Fatigue ๋ฐฉ์ง€ (์•Œ๋ฆผ ํ”ผ๋กœ ๋ฐฉ์ง€) โ€‹

๋„ˆ๋ฌด ๋งŽ์€ ์•Œ๋ฆผ์€ ์˜คํžˆ๋ ค ์ค‘์š”ํ•œ ์•Œ๋ฆผ์„ ๋†“์น˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์•Œ๋ฆผ ํ”ผ๋กœ์™€ ์‹คํ–‰ ๊ฐ€๋Šฅ์„ฑยท๊ทธ๋ฃนํ™”ยท๋น„๊ธด๊ธ‰ ์ž‘์—… ๋ถ„๋ฆฌ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๊ฒ€ํ†  ์ˆœํ™˜.

์•Œ๋ฆผ ํ”ผ๋กœ์™€ ์‹คํ–‰ ๊ฐ€๋Šฅ์„ฑยท๊ทธ๋ฃนํ™”ยท๋น„๊ธด๊ธ‰ ์ž‘์—… ๋ถ„๋ฆฌ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๊ฒ€ํ†  ์ˆœํ™˜.์ „์ฒด ํ™”๋ฉด์œผ๋กœ ์—ด๊ธฐ โ†—

์•Œ๋ฆผ ํ”ผ๋กœ ๋ฐฉ์ง€ ์ „๋žต:

  1. ์ž„๊ณ„๊ฐ’ ์กฐ์ •: ๋„ˆ๋ฌด ๋ฏผ๊ฐํ•˜์ง€ ์•Š๊ฒŒ ์„ค์ •
  2. ์•Œ๋ฆผ ๊ทธ๋ฃนํ™”: ๊ด€๋ จ ์•Œ๋ฆผ์„ ํ•˜๋‚˜๋กœ ๋ฌถ์Œ
  3. ์–ต์ œ(Inhibition): ์ƒ์œ„ ์•Œ๋ฆผ ๋ฐœ์ƒ ์‹œ ํ•˜์œ„ ์•Œ๋ฆผ ์–ต์ œ
  4. ์ •๊ธฐ์  ๋ฆฌ๋ทฐ: ๋ถˆํ•„์š”ํ•œ ์•Œ๋ฆผ ์ œ๊ฑฐ
  5. ์ ์ง„์  ๋„์ž…: ์ƒˆ ์•Œ๋ฆผ์€ ๋จผ์ € ๋‚ฎ์€ ์‹ฌ๊ฐ๋„๋กœ ์‹œ์ž‘

3. Severity Levels (์‹ฌ๊ฐ๋„ ์ˆ˜์ค€) โ€‹

์•„๋ž˜ ๋Œ€์‘ ์‹œ๊ฐ„์€ ์กฐ์ง๋ณ„ ์ •์ฑ…์„ ์„ค๋ช…ํ•˜๋Š” ์˜ˆ์‹œ์ด๋ฉฐ ์ œํ’ˆ SLA๋‚˜ ๋ณดํŽธ์  ๊ถŒ์žฅ๊ฐ’์ด ์•„๋‹™๋‹ˆ๋‹ค:

์‹ฌ๊ฐ๋„์„ค๋ช…๋Œ€์‘ ์‹œ๊ฐ„์˜ˆ์‹œ
Critical์„œ๋น„์Šค ์™„์ „ ์žฅ์• ์ฆ‰์‹œ (5๋ถ„ ์ด๋‚ด)์ „์ฒด ์„œ๋น„์Šค ๋‹ค์šด, ๋ฐ์ดํ„ฐ ์†์‹ค ์œ„ํ—˜
High์ฃผ์š” ๊ธฐ๋Šฅ ์žฅ์• 15๋ถ„ ์ด๋‚ด๊ฒฐ์ œ ์‹œ์Šคํ…œ ์˜ค๋ฅ˜, ๋กœ๊ทธ์ธ ๋ถˆ๊ฐ€
Warning์ž ์žฌ์  ๋ฌธ์ œ1์‹œ๊ฐ„ ์ด๋‚ด๋””์Šคํฌ 80% ์‚ฌ์šฉ, ์‘๋‹ต ์ง€์—ฐ ์ฆ๊ฐ€
Info์ •๋ณด์„ฑ ์•Œ๋ฆผ์—…๋ฌด ์‹œ๊ฐ„ ๋‚ด๋ฐฐํฌ ์™„๋ฃŒ, ๋ฐฑ์—… ์„ฑ๊ณต
yaml
groups:
  - name: disk-alerts
    rules:
      - alert: DiskSpaceCritical
        expr: |
          (100 * node_filesystem_avail_bytes{fstype!~"tmpfs|overlay|squashfs"}
            / node_filesystem_size_bytes{fstype!~"tmpfs|overlay|squashfs"} < 5)
          and node_filesystem_readonly == 0
          and node_filesystem_size_bytes > 0
        for: 5m
        labels:
          severity: critical
          team: sre
        annotations:
          summary: "Disk space critical"
      - alert: DiskSpaceWarning
        expr: |
          (100 * node_filesystem_avail_bytes{fstype!~"tmpfs|overlay|squashfs"}
            / node_filesystem_size_bytes{fstype!~"tmpfs|overlay|squashfs"} < 20)
          and node_filesystem_readonly == 0
          and node_filesystem_size_bytes > 0
        for: 10m
        labels:
          severity: warning
          team: sre
        annotations:
          summary: "Disk space low"

4. ์•Œ๋ฆผ ๋ฌธ์„œํ™” โ€‹

๋ชจ๋“  ์•Œ๋ฆผ์—๋Š” ๋‹ค์Œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

  • ์„ค๋ช…: ์•Œ๋ฆผ์ด ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€
  • ์˜ํ–ฅ: ์ด ๋ฌธ์ œ๊ฐ€ ์„œ๋น„์Šค์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ
  • ์กฐ์น˜ ๋ฐฉ๋ฒ•: ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๋‹จ๊ณ„๋ณ„ ๊ฐ€์ด๋“œ
  • ๋Ÿฐ๋ถ ๋งํฌ: ์ƒ์„ธํ•œ ๋Œ€์‘ ์ ˆ์ฐจ ๋ฌธ์„œ
yaml
annotations:
  summary: "Investigate the affected operation"
  description: "Check the rule expression, its units, labels, and collection health."
  impact: "Document the affected user operation before paging."
  action: "Use the owning team's reviewed runbook; do not scale resources blindly."
  runbook_url: "https://example.com/runbooks/replace-with-reviewed-runbook"

์•Œ๋ฆผ ๋ผ์šฐํŒ…๊ณผ ์—์Šค์ปฌ๋ ˆ์ด์…˜ โ€‹

๋ผ์šฐํŒ… ์ „๋žต โ€‹

์•Œ๋ฆผ์€ ๋‹ค์–‘ํ•œ ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ์ˆ˜์‹ ์ž์—๊ฒŒ ์ „๋‹ฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

ํ†ต๋ณด ์ „์— ๋ผ๋ฒจ๋กœ ์˜จ์ฝœยท๋‹ด๋‹น ํŒ€ receiver๋ฅผ ์„ ํƒํ•œ๋‹ค. critical๋งŒ ๋งค์นญ๋˜๋ฉด default๋Š” ์ถ”๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค.

ํ†ต๋ณด ์ „์— ๋ผ๋ฒจ๋กœ ์˜จ์ฝœยท๋‹ด๋‹น ํŒ€ receiver๋ฅผ ์„ ํƒํ•œ๋‹ค. critical๋งŒ ๋งค์นญ๋˜๋ฉด default๋Š” ์ถ”๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค.์ „์ฒด ํ™”๋ฉด์œผ๋กœ ์—ด๊ธฐ โ†—

๋ผ์šฐํŒ… ํŠธ๋ฆฌ ์„ค๊ณ„ โ€‹

์•„๋ž˜๋Š” ํ†ต๋ณด๋ฅผ ์ „์†กํ•˜์ง€ ์•Š๋Š” ์™„์ „ํ•œ ๋ผ์šฐํŒ… ๊ฒ€์ฆ์šฉ ์„ค์ •์ž…๋‹ˆ๋‹ค. ๋นˆ receivers๋Š” ์˜๋„์ ์ด๋ฉฐ ์šด์˜ ์ ์šฉ ์ „์— ์„ ํƒํ•œ ํ†ตํ•ฉ๊ณผ Secret ํŒŒ์ผ์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. critical์€ ์˜จ์ฝœ receiver์™€ ๋‹ด๋‹น ํŒ€์— ํ•จ๊ป˜ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. team์ด ์—†์œผ๋ฉด default๋กœ ๊ฐ€์ง€๋งŒ critical๋งŒ ๋งค์นญ๋˜๋ฉด default๋ฅผ ์ถ”๊ฐ€ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. group_wait ๋“ฑ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์žˆ์–ด ์ฆ‰์‹œ ์ „ํ™”๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋””์Šคํฌ critical์€ ๊ฐ™์€ instance/device/mountpoint์˜ warning๋งŒ ์–ต์ œํ•ฉ๋‹ˆ๋‹ค.

yaml
route:
  receiver: default-receiver
  group_by: [alertname, cluster, namespace, service]
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h
  routes:
    - matchers: ['severity="critical"']
      receiver: critical-oncall
      continue: true
    - matchers: ['team="sre"']
      receiver: sre-team
    - matchers: ['team="app"']
      receiver: dev-team
    - matchers: ['team="database"']
      receiver: dba-team
    - matchers: ['team="security"']
      receiver: security-team
receivers:
  - name: default-receiver
  - name: critical-oncall
  - name: sre-team
  - name: dev-team
  - name: dba-team
  - name: security-team
inhibit_rules:
  - source_matchers: ['alertname="DiskSpaceCritical"', 'instance!=""', 'device!=""', 'mountpoint!=""']
    target_matchers: ['alertname="DiskSpaceWarning"', 'instance!=""', 'device!=""', 'mountpoint!=""']
    equal: [cluster, instance, device, mountpoint]

์—์Šค์ปฌ๋ ˆ์ด์…˜ ์ •์ฑ… โ€‹

๋‹ค์Œ ํ‘œ๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ์˜จ์ฝœ ์„œ๋น„์Šค์—์„œ ๊ทผ๋ฌด ์‹œ๊ฐ„๋Œ€ยทํ™•์ธ ์‹œ๊ฐ„ยท๋ฐฑ์—… ๋‹ด๋‹น์žยท์žฌํ˜ธ์ถœ ์กฐ๊ฑด์„ ๊ตฌ์„ฑํ•˜๊ณ  ๋ชจ์˜ ํ›ˆ๋ จ์œผ๋กœ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค:

๋‹จ๊ณ„์‹œ๊ฐ„๋Œ€์ƒ์ฑ„๋„
10๋ถ„1์ฐจ ์˜จ์ฝœ ๋‹ด๋‹น์žSlack, PagerDuty
215๋ถ„2์ฐจ ์˜จ์ฝœ ๋‹ด๋‹น์žSlack, PagerDuty, SMS
330๋ถ„ํŒ€ ๋ฆฌ๋“œSlack, PagerDuty, ์ „ํ™”
445๋ถ„์—”์ง€๋‹ˆ์–ด๋ง ๋งค๋‹ˆ์ €์ „ํ™”
560๋ถ„CTO/VP Engineering์ „ํ™”

์˜จ์ฝœ ๋กœํ…Œ์ด์…˜ โ€‹

์˜จ์ฝœ์˜ ๊ฐœ๋… โ€‹

์˜จ์ฝœ(On-Call)์€ ์ง€์ •๋œ ๊ธฐ๊ฐ„ ๋™์•ˆ ์‹œ์Šคํ…œ ๋ฌธ์ œ์— ๋Œ€์‘ํ•  ์ฑ…์ž„์„ ๊ฐ€์ง„ ๋‹ด๋‹น์ž๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

4์ฃผ ๊ต๋Œ€์™€ ์ธ๊ณ„ ์˜ˆ์‹œ. ์‹ค์ œ ์‹œ๊ฐ„๋Œ€ยท์ธ์›ยท๋ฐฑ์—…ยท๋ณด์ƒ์€ ํ•ฉ์˜ํ•œ ์ •์ฑ…์— ๋”ฐ๋ฅธ๋‹ค.

4์ฃผ ๊ต๋Œ€์™€ ์ธ๊ณ„ ์˜ˆ์‹œ. ์‹ค์ œ ์‹œ๊ฐ„๋Œ€ยท์ธ์›ยท๋ฐฑ์—…ยท๋ณด์ƒ์€ ํ•ฉ์˜ํ•œ ์ •์ฑ…์— ๋”ฐ๋ฅธ๋‹ค.์ „์ฒด ํ™”๋ฉด์œผ๋กœ ์—ด๊ธฐ โ†—

์˜จ์ฝœ ๋ชจ๋ฒ” ์‚ฌ๋ก€ โ€‹

  1. ๋ช…ํ™•ํ•œ ๊ต๋Œ€ ์ผ์ •: ์ฃผ๊ฐ„ ๋˜๋Š” ๊ฒฉ์ฃผ ๋กœํ…Œ์ด์…˜
  2. ํ•ธ๋“œ์˜คํ”„ ํ”„๋กœ์„ธ์Šค: ๊ต๋Œ€ ์‹œ ์ง„ํ–‰ ์ค‘์ธ ์ด์Šˆ ์ธ๊ณ„
  3. ๋ฐฑ์—… ๋‹ด๋‹น์ž: 1์ฐจ ๋‹ด๋‹น์ž๊ฐ€ ์‘๋‹ต ๋ถˆ๊ฐ€ ์‹œ ๋Œ€๋น„
  4. ์ ์ ˆํ•œ ๋ณด์ƒ: ์˜จ์ฝœ ์ˆ˜๋‹น ๋˜๋Š” ๋Œ€์ฒด ํœด๋ฌด
  5. ๋ฒˆ์•„์›ƒ ๋ฐฉ์ง€: ์ ์ ˆํ•œ ๋กœํ…Œ์ด์…˜ ์ฃผ๊ธฐ

์˜จ์ฝœ ๋„๊ตฌ ์š”๊ตฌ์‚ฌํ•ญ โ€‹

  • ์Šค์ผ€์ค„ ๊ด€๋ฆฌ: ๋‹ฌ๋ ฅ ํ†ตํ•ฉ, ๊ต๋Œ€ ๊ด€๋ฆฌ
  • ์˜ค๋ฒ„๋ผ์ด๋“œ: ์ž„์‹œ ๋‹ด๋‹น์ž ๋ณ€๊ฒฝ
  • ์—์Šค์ปฌ๋ ˆ์ด์…˜: ์ž๋™ ์ƒ์œ„ ๋ณด๊ณ 
  • ๋ชจ๋ฐ”์ผ ์ง€์›: ์–ธ์ œ ์–ด๋””์„œ๋‚˜ ์•Œ๋ฆผ ์ˆ˜์‹ 
  • ๋ณด๊ณ ์„œ: ์˜จ์ฝœ ํ™œ๋™ ๋ถ„์„

EKS ํ™˜๊ฒฝ์—์„œ์˜ ์•Œ๋ฆผ ์ „๋žต โ€‹

EKS ํŠนํ™” ์•Œ๋ฆผ ์˜์—ญ โ€‹

์Šคํฌ๋ ˆ์ดํ”„ ์‹คํŒจยท๋Œ€์ƒ ๋ˆ„๋ฝยทReadyยท๋ฆฌ์†Œ์Šค ์‹ ํ˜ธ๋ฅผ ๊ตฌ๋ถ„ํ•œ EKS ๊ฐ์‹œ ๋ฒ”์œ„์™€ ์ˆ˜์ง‘ ํ•œ๊ณ„.

์Šคํฌ๋ ˆ์ดํ”„ ์‹คํŒจยท๋Œ€์ƒ ๋ˆ„๋ฝยทReadyยท๋ฆฌ์†Œ์Šค ์‹ ํ˜ธ๋ฅผ ๊ตฌ๋ถ„ํ•œ EKS ๊ฐ์‹œ ๋ฒ”์œ„์™€ ์ˆ˜์ง‘ ํ•œ๊ณ„.์ „์ฒด ํ™”๋ฉด์œผ๋กœ ์—ด๊ธฐ โ†—

๊ณ„์ธต๋ณ„ ์•Œ๋ฆผ ์ „๋žต โ€‹

1. ํด๋Ÿฌ์Šคํ„ฐ ์ˆ˜์ค€ ์•Œ๋ฆผ โ€‹

์˜ˆ์ œ์˜ job ์ด๋ฆ„์€ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. up=0์€ ์Šคํฌ๋ ˆ์ดํ”„ ์‹คํŒจ์ด๋ฉฐ API ์ „์ฒด ์žฅ์• ๋ฅผ ํ™•์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. absent ๊ทœ์น™์€ ๋‹จ์ผ ์ˆ˜์ง‘ ๋ฒ”์œ„์šฉ์ด๊ณ , ์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ๋Š” ๊ธฐ๋Œ€ ๋Œ€์ƒ ๋ชฉ๋ก๊ณผ cluster ๋ผ๋ฒจ์„ ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Cluster Autoscaler ์นด์šดํ„ฐ๋Š” ๋ˆ„์ ๊ฐ’ ๋Œ€์‹  increase๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ณผ๊ฑฐ 10๋ถ„์˜ ์ฆ๊ฐ€๊ฐ€ 5๋ถ„๊ฐ„ ๋ณด์˜€๋‹ค๋Š” ๋œป์ด์ง€ ์˜ค๋ฅ˜๊ฐ€ 5๋ถ„ ๋‚ด๋‚ด ๋ฐœ์ƒํ–ˆ๋‹ค๋Š” ๋œป์€ ์•„๋‹™๋‹ˆ๋‹ค. Karpenter/EKS Auto Mode์—๋Š” ์ด ๊ทœ์น™์„ ๊ทธ๋Œ€๋กœ ์ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

yaml
groups:
  - name: eks-cluster
    rules:
      - alert: EKSAPIServerScrapeFailed
        expr: up{job="kubernetes-apiservers"} == 0
        for: 1m
        labels:
          severity: critical
          team: sre
        annotations:
          summary: "Prometheus cannot scrape the configured API server target"
      - alert: EKSAPIServerTargetMissing
        expr: absent(up{job="kubernetes-apiservers"})
        for: 5m
        labels:
          severity: warning
          team: sre
        annotations:
          summary: "No API server target series in this Prometheus"
      - alert: EKSNodeNotReady
        expr: kube_node_status_condition{condition="Ready",status="true"} == 0
        for: 5m
        labels:
          severity: critical
          team: sre
        annotations:
          summary: "Node {{ $labels.node }} is not ready"
      - alert: EKSClusterAutoscalerRecentErrors
        expr: increase(cluster_autoscaler_errors_total[10m]) > 0
        for: 5m
        labels:
          severity: warning
          team: sre
        annotations:
          summary: "Cluster Autoscaler recorded failed loops in the last 10 minutes"

2. ์›Œํฌ๋กœ๋“œ ์ˆ˜์ค€ ์•Œ๋ฆผ โ€‹

CrashLoopBackOff ์ง€ํ‘œ๋Š” ์žฌ์‹œ๋„ ์ค‘ ์ž ์‹œ ์‚ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ๊ทœ์น™์€ ์ตœ๊ทผ 5๋ถ„์˜ ๊ด€์ธก๊ฐ’์ด ์žˆ๋Š” ์ƒํƒœ๊ฐ€ 10๋ถ„ ์ง€์†๋˜๋ฉด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ˜„์žฌ ๊ณ„์† Waiting์ธ์ง€๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฐ˜๋ณต ๊ด€์ธก์„ ๊ฐ์ง€ํ•˜๋ฉฐ, ๋งˆ์ง€๋ง‰ ๊ด€์ธก ํ›„ ์ตœ๋Œ€ 5๋ถ„ ๋™์•ˆ ์œ ์ง€๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์งง์€ ์ผํšŒ์„ฑ ์ƒํƒœยท๋ฐ˜๋ณต ์žฌ์‹œ๋„ยท๋ณต๊ตฌ๋ฅผ ์‹ค์ œ rule ํ…Œ์ŠคํŠธ๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

yaml
groups:
  - name: eks-workloads
    rules:
      - alert: PodCrashLooping
        expr: max_over_time(kube_pod_container_status_waiting_reason{reason="CrashLoopBackOff"}[5m]) >= 1
        for: 10m
        labels:
          severity: warning
          team: app
        annotations:
          summary: "Pod {{ $labels.namespace }}/{{ $labels.pod }} repeatedly observed in CrashLoopBackOff"
      - alert: PodFrequentRestarts
        expr: increase(kube_pod_container_status_restarts_total[15m]) > 3
        for: 5m
        labels:
          severity: warning
          team: app
        annotations:
          summary: "Pod {{ $labels.namespace }}/{{ $labels.pod }} has frequent restarts"
      - alert: PodNotReady
        expr: |
          (kube_pod_status_ready{condition="true"} == 0)
          and on (namespace, pod, uid)
          (kube_pod_status_phase{phase=~"Pending|Running|Unknown"} == 1)
        for: 15m
        labels:
          severity: warning
          team: app
        annotations:
          summary: "Active pod {{ $labels.namespace }}/{{ $labels.pod }} is not ready"
      - alert: DeploymentReplicasMismatch
        expr: |
          kube_deployment_spec_replicas
            > on (namespace, deployment) kube_deployment_status_replicas_available
        for: 10m
        labels:
          severity: warning
          team: app
        annotations:
          summary: "Deployment {{ $labels.namespace }}/{{ $labels.deployment }} has fewer available replicas than desired"

3. ๋ฆฌ์†Œ์Šค ์ˆ˜์ค€ ์•Œ๋ฆผ โ€‹

CFS ์˜ˆ์ œ๋Š” ์‹œ๊ฐ„ ๋น„์œจ์ด ์•„๋‹ˆ๋ผ ์Šค๋กœํ‹€๋œ ๊ธฐ๊ฐ„ ์ˆ˜/์ „์ฒด ๊ธฐ๊ฐ„ ์ˆ˜์ž…๋‹ˆ๋‹ค. cAdvisor ์ง€ํ‘œ๊ฐ€ ์‹ค์ œ ๋…ธ์ถœ๋˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ๋ฌด์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ๋Š” 0 ๋˜๋Š” ๋งค์šฐ ํฐ ๊ฐ’์œผ๋กœ ๋ณด๊ณ ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ช…์‹œ์  limit์ด ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๋งŒ ๋Œ€์ƒ์œผ๋กœ ์ œํ•œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. PVC ํ†ต๊ณ„๋Š” CSI ๋“œ๋ผ์ด๋ฒ„ยท๋ณผ๋ฅจ ์œ ํ˜•์— ๋”ฐ๋ผ ์—†์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 0 ๋ถ„๋ชจ๋Š” ์ œ์™ธํ•˜์ง€๋งŒ ์ง€ํ‘œ ๋ˆ„๋ฝ ์ž์ฒด๋ฅผ ์ •์ƒ์œผ๋กœ ํŒ๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

yaml
groups:
  - name: eks-resources
    rules:
      - alert: ContainerCPUThrottling
        expr: |
          (
            sum by (namespace, pod, container) (
              rate(container_cpu_cfs_throttled_periods_total{container!="",container!="POD"}[5m]))
            / sum by (namespace, pod, container) (
              rate(container_cpu_cfs_periods_total{container!="",container!="POD"}[5m]))
          ) > 0.25
          and sum by (namespace, pod, container) (
            rate(container_cpu_cfs_periods_total{container!="",container!="POD"}[5m])) > 0
        for: 5m
        labels:
          severity: warning
          team: app
        annotations:
          summary: "More than 25% of CFS periods throttled for {{ $labels.pod }}/{{ $labels.container }}"
      - alert: ContainerMemoryNearLimit
        expr: |
          (
            container_memory_working_set_bytes{container!="",container!="POD"}
            / container_spec_memory_limit_bytes{container!="",container!="POD"}
          ) > 0.9
          and container_spec_memory_limit_bytes{container!="",container!="POD"} > 0
        for: 5m
        labels:
          severity: warning
          team: app
        annotations:
          summary: "Container {{ $labels.pod }}/{{ $labels.container }} memory is near its reported limit"
      - alert: PVCAlmostFull
        expr: |
          (kubelet_volume_stats_used_bytes / kubelet_volume_stats_capacity_bytes > 0.85)
          and kubelet_volume_stats_capacity_bytes > 0
        for: 5m
        labels:
          severity: warning
          team: sre
        annotations:
          summary: "PVC {{ $labels.namespace }}/{{ $labels.persistentvolumeclaim }} is almost full"

AWS ์„œ๋น„์Šค ํ†ตํ•ฉ ์•Œ๋ฆผ โ€‹

EKS 1.28 ์ด์ƒ์€ ์ผ๋ถ€ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ์ง€ํ‘œ๋ฅผ AWS/EKS์— ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋‚ด๋ถ€ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ง์ ‘ ์Šคํฌ๋ ˆ์ดํ”„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ธ์ฆ ์˜ค๋ฅ˜๋ฅผ ์กฐ์‚ฌํ•˜๋Š” ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๋กœ๊ทธ๋Š” ๋ณ„๋„ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•˜๋ฉฐ, ๊ฐ€์šฉ์„ฑ์€ ์ˆ˜์ง‘ ์ƒํƒœยทAPI ์š”์ฒญ ์‹คํŒจยท์™ธ๋ถ€ ํ”„๋กœ๋ธŒ๋ฅผ ํ•จ๊ป˜ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค:

AWS ์„œ๋น„์Šค๋ชจ๋‹ˆํ„ฐ๋ง ํ•ญ๋ชฉ์•Œ๋ฆผ ๋„๊ตฌ
EKS Control PlaneAPI Server ๊ฐ€์šฉ์„ฑ, ์ธ์ฆ ์˜ค๋ฅ˜CloudWatch
EC2 (๋…ธ๋“œ)์ธ์Šคํ„ด์Šค ์ƒํƒœ, ์‹œ์Šคํ…œ ๊ฒ€์‚ฌCloudWatch
EBS๋ณผ๋ฅจ ์ƒํƒœ, IOPS ์‚ฌ์šฉ๋Ÿ‰CloudWatch
EFS์ฒ˜๋ฆฌ๋Ÿ‰, ์—ฐ๊ฒฐ ์ˆ˜CloudWatch
ALB / NLBALB HTTP ์š”์ฒญยท์˜ค๋ฅ˜ยท์‘๋‹ต ์‹œ๊ฐ„; NLB ํ๋ฆ„ยทTCP ์žฌ์„ค์ •ยท๋Œ€์ƒ ์ƒํƒœCloudWatch: ์ œํ’ˆ๋ณ„ ์ง€ํ‘œ ํ™•์ธ
VPC / NAT GatewayNAT ์ง€ํ‘œ, ๋ณ„๋„ ํ™œ์„ฑํ™”ํ•œ Flow Logs์˜ ํ—ˆ์šฉยท๊ฑฐ๋ถ€ ๊ธฐ๋กCloudWatch ์ง€ํ‘œ/Logs; Flow Logs ์ž์ฒด๋Š” ์•Œ๋žŒ ์—”์ง„์ด ์•„๋‹˜

์†”๋ฃจ์…˜ ๋น„๊ต โ€‹

์ฃผ์š” ์•Œ๋ฆผ ์†”๋ฃจ์…˜ ๋น„๊ตํ‘œ โ€‹

์ œํ’ˆ์—ญํ• ๊ณผ ์šด์˜ ์กฐ๊ฑด
Alertmanager์˜คํ”ˆ์†Œ์Šค ๊ทธ๋ฃนํ™”ยท๋ผ์šฐํŒ…ยท์–ต์ œยท์žฌํ†ต๋ณด. ํ˜ธ์ŠคํŒ… ๋น„์šฉ๊ณผ ์šด์˜ ํ•„์š”. ์˜จ์ฝœ ์Šค์ผ€์ค„ยท๋ฏธ์‘๋‹ต ๊ธฐ๋ฐ˜ ์—์Šค์ปฌ๋ ˆ์ด์…˜ ์—†์Œ
CloudWatch AlarmsAWS ์ง€ํ‘œ/์ง€์›๋˜๋Š” ์ฟผ๋ฆฌ ํ‰๊ฐ€ยท์ƒํƒœ ๋ณ€๊ฒฝยท๊ตฌ์„ฑ๋œ ์•ก์…˜. ์˜จ์ฝœ ์Šค์ผ€์ค„์€ ๋ณ„๋„
Grafana OnCall OSS2026-03-24 ๋ณด๊ด€ ์ฒ˜๋ฆฌ. ์‹ ๊ทœ ์šด์˜ ๊ธฐ๋ณธ ์„ ํƒ์œผ๋กœ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Œ
Grafana Cloud IRM / PagerDuty์˜จ์ฝœยท์—์Šค์ปฌ๋ ˆ์ด์…˜ ํ›„๋ณด. ํ˜„์žฌ ์š”๊ธˆ์ œยท์ฑ„๋„ยท์ง€์—ญยท๊ณ„์•ฝ ์กฐ๊ฑด ํ™•์ธ
Opsgenie2025-06-04 ์‹ ๊ทœ ํŒ๋งค ์ข…๋ฃŒ; 2027-04-05 ์ง€์› ์ข…๋ฃŒยท์„œ๋น„์Šค ์ข…๋ฃŒ ์˜ˆ์ •. ๊ธฐ์กด ์‚ฌ์šฉ์ž๋Š” ์ด์ „ ๊ณ„ํš ์ˆ˜๋ฆฝ

์†”๋ฃจ์…˜ ์„ ํƒ ๊ฐ€์ด๋“œ โ€‹

์š”๊ตฌ์‚ฌํ•ญ์— ๋งž์ถฐ ์œ ์ง€๋ณด์ˆ˜๋˜๋Š” ๊ทœ์น™ยท๋ผ์šฐํŒ…ยท์˜จ์ฝœ ๋„๊ตฌ๋ฅผ ์„ ํƒํ•˜๊ณ  ๋ณด๊ด€๋œ OnCall OSS์™€ ์ข…๋ฃŒ ์˜ˆ์ • Opsgenie์˜ ์ด์ „์„ ๊ณ„ํšํ•œ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ์— ๋งž์ถฐ ์œ ์ง€๋ณด์ˆ˜๋˜๋Š” ๊ทœ์น™ยท๋ผ์šฐํŒ…ยท์˜จ์ฝœ ๋„๊ตฌ๋ฅผ ์„ ํƒํ•˜๊ณ  ๋ณด๊ด€๋œ OnCall OSS์™€ ์ข…๋ฃŒ ์˜ˆ์ • Opsgenie์˜ ์ด์ „์„ ๊ณ„ํšํ•œ๋‹ค.์ „์ฒด ํ™”๋ฉด์œผ๋กœ ์—ด๊ธฐ โ†—

์ƒํ™ฉ๋ณ„ ๊ถŒ์žฅ ์†”๋ฃจ์…˜ โ€‹

  1. Prometheus ์ค‘์‹ฌ: Alertmanager๋กœ ๊ทธ๋ฃนํ™”ยท๋ผ์šฐํŒ…ํ•˜๊ณ  ํ•„์š”ํ•œ ํ†ต๋ณด ์ฑ„๋„์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  2. AWS ์ง€ํ‘œ ์ค‘์‹ฌ: CloudWatch Alarms์™€ SNS/์ง€์›๋˜๋Š” ์ธ์‹œ๋˜ํŠธ ํ†ตํ•ฉ์„ ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค.
  3. 24์‹œ๊ฐ„ ๋Œ€์‘: ์ธ์›ยท๋ฐฑ์—…ยท์‹œ๊ฐ„๋Œ€ยทํ™•์ธยท์—์Šค์ปฌ๋ ˆ์ด์…˜ยท๋น„์šฉ์„ ๊ธฐ์ค€์œผ๋กœ ์œ ์ง€๋ณด์ˆ˜๋˜๋Š” ์˜จ์ฝœ ์„œ๋น„์Šค๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  4. Grafana OnCall OSSยทOpsgenie ๊ธฐ์กด ์‚ฌ์šฉ์ž: ๊ธฐ๋Šฅยท์ด๋ ฅยท์Šค์ผ€์ค„ยท์—ฐ๋™ ์ด์ „์„ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์ ‘๊ทผ๋ฒ• โ€‹

์—ฌ๋Ÿฌ ์†”๋ฃจ์…˜์„ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CloudWatchโ†’Alertmanager ์ง์ ‘ ์ „์†ก์ด ์ž๋™ ์ œ๊ณต๋˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์•„๋ž˜ ๊ตฌ์„ฑ์€ SNS/์ง€์›๋˜๋Š” ํ†ตํ•ฉ์œผ๋กœ ์˜จ์ฝœ ์„œ๋น„์Šค์— ์—ฐ๊ฒฐํ•˜๋ฉฐ, Alertmanager๋ฅผ ๊ฒฝ์œ ํ•˜๋ ค๋ฉด ๋ณ„๋„ ๋ณ€ํ™˜ยท์ธ์ฆยท์ค‘๋ณต/ํ•ด๊ฒฐ ์ƒํƒœ ์„ค๊ณ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค:

Prometheus๋Š” Alertmanager๋ฅผ, CloudWatch๋Š” ๋ช…์‹œ์  SNSยท์„œ๋น„์Šค ํ†ตํ•ฉ์„ ํ†ตํ•ด ์˜จ์ฝœ ์„œ๋น„์Šค์— ์—ฐ๊ฒฐํ•˜๋ฉฐ ์ž๋™ ์ง์ ‘ ๋ธŒ๋ฆฌ์ง€๋Š” ์—†๋‹ค.

Prometheus๋Š” Alertmanager๋ฅผ, CloudWatch๋Š” ๋ช…์‹œ์  SNSยท์„œ๋น„์Šค ํ†ตํ•ฉ์„ ํ†ตํ•ด ์˜จ์ฝœ ์„œ๋น„์Šค์— ์—ฐ๊ฒฐํ•˜๋ฉฐ ์ž๋™ ์ง์ ‘ ๋ธŒ๋ฆฌ์ง€๋Š” ์—†๋‹ค.์ „์ฒด ํ™”๋ฉด์œผ๋กœ ์—ด๊ธฐ โ†—

๊ตฌ์„ฑ ์˜ˆ์‹œ:

  1. Prometheus + Alertmanager: ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘ ๋ฐ 1์ฐจ ์•Œ๋ฆผ ์ฒ˜๋ฆฌ
  2. CloudWatch: AWS ์„œ๋น„์Šค ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘
  3. ์œ ์ง€๋ณด์ˆ˜๋˜๋Š” ์˜จ์ฝœ ์„œ๋น„์Šค: ์˜จ์ฝœ ๊ด€๋ฆฌ ๋ฐ ์—์Šค์ปฌ๋ ˆ์ด์…˜
  4. Slack: ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ ๋ฐ ํ˜‘์—…

๋‹ค์Œ ๋‹จ๊ณ„ โ€‹

์ด ์„น์…˜์—์„œ๋Š” ์•Œ๋ฆผ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ์ „๋žต์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๊ฐ ์†”๋ฃจ์…˜์— ๋Œ€ํ•œ ์ƒ์„ธํ•œ ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”:

  • Prometheus Alertmanager: ์˜คํ”ˆ์†Œ์Šค ์•Œ๋ฆผ ๊ด€๋ฆฌ
  • CloudWatch Alarms: AWS ๋„ค์ดํ‹ฐ๋ธŒ ์•Œ๋ฆผ
  • Grafana OnCall: ๊ธฐ์กด ์„ค์น˜ ๊ฒ€ํ† ์™€ ์ด์ „ ์‹œ ๊ณ ๋ ค์‚ฌํ•ญ

์ฐธ๊ณ  ์ž๋ฃŒ โ€‹