ساعت ۰۳:۱۴ alert میآید: HTTP 5xx rate > 2% for 5m. این runbook همان مسیری است که در production طی میکنیم — و همزمان نمونهٔ محتوای Markdown برای صفحهٔ مقاله.
#وضعیت اولیه
| سیگنال | مقدار | آستانه | وضعیت |
|---|---|---|---|
| Error rate | 4.8% | 2% | 🔴 |
| p95 latency | 890ms | 500ms | 🟠 |
| CPU app-01 | 91% | 80% | 🔴 |
| Disk /var | 72% | 85% | 🟢 |
یادآوری: قبل از restart دستهجمعی، حتماً snapshot از log و metric بگیر. حدس زدن بدون داده، زمان recovery را دو برابر میکند.
#چکلیست triage
- incident channel در Slack/Teams باز شد
- on-call secondary صدا زده شد
- آخرین deploy شناسایی شد
- rollback آماده است
- اطلاعرسانی به stakeholders
#تشخیص سریع
#۱. لاگ اپلیکیشن
journalctl -u myapp -S "15 min ago" --no-pager | tail -n 80#۲. اتصال دیتابیس
psql "$DATABASE_URL" -c "SELECT count(*) FROM pg_stat_activity WHERE state = 'active';"#۳. health endpoint
curl -fsS -o /dev/null -w "%{http_code} %{time_total}s\n" https://api.example.com/healthخروجی نمونه:
502 0.043s
502 0.039s
200 0.112s
#فرضیهها
- Connection pool exhaustion — محتملترین علت با توجه به spike همزمان latency
- Migration ناقص — deploy ۴۵ دقیقه قبل
- Upstream timeout — کمتر محتمل؛ gateway سالم است
#کد مرتبط (pool config)
const pool = new Pool({
max: Number(process.env.PG_POOL_MAX ?? 20),
idleTimeoutMillis: 30_000,
connectionTimeoutMillis: 5_000,
})#اقدام اصلاحی
# graceful reload — نه restart سخت
systemctl reload myapp
# اگر جواب نداد:
systemctl restart myapp
sleep 3
curl -fsS https://api.example.com/healthاگر error rate بعد از ۱۰ دقیقه زیر ۱% نرفت → rollback به tag قبلی:
git checkout v2.4.1
./scripts/deploy.sh production#ارتباطات
| مخاطب | کانال | پیام |
|---|---|---|
| تیم فنی | #inc-2026-0210 | وضعیت هر ۱۵ دقیقه |
| پشتیبانی | ticket queue | «مشکل شناسایی شد، ETA ۳۰ دقیقه» |
| مدیریت | فقط بعد از RCA اولیه |
#timeline نمونه
- T+0 — alert
- T+7m — علت احتمالی: pool
- T+18m — reload + restart
- T+31m — error rate < 0.5%
- T+24h — postmortem draft
#postmortem (خلاصه)
Root cause: افزایش traffic بعد از campaign بدون scale افقی؛ pool ثابت ماند.
Action items:
- autoscaling rule برای app tier
- alert روی
pg_stat_activity - load test قبل از campaign بعدی
#منابع
- Monitoring best practices
- runbook داخلی:
/solutions/markdown-showcase - on-call schedule: https://example.com/oncall
مشخصات فنی
- stack
- Prometheus + Grafana + systemd
- effort
- متوسط
- severity
- SEV-2