چیتشیت
SRE، حوادث و گزارشهای پس از حادثه (Postmortem) برای هوش مصنوعی
SRE, Incidents and Postmortems for AI
تریاژ حوادث LLM با ایجنتها، ایجاد دروازهی تأییدیه برای هر اصلاح، نگارش گزارشهای پس از حادثه با شواهد مستند و فشردهسازی لاگها برای دستیار هوشمند.
فهرست مطالب
علائم حادثه
عیبیابینرخ خطای بالا در بخش checkout
- علت
- خطای OOM در vLLM ناشی از جهش ناگهانی KV cache
- راهحل
- راهاندازی مجدد پاد. کاهش
--gpu-memory-utilizationبه 0.85
حافظه GPU روی 98٪ قبل از جهش ناگهانی
- علت
- خطای OOM در KV cache تحت بار همزمانی ناگهانی
- راهحل
- اجرای رانبوک RB-017
اختلافنظر دو مدل دربارهی علت ریشهای
- علت
- احتمال توهم در تشخیص علت ریشهای
- راهحل
- ارجاع به سطوح بالاتر با نمایش هر دو فرضیه
پاد در 10 دقیقه دوبار OOMKilled شده است
- علت
- میزان حافظهی درخواستی (256Mi) بیش از حد کم است
- راهحل
- درخواست 512Mi، سقف 1Gi
وضعیت CrashLoopBackOff در auth-svc
- علت
- مسیر آزمون ارزیابی به ready/ تغییر کرده است
- راهحل
- بازگرداندن مسیر آزمون ارزیابی به healthz/
ایمیج
checkout-api:v2.41در بررسی healthz/ شکست میخورد- علت
- استقرار ناموفق در 14 دقیقه پیش
- راهحل
- بازگشت به عقب به نسخه v2.40 پس از تأیید
blocked: no slack approval- علت
- ابزار مخرب بدون وجود تأییدکننده
- راهحل
- دریافت تأییدیهی کارت اسلک
حذف سطر نادر disk-full از زمینهی متنی
- علت
- نمونهبرداری یکنواخت با بودجهی 8
- راهحل
- استفاده از خطمشی
rarity
تریاژ چندایجنت
گامبهگام- سرپرستتفکیک حادثه به زیرپرسوجوها.
- ایجنت لاگجستجوی لاگ. یافتن متداولترین الگوی خطا.
- ایجنت متریکپرسوجوی PromQL. یافتن جهش ناگهانی حافظه GPU قبل از بروز خطاها.
- ایجنت رانبوکبازیابی مستندات. تطبیق با یک رانبوک شناختهشده.
- سرپرستدستهبندی علل ریشهای. توافق دو یا چند ایجنت بهمعنای اطمینان بالاست.
- انسانتأیید فرضیه و شواهد یا هدایت مجدد آنها.
- اقدامفقط یک اقدام ایمن و محدود، برای مثال راهاندازی مجدد پاد.
ایجنت عیبیابی K8s
معماریدامنهی اصلاح و بازیابی
مقایسه| فاکتور | ایمن، محدود | ناایمن، گسترده |
|---|---|---|
| پادها و کد | راهاندازی مجدد پاد | استقرار کد جدید |
| استقرارها | بازگردانی یک استقرار خاص | تغییر توپولوژی سرویس |
| ظرفیت | مقیاسبندی در محدودههای از پیش تأییدشده | تغییر محدودیتهای منابع |
| پیکربندی و دسترسی | فعالسازی یک فیچر فلگ از پیش تأییدشده | تغییر IAM، اصلاح پایگاههای داده |
| افعال RBAC | get، list، describe | delete، exec، scale |
| ابزارهای پروژهی پایانی | kubectl_get، promql، logql | kubectl_delete، argocd_rollback |
| دروازه | اجرای فوری | نیازمند تأیید در اسلک |
امتیاز فرضیه
کدpython
def score(self) -> float:
recency_w = max(0.0, 1.0 - self.recency_mins / 60.0) # 0 پس از 60 دقیقه
path_w = 1.0 / (1 + self.path_len) # مسیر کوتاهتر در گراف برنده است
return (recency_w * 0.35 +
self.specificity * 0.35 + # 0..1
min(len(self.citations), 5) / 5 * 0.2 + # حداکثر 5 ارجاع
path_w * 0.1)
اجرای تمرینها
کار و کد| وظیفه | کد |
|---|---|
| شبیهساز تریاژ چندایجنت، درس 23 | code/main.py |
| ایجنت گراف K8s با دروازهی تأییدیه | python main.py |
| بررسی اولیهی اسکلت ساختاری اسلک، سپس اجرای تستها | `npm start` and `npm test` |
| سرور تعاملی اسلک | npm run serve |
| بستهی پستمورتم برگرفته از مثالها | go run . --events ../examples/events.jsonl --review ../examples/review.json --out /tmp/incident-packet |
| ساخت ابزار زمینهی متنی لاگ | rustc --edition 2021 main.rs -o /tmp/log-context |
| فشردهسازی لاگها، بودجهی 8، نادر بودن (rarity) | /tmp/log-context fixtures/burst.log 8 rarity /tmp/context.jsonl |
| گزارش پوشش الگوهای نادر | python3 main.py fixtures/burst.log /tmp/context.jsonl --out /tmp/coverage.json |
محدودیتها در کد
پیشفرضها| تنظیم | پیشفرض | یادداشت |
|---|---|---|
REPLAY_WINDOW_SECONDS | 60 * 5 | درخواستهای قدیمیتر اسلک باطل هستند |
SIGNATURE_VERSION | v0 | هش HMAC sha256 روی v0:ts:body |
rare_max | 2 | تکرار الگوی نادر |
Log input size | 1_048_576 | بایت، یک MiB |
Log records | 10_000 | سطر به ازای هر ورودی |
Log line length | 4096 | بایت به ازای هر سطر |
Event JSONL size | 2<<20 | رویدادهای پستمورتم |
Claims and actions | 100 | هر مورد، در هر بازنگری |
قواعد بستهی پستمورتم
مفهومها- رویداد
- یک ردیف JSONL شامل
id،second،kindوmessage. - خط زمانی
- مرتبسازی بر اساس ثانیه. در صورت تساوی، مرتبسازی با ID.
- ادعا
- متن غیرخالی و حداقل یک شناسه رویداد معتبر و متمایز.
- نقلقول
- هر شناسه شواهد باید زیررشتهای دقیق از پیام رویداد خود باشد.
- تأییدیه
- وضعیت
approvedنیازمندsourceSHA256منطبق و یک بازبین است. - اقدام
- وضعیتهای
open،doingیاdone. فقط حالتopenمیتواند بدون مسئول باشد. - خروجی
- فیلهای index.html، packet.json و packet.txt که با مجوز
0600ذخیره شدهاند.
رشتههای خطا
دستورها| دستور | کارکرد |
|---|---|
review source changed | هش بازنگری با فایل رویدادها مطابقت ندارد |
approval requires matching source and reviewer | ادعای تأییدشده بدون هش یا بازبین |
quote for <id> | نقلقول خالی است یا در متن پیام وجود ندارد |
budget exceeded | تعداد بیش از حد رویدادها، ادعاها یا بایتها |
conflict | شناسهی تکراری برای رویداد یا شواهد |
expected LEVEL<TAB>message | سطر لاگ فاقد کاراکتر تب است |
group count mismatch | تعداد زمینهی متنی با منبع تفاوت دارد |
invalid locator | مقدار firstLine یا lastLine خارج از محدوده است |
پرسش و پاسخ
پرسش و پاسخ- لاگ بازرسی چه چیزی را ثبت میکند؟
- تمام دستورات بررسیشده، اجراشده یا تأییدشده، به همراه مشخصات فرد تأییدکننده.
- معیار قبولی پروژهی پایانی چیست؟
- حداقل 80٪ تشخیص درست علت ریشهای در 20 حادثهی شبیهسازیشده.
- تولید فرضیه چقدر زمان میبرد؟
- شاخص p50 کمتر از 5 دقیقه از زمان هشدار تا ارسال خلاصهی اسلک.
- آیا پیشبینی بهتنهایی کارساز است؟
- خیر. پیشبینی بدون قابلیت اقدام عملی چیزی جز یک داشبورد نیست.
- آیا این بسته علت را اثبات میکند؟
- خیر. منشأ و سندیت بررسی میشود؛ اثبات علیت نیازمند بازنگری است.
- نمونهبرداری یکنواخت یا مبتنی بر نادر بودن؟
- مبتنی بر نادر بودن. نمونهبرداری یکنواخت با بودجهی 8، سطر 138 را از دست میدهد.
نکات کلیدی
نکتهها- رانبوکها را با بخشهای علامت، فرضیه، راستیآزمایی و اقدام بنویسید.
- رانبوکها و پستمورتمها را برای بازیابی در پایگاه دادهی برداری ذخیره کنید.
- پیش از آزمونهای آشوب، موارد SLI/SLO، مشاهدهپذیری، بازگشت به عقب خودکار، رانبوکها و نوبت پاسخگویی (آنکال) را مستقر کنید.
- ماهانه یک روز مانور برگزار کنید. آن را با یک جلسهی پس از حادثه پایان دهید.
- پیش از ارسال زمینهی متنی به دستیار هوشمند، دادههای حساس لاگها را پاکسازی کنید.