์๋ฆผ ๊ฐ์ โ
๋ง์ง๋ง ์ ๋ฐ์ดํธ: 2026๋ 9์ 13์ผ
๊ฒํ ๊ธฐ์ค: Prometheus 3.14.0, Alertmanager 0.34.0. ์์ ๋ ๋จ์ผ ํด๋ฌ์คํฐ ์์ง๊ณผ ์ค๋ณต ์ ๊ฑฐ๋ ์๊ณ์ด์ ๊ฐ์ ํฉ๋๋ค. ์ค์ job/๋ผ๋ฒจยท์์ง๊ธฐยท์งํ ๋ ธ์ถ์ ํ์ธํ๊ณ ์๊ณ๊ฐ์ ์กฐ์ ํ์ธ์. ๋ก์ปฌ ๊ท์นยท๋ผ์ฐํ ๊ฒ์ฆ๋ง ์ํํ์ผ๋ฉฐ ํด๋ฌ์คํฐ๋ ์๋ฆผ ์ฑ๋์ ์คํํ์ง ์์์ต๋๋ค.
๋ชฉ์ฐจ โ
- ์๋ฆผ์ ์ญํ ๊ณผ ์ค์์ฑ
- ์๋ฆผ ์๋ช ์ฃผ๊ธฐ
- ์๋ฆผ ์ค๊ณ ์์น
- ์๋ฆผ ๋ผ์ฐํ ๊ณผ ์์ค์ปฌ๋ ์ด์
- ์จ์ฝ ๋กํ ์ด์
- EKS ํ๊ฒฝ์์์ ์๋ฆผ ์ ๋ต
- ์๋ฃจ์ ๋น๊ต
์๋ฆผ์ ์ญํ ๊ณผ ์ค์์ฑ โ
๊ด์ธก์ฑ 3๋ ์ถ์์ ์๋ฆผ์ ์์น โ
๋ฉํธ๋ฆญยท๋ก๊ทธยทํธ๋ ์ด์ค๋ ๊ด์ธก์ฑ์์ ์์ฃผ ์ฌ์ฉํ๋ ์ ํธ์ ๋๋ค. ํ๋กํ์ผ ๋ฑ ๋ค๋ฅธ ์ ํธ๋ ์์ผ๋ฉฐ, ๋ชจ๋ ๊ท์น ์์ง์ด ์ธ ์ ํธ๋ฅผ ์ง์ ํ๊ฐํ๋ ๊ฒ์ ์๋๋๋ค:
- ๋ฉํธ๋ฆญ(Metrics): ์์คํ ์ ์ ๋์ ์ํ (CPU, ๋ฉ๋ชจ๋ฆฌ, ์์ฒญ ์ ๋ฑ)
- ๋ก๊ทธ(Logs): ์ด๋ฒคํธ์ ์์ธํ ๊ธฐ๋ก
- ํธ๋ ์ด์ค(Traces): ๋ถ์ฐ ์์คํ ์์์ ์์ฒญ ํ๋ฆ
Prometheus ๊ท์น์ ๋ฉํธ๋ฆญ์ ํ๊ฐํฉ๋๋ค. ๋ก๊ทธยทํธ๋ ์ด์ค๋ ํด๋น ๋ฐฑ์๋์ ๊ท์น์ด๋ ์ถ์ถํ ๋ฉํธ๋ฆญ์ ํตํด ์๋ฆผ์ ์ฐ๊ฒฐํฉ๋๋ค. ๊ฐ์ง, ํต๋ณด, ๋ด๋น์ ํ์ธ์ ์๋ก ๋ค๋ฅธ ๋จ๊ณ์ด๋ฉฐ ์ ๋ฌ ์ฑ๊ณต์ ๋ณ๋๋ก ๊ฐ์ํด์ผ ํฉ๋๋ค.
์๋ฆผ์ด ํ์ํ ์ด์ โ
- ์ ์ ์ ๋ฌธ์ ๋์: ์ฌ์ฉ์๊ฐ ๋ถํธ์ ๋๋ผ๊ธฐ ์ ์ ๋ฌธ์ ๋ฅผ ์ธ์ง
- ๋ค์ดํ์ ์ต์ํ: ๋น ๋ฅธ ๊ฐ์ง์ ๋์์ผ๋ก ์๋น์ค ๊ฐ์ฉ์ฑ ํฅ์
- ๋น์ฉ ์ ๊ฐ: ์๋ํ๋ ๋ชจ๋ํฐ๋ง์ผ๋ก ์ธ๋ ฅ ๋น์ฉ ๊ฐ์
- SLA/SLO ์ค์: ์๋น์ค ์์ค ๋ชฉํ ๋ฌ์ฑ์ ์ํ ํ์ ์์
- ์ธ์๋ํธ ๊ธฐ๋ก: ๋ฌธ์ ๋ฐ์ ์ด๋ ฅ ์ถ์ ๋ฐ ๋ถ์
์ข์ ์๋ฆผ vs ๋์ ์๋ฆผ โ
| ๊ตฌ๋ถ | ์ข์ ์๋ฆผ | ๋์ ์๋ฆผ |
|---|---|---|
| ์คํ ๊ฐ๋ฅ์ฑ | ์ฆ๊ฐ์ ์ธ ์กฐ์น๊ฐ ํ์ํจ | ์ ๋ณด ์ ๊ณต๋ง, ์กฐ์น ๋ถํ์ |
| ๋ช ํ์ฑ | ๋ฌด์์ด ๋ฌธ์ ์ธ์ง ๋ช ํํจ | ๋ชจํธํ๊ณ ๋ถ๋ช ํํจ |
| ๊ธด๊ธ๋ | ์ฌ๊ฐ๋์ ๋ง๋ ๊ธด๊ธ๋ | ๋ชจ๋ ๊ฒ์ด ๊ธด๊ธ |
| ๋น๋ | ์ ์ ํ ๋น๋ | ๋๋ฌด ์์ฃผ ๋๋ ๋๋ฌด ๋๋ฌผ๊ฒ |
| ์ค๋ณต | ๊ด๋ จ ์๋ฆผ ๊ทธ๋ฃนํ | ๋์ผ ๋ฌธ์ ์ ์์ญ ๊ฐ ์๋ฆผ |
์๋ฆผ ์๋ช ์ฃผ๊ธฐ โ
๊ทธ๋ฆผ์ ๊ท์น ์ํ์ ์ธ์๋ํธ ๋์์ ํจ๊ป ๋ณด์ฌ์ฃผ๋ ๊ฐ๋ ๋์ ๋๋ค. Prometheus ์ํ๋ inactive/pending/firing์ด๋ฉฐ, acknowledged/in-progress๋ ์จ์ฝ ๋๊ตฌ์ ์ํ์ ๋๋ค. ๋ด๋น์๊ฐ ์ธ์๋ํธ๋ฅผ ๋ซ์๋ ๊ท์น์ ๊ณ์ firing์ผ ์ ์์ต๋๋ค. ์๊ณ์ด ์์ค๋ ๊ท์น์ ๋นํ์ฑํํ ์ ์์ผ๋ฏ๋ก ์ด๋ฅผ ๋ณต๊ตฌ ์ฆ๊ฑฐ๋ก ์ทจ๊ธํ์ง ์์ต๋๋ค:
1. Detection (๊ฐ์ง) โ
- ์๊ณ๊ฐ ๊ธฐ๋ฐ: ํน์ ๊ฐ์ด ์ค์ ๋ ์๊ณ๊ฐ์ ์ด๊ณผํ ๋
- ๋ณํ์จ ๊ธฐ๋ฐ: ๊ฐ์ ๋ณํ ์๋๊ฐ ๋น์ ์์ ์ผ ๋
- ์ด์ ํ์ง: ๊ธฐ๊ณ ํ์ต ๊ธฐ๋ฐ ๋น์ ์ ํจํด ๊ฐ์ง
- ๋ก๊ทธ ํจํด: ํน์ ๋ก๊ทธ ํจํด ๋ฐ์ ์
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-runbook2. Alert Fatigue ๋ฐฉ์ง (์๋ฆผ ํผ๋ก ๋ฐฉ์ง) โ
๋๋ฌด ๋ง์ ์๋ฆผ์ ์คํ๋ ค ์ค์ํ ์๋ฆผ์ ๋์น๊ฒ ๋ง๋ญ๋๋ค.
์๋ฆผ ํผ๋ก ๋ฐฉ์ง ์ ๋ต:
- ์๊ณ๊ฐ ์กฐ์ : ๋๋ฌด ๋ฏผ๊ฐํ์ง ์๊ฒ ์ค์
- ์๋ฆผ ๊ทธ๋ฃนํ: ๊ด๋ จ ์๋ฆผ์ ํ๋๋ก ๋ฌถ์
- ์ต์ (Inhibition): ์์ ์๋ฆผ ๋ฐ์ ์ ํ์ ์๋ฆผ ์ต์
- ์ ๊ธฐ์ ๋ฆฌ๋ทฐ: ๋ถํ์ํ ์๋ฆผ ์ ๊ฑฐ
- ์ ์ง์ ๋์ : ์ ์๋ฆผ์ ๋จผ์ ๋ฎ์ ์ฌ๊ฐ๋๋ก ์์
3. Severity Levels (์ฌ๊ฐ๋ ์์ค) โ
์๋ ๋์ ์๊ฐ์ ์กฐ์ง๋ณ ์ ์ฑ ์ ์ค๋ช ํ๋ ์์์ด๋ฉฐ ์ ํ SLA๋ ๋ณดํธ์ ๊ถ์ฅ๊ฐ์ด ์๋๋๋ค:
| ์ฌ๊ฐ๋ | ์ค๋ช | ๋์ ์๊ฐ | ์์ |
|---|---|---|---|
| Critical | ์๋น์ค ์์ ์ฅ์ | ์ฆ์ (5๋ถ ์ด๋ด) | ์ ์ฒด ์๋น์ค ๋ค์ด, ๋ฐ์ดํฐ ์์ค ์ํ |
| High | ์ฃผ์ ๊ธฐ๋ฅ ์ฅ์ | 15๋ถ ์ด๋ด | ๊ฒฐ์ ์์คํ ์ค๋ฅ, ๋ก๊ทธ์ธ ๋ถ๊ฐ |
| Warning | ์ ์ฌ์ ๋ฌธ์ | 1์๊ฐ ์ด๋ด | ๋์คํฌ 80% ์ฌ์ฉ, ์๋ต ์ง์ฐ ์ฆ๊ฐ |
| Info | ์ ๋ณด์ฑ ์๋ฆผ | ์ ๋ฌด ์๊ฐ ๋ด | ๋ฐฐํฌ ์๋ฃ, ๋ฐฑ์ ์ฑ๊ณต |
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. ์๋ฆผ ๋ฌธ์ํ โ
๋ชจ๋ ์๋ฆผ์๋ ๋ค์ ์ ๋ณด๊ฐ ํฌํจ๋์ด์ผ ํฉ๋๋ค:
- ์ค๋ช : ์๋ฆผ์ด ๋ฌด์์ ์๋ฏธํ๋์ง
- ์ํฅ: ์ด ๋ฌธ์ ๊ฐ ์๋น์ค์ ๋ฏธ์น๋ ์ํฅ
- ์กฐ์น ๋ฐฉ๋ฒ: ๋ฌธ์ ํด๊ฒฐ์ ์ํ ๋จ๊ณ๋ณ ๊ฐ์ด๋
- ๋ฐ๋ถ ๋งํฌ: ์์ธํ ๋์ ์ ์ฐจ ๋ฌธ์
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"์๋ฆผ ๋ผ์ฐํ ๊ณผ ์์ค์ปฌ๋ ์ด์ โ
๋ผ์ฐํ ์ ๋ต โ
์๋ฆผ์ ๋ค์ํ ๊ธฐ์ค์ ๋ฐ๋ผ ์ ์ ํ ์์ ์์๊ฒ ์ ๋ฌ๋์ด์ผ ํฉ๋๋ค:
๋ผ์ฐํ ํธ๋ฆฌ ์ค๊ณ โ
์๋๋ ํต๋ณด๋ฅผ ์ ์กํ์ง ์๋ ์์ ํ ๋ผ์ฐํ ๊ฒ์ฆ์ฉ ์ค์ ์ ๋๋ค. ๋น receivers๋ ์๋์ ์ด๋ฉฐ ์ด์ ์ ์ฉ ์ ์ ์ ํํ ํตํฉ๊ณผ Secret ํ์ผ์ ์ค์ ํด์ผ ํฉ๋๋ค. critical์ ์จ์ฝ receiver์ ๋ด๋น ํ์ ํจ๊ป ์ ๋ฌ๋ฉ๋๋ค. team์ด ์์ผ๋ฉด default๋ก ๊ฐ์ง๋ง critical๋ง ๋งค์นญ๋๋ฉด default๋ฅผ ์ถ๊ฐ ํธ์ถํ์ง ์์ต๋๋ค. group_wait ๋ฑ ๋๊ธฐ ์๊ฐ์ด ์์ด ์ฆ์ ์ ํ๊ฐ ๋ณด์ฅ๋์ง ์์ต๋๋ค. ๋์คํฌ critical์ ๊ฐ์ instance/device/mountpoint์ warning๋ง ์ต์ ํฉ๋๋ค.
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]์์ค์ปฌ๋ ์ด์ ์ ์ฑ โ
๋ค์ ํ๋ ์์์ ๋๋ค. ์จ์ฝ ์๋น์ค์์ ๊ทผ๋ฌด ์๊ฐ๋ยทํ์ธ ์๊ฐยท๋ฐฑ์ ๋ด๋น์ยท์ฌํธ์ถ ์กฐ๊ฑด์ ๊ตฌ์ฑํ๊ณ ๋ชจ์ ํ๋ จ์ผ๋ก ๊ฒ์ฆํฉ๋๋ค:
| ๋จ๊ณ | ์๊ฐ | ๋์ | ์ฑ๋ |
|---|---|---|---|
| 1 | 0๋ถ | 1์ฐจ ์จ์ฝ ๋ด๋น์ | Slack, PagerDuty |
| 2 | 15๋ถ | 2์ฐจ ์จ์ฝ ๋ด๋น์ | Slack, PagerDuty, SMS |
| 3 | 30๋ถ | ํ ๋ฆฌ๋ | Slack, PagerDuty, ์ ํ |
| 4 | 45๋ถ | ์์ง๋์ด๋ง ๋งค๋์ | ์ ํ |
| 5 | 60๋ถ | CTO/VP Engineering | ์ ํ |
์จ์ฝ ๋กํ ์ด์ โ
์จ์ฝ์ ๊ฐ๋ โ
์จ์ฝ(On-Call)์ ์ง์ ๋ ๊ธฐ๊ฐ ๋์ ์์คํ ๋ฌธ์ ์ ๋์ํ ์ฑ ์์ ๊ฐ์ง ๋ด๋น์๋ฅผ ์๋ฏธํฉ๋๋ค.
์จ์ฝ ๋ชจ๋ฒ ์ฌ๋ก โ
- ๋ช ํํ ๊ต๋ ์ผ์ : ์ฃผ๊ฐ ๋๋ ๊ฒฉ์ฃผ ๋กํ ์ด์
- ํธ๋์คํ ํ๋ก์ธ์ค: ๊ต๋ ์ ์งํ ์ค์ธ ์ด์ ์ธ๊ณ
- ๋ฐฑ์ ๋ด๋น์: 1์ฐจ ๋ด๋น์๊ฐ ์๋ต ๋ถ๊ฐ ์ ๋๋น
- ์ ์ ํ ๋ณด์: ์จ์ฝ ์๋น ๋๋ ๋์ฒด ํด๋ฌด
- ๋ฒ์์ ๋ฐฉ์ง: ์ ์ ํ ๋กํ ์ด์ ์ฃผ๊ธฐ
์จ์ฝ ๋๊ตฌ ์๊ตฌ์ฌํญ โ
- ์ค์ผ์ค ๊ด๋ฆฌ: ๋ฌ๋ ฅ ํตํฉ, ๊ต๋ ๊ด๋ฆฌ
- ์ค๋ฒ๋ผ์ด๋: ์์ ๋ด๋น์ ๋ณ๊ฒฝ
- ์์ค์ปฌ๋ ์ด์ : ์๋ ์์ ๋ณด๊ณ
- ๋ชจ๋ฐ์ผ ์ง์: ์ธ์ ์ด๋์๋ ์๋ฆผ ์์
- ๋ณด๊ณ ์: ์จ์ฝ ํ๋ ๋ถ์
EKS ํ๊ฒฝ์์์ ์๋ฆผ ์ ๋ต โ
EKS ํนํ ์๋ฆผ ์์ญ โ
๊ณ์ธต๋ณ ์๋ฆผ ์ ๋ต โ
1. ํด๋ฌ์คํฐ ์์ค ์๋ฆผ โ
์์ ์ job ์ด๋ฆ์ ํ๊ฒฝ์ ๋ง๊ฒ ๋ฐ๊ฟ๋๋ค. up=0์ ์คํฌ๋ ์ดํ ์คํจ์ด๋ฉฐ API ์ ์ฒด ์ฅ์ ๋ฅผ ํ์ ํ์ง ์์ต๋๋ค. absent ๊ท์น์ ๋จ์ผ ์์ง ๋ฒ์์ฉ์ด๊ณ , ์ฌ๋ฌ ํด๋ฌ์คํฐ์์๋ ๊ธฐ๋ ๋์ ๋ชฉ๋ก๊ณผ cluster ๋ผ๋ฒจ์ ์ฐ๊ฒฐํด์ผ ํฉ๋๋ค. Cluster Autoscaler ์นด์ดํฐ๋ ๋์ ๊ฐ ๋์ increase๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ณผ๊ฑฐ 10๋ถ์ ์ฆ๊ฐ๊ฐ 5๋ถ๊ฐ ๋ณด์๋ค๋ ๋ป์ด์ง ์ค๋ฅ๊ฐ 5๋ถ ๋ด๋ด ๋ฐ์ํ๋ค๋ ๋ป์ ์๋๋๋ค. Karpenter/EKS Auto Mode์๋ ์ด ๊ท์น์ ๊ทธ๋๋ก ์ ์ฉํ์ง ์์ต๋๋ค.
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 ํ ์คํธ๋ก ๊ตฌ๋ถํฉ๋๋ค.
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 ๋ถ๋ชจ๋ ์ ์ธํ์ง๋ง ์งํ ๋๋ฝ ์์ฒด๋ฅผ ์ ์์ผ๋ก ํ๋จํ์ง ์์ต๋๋ค.
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 Plane | API Server ๊ฐ์ฉ์ฑ, ์ธ์ฆ ์ค๋ฅ | CloudWatch |
| EC2 (๋ ธ๋) | ์ธ์คํด์ค ์ํ, ์์คํ ๊ฒ์ฌ | CloudWatch |
| EBS | ๋ณผ๋ฅจ ์ํ, IOPS ์ฌ์ฉ๋ | CloudWatch |
| EFS | ์ฒ๋ฆฌ๋, ์ฐ๊ฒฐ ์ | CloudWatch |
| ALB / NLB | ALB HTTP ์์ฒญยท์ค๋ฅยท์๋ต ์๊ฐ; NLB ํ๋ฆยทTCP ์ฌ์ค์ ยท๋์ ์ํ | CloudWatch: ์ ํ๋ณ ์งํ ํ์ธ |
| VPC / NAT Gateway | NAT ์งํ, ๋ณ๋ ํ์ฑํํ Flow Logs์ ํ์ฉยท๊ฑฐ๋ถ ๊ธฐ๋ก | CloudWatch ์งํ/Logs; Flow Logs ์์ฒด๋ ์๋ ์์ง์ด ์๋ |
์๋ฃจ์ ๋น๊ต โ
์ฃผ์ ์๋ฆผ ์๋ฃจ์ ๋น๊ตํ โ
| ์ ํ | ์ญํ ๊ณผ ์ด์ ์กฐ๊ฑด |
|---|---|
| Alertmanager | ์คํ์์ค ๊ทธ๋ฃนํยท๋ผ์ฐํ ยท์ต์ ยท์ฌํต๋ณด. ํธ์คํ ๋น์ฉ๊ณผ ์ด์ ํ์. ์จ์ฝ ์ค์ผ์คยท๋ฏธ์๋ต ๊ธฐ๋ฐ ์์ค์ปฌ๋ ์ด์ ์์ |
| CloudWatch Alarms | AWS ์งํ/์ง์๋๋ ์ฟผ๋ฆฌ ํ๊ฐยท์ํ ๋ณ๊ฒฝยท๊ตฌ์ฑ๋ ์ก์ . ์จ์ฝ ์ค์ผ์ค์ ๋ณ๋ |
| Grafana OnCall OSS | 2026-03-24 ๋ณด๊ด ์ฒ๋ฆฌ. ์ ๊ท ์ด์ ๊ธฐ๋ณธ ์ ํ์ผ๋ก ๊ถ์ฅํ์ง ์์ |
| Grafana Cloud IRM / PagerDuty | ์จ์ฝยท์์ค์ปฌ๋ ์ด์ ํ๋ณด. ํ์ฌ ์๊ธ์ ยท์ฑ๋ยท์ง์ญยท๊ณ์ฝ ์กฐ๊ฑด ํ์ธ |
| Opsgenie | 2025-06-04 ์ ๊ท ํ๋งค ์ข ๋ฃ; 2027-04-05 ์ง์ ์ข ๋ฃยท์๋น์ค ์ข ๋ฃ ์์ . ๊ธฐ์กด ์ฌ์ฉ์๋ ์ด์ ๊ณํ ์๋ฆฝ |
์๋ฃจ์ ์ ํ ๊ฐ์ด๋ โ
์ํฉ๋ณ ๊ถ์ฅ ์๋ฃจ์ โ
- Prometheus ์ค์ฌ: Alertmanager๋ก ๊ทธ๋ฃนํยท๋ผ์ฐํ ํ๊ณ ํ์ํ ํต๋ณด ์ฑ๋์ ์ฐ๊ฒฐํฉ๋๋ค.
- AWS ์งํ ์ค์ฌ: CloudWatch Alarms์ SNS/์ง์๋๋ ์ธ์๋ํธ ํตํฉ์ ๊ฒํ ํฉ๋๋ค.
- 24์๊ฐ ๋์: ์ธ์ยท๋ฐฑ์ ยท์๊ฐ๋ยทํ์ธยท์์ค์ปฌ๋ ์ด์ ยท๋น์ฉ์ ๊ธฐ์ค์ผ๋ก ์ ์ง๋ณด์๋๋ ์จ์ฝ ์๋น์ค๋ฅผ ์ ํํฉ๋๋ค.
- Grafana OnCall OSSยทOpsgenie ๊ธฐ์กด ์ฌ์ฉ์: ๊ธฐ๋ฅยท์ด๋ ฅยท์ค์ผ์คยท์ฐ๋ ์ด์ ์ ๊ฒ์ฆํฉ๋๋ค.
ํ์ด๋ธ๋ฆฌ๋ ์ ๊ทผ๋ฒ โ
์ฌ๋ฌ ์๋ฃจ์ ์ ์กฐํฉํ ์ ์์ต๋๋ค. CloudWatchโAlertmanager ์ง์ ์ ์ก์ด ์๋ ์ ๊ณต๋๋ ๊ฒ์ ์๋๋๋ค. ์๋ ๊ตฌ์ฑ์ SNS/์ง์๋๋ ํตํฉ์ผ๋ก ์จ์ฝ ์๋น์ค์ ์ฐ๊ฒฐํ๋ฉฐ, Alertmanager๋ฅผ ๊ฒฝ์ ํ๋ ค๋ฉด ๋ณ๋ ๋ณํยท์ธ์ฆยท์ค๋ณต/ํด๊ฒฐ ์ํ ์ค๊ณ๊ฐ ํ์ํฉ๋๋ค:
๊ตฌ์ฑ ์์:
- Prometheus + Alertmanager: ๋ฉํธ๋ฆญ ์์ง ๋ฐ 1์ฐจ ์๋ฆผ ์ฒ๋ฆฌ
- CloudWatch: AWS ์๋น์ค ๋ฉํธ๋ฆญ ์์ง
- ์ ์ง๋ณด์๋๋ ์จ์ฝ ์๋น์ค: ์จ์ฝ ๊ด๋ฆฌ ๋ฐ ์์ค์ปฌ๋ ์ด์
- Slack: ์ค์๊ฐ ์๋ฆผ ๋ฐ ํ์
๋ค์ ๋จ๊ณ โ
์ด ์น์ ์์๋ ์๋ฆผ์ ๊ธฐ๋ณธ ๊ฐ๋ ๊ณผ ์ ๋ต์ ๋ํด ์์๋ณด์์ต๋๋ค. ๊ฐ ์๋ฃจ์ ์ ๋ํ ์์ธํ ๊ตฌ์ฑ ๋ฐฉ๋ฒ์ ๋ค์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ธ์:
- Prometheus Alertmanager: ์คํ์์ค ์๋ฆผ ๊ด๋ฆฌ
- CloudWatch Alarms: AWS ๋ค์ดํฐ๋ธ ์๋ฆผ
- Grafana OnCall: ๊ธฐ์กด ์ค์น ๊ฒํ ์ ์ด์ ์ ๊ณ ๋ ค์ฌํญ








