فاز 19 · درس 6

پروژه پایانی: ساخت ایجنت عیب‌یابی دوآپس برای کوبرنتیز

نوع
پروژه‌ی پایانی
زمان
حدود 9 دقیقه
زبان‌ها
Python (agent), TypeScript (Slack integration)
پیش‌نیاز
فاز 11 (مهندسی مدل‌های زبانی)، فاز 13 (ابزارها و MCP)، فاز 14 (ایجنت‌ها)، فاز 15 (سیستم‌های خودکار)، فاز 17 (زیرساخت)، فاز 18 (ایمنی)
تصویرسازی سه‌بعدی و گرافیکی از گره‌های متصل به هم در یک کلاستر شبکه با هشدار نوری قرمز و کلید تأیید ایمنی مجزا
فهرست مطالب
  1. مسئله
  2. مفهوم
  3. معماری
  4. استک فنی
  5. پیاده‌سازی
  6. استفاده عملیاتی
  7. تحویل نهایی
  8. تمرین‌ها
  9. اصطلاحات کلیدی
  10. برای مطالعه‌ی بیشتر

در سیستم‌های توزیع‌شده و کلاسترهای پیچیده‌ی کوبرنتیز (Kubernetes)، هنگام وقوع حادثه معمولاً مهندسان با حجم عظیمی از هشدارهای هم‌زمان، لاگ‌ها و متریک‌ها مواجه می‌شوند. تریاژ سریع، تشخیص علت ریشه‌ای و کاهش زمان بازیابی سرویس (MTTR) چالش روزمره‌ی تیم‌های دوآپس و SRE است. الگوی نوین عملیاتی به این شکل تثبیت شده که ایجنت‌های هوش مصنوعی وظیفه‌ی خواندن تله‌متری و تحلیل گراف ارتباطات کلاستر را بر عهده بگیرند و انسان‌ها تصمیم نهایی را برای اعمال تغییرات اتخاذ کنند.

در این پروژه‌ی پایانی، یک ایجنت کامل عیب‌یابی با استفاده از LangGraph و پروتکل FastMCP می‌سازید که با دریافت وب‌هوک هشدار، داده‌های Prometheus، Loki و Tempo را پیمایش می‌کند، محتمل‌ترین فرضیه‌های ریشه‌یابی خرابی را همراه با ارجاع دقیق به شواهد امتیازدهی کرده و خلاصه‌ای تعاملی را به Slack می‌فرستد. تمرکز اصلی معماری بر ایمنی، تفکیک دسترسی‌های فقط‌خواندنی و ثبت دقیق لاگ‌های بازرسی است.

اگر برای مدل‌های ریشه‌یابی و خلاصه‌سازی از APIهای خارجی مانند Claude یا Gemini استفاده می‌کنید، توجه داشته باشید که این سرویس‌ها دسترسی با IP ایران را با محدودیت مواجه کرده‌اند و امکان پرداخت مستقیم با کارت‌های شتاب برای آن‌ها وجود ندارد. در چنین شرایطی می‌توانید از مدل‌های باز محلی (مانند Llama 3.3 روی سرورهای اختصاصی) استفاده کنید یا ارتباط با ارائه‌دهندگان ابری را از طریق گیت‌وی‌های واسط سازگار با مشخصات OpenAI مدیریت نمایید.

سرویس DevOps Agent شرکت AWS به مرحله‌ی دسترسی عمومی (GA) رسید، Resolve AI کتابچه‌های راهنمای (playbooks) کوبرنتیز خود را منتشر کرد، NeuBird مانیتورینگ معنایی را به نمایش گذاشت و Metoro مهندسی قابلیت اطمینان سایت مبتنی بر هوش مصنوعی (AI SRE) را به اهداف سطح سرویس (SLO) به ازای هر سرویس گره زد. الگوی محیط عملیاتی (پروداکشن) دیگر تثبیت شده است: وب‌هوک هشدار فعال می‌شود، ایجنت داده‌های تله‌متری را می‌خواند، گراف آبجکت‌های کوبرنتیز را پیمایش می‌کند، فرضیه‌های ریشه‌یابی خرابی (root-cause) را رتبه‌بندی کرده و خلاصه‌ای همراه با دکمه‌های تأیید در اسلک (Slack) می‌فرستد. دسترسی پیش‌فرض فقط‌خواندنی است. هرگونه اقدام اصلاحی به دروازه‌ی تأیید نیروی انسانی وابسته است. این پروژه‌ی پایانی دقیقاً پیاده‌سازی همین ایجنت است که روی 20 رخداد شبیه‌سازی‌شده ارزیابی شده و با ایجنت AWS در سه سناریوی مشترک مقایسه می‌شود.

فازهای تمرین‌شده: P11 · P13 · P14 · P15 · P17 · P18
مدت زمان: 30 ساعت

مسئله

روایت سال‌های 2025 تا 2026 در دنیای SRE این شد: «ایجنت‌های هوش مصنوعی رخدادها را تریاژ می‌کنند، انسان‌ها اقدامات اصلاحی را تأیید می‌کنند». ابزارهای AWS DevOps Agent، Resolve AI، NeuBird، Metoro و PagerDuty AIOps همگی این الگو را در پروداکشن پیاده کرده‌اند. ایجنت متریک‌های Prometheus، لاگ‌های Loki، تریس‌های Tempo، داده‌های kube-state-metrics و گراف دانشی از آبجکت‌های کوبرنتیز را می‌خواند. سپس در کمتر از 5 دقیقه فرضیه‌های رتبه‌بندی‌شده‌ی علت ریشه‌ای را با ارجاع دقیق به شواهد تله‌متری تولید می‌کند. این سیستم هرگز دستورات مخرب را بدون تأیید صریح انسان در Slack اجرا نمی‌کند.

بخش عمده‌ی چالش در تعیین دامنه (scoping) و ایمنی نهفته است، نه فرایند استدلال مدل. ایجنت به یک سطح کنترل دسترسی مبتنی بر نقش (RBAC) با حالت پیش‌فرض فقط‌خواندنی، یک سرور ابزار MCP ایمن‌سازی‌شده، و لاگ‌های بازرسی برای مقایسه‌ی تک‌تک دستورات بررسی‌شده در برابر دستورات اجراشده نیاز دارد. ایجنت باید بداند چه زمانی موضوع خارج از توان تحلیلی اوست تا کار را به نیروی انسانی ارجاع دهد. همچنین هزینه‌ی اجرای آن باید آن‌قدر پایین باشد که خطاهای آبشاری ناشی از کمبود حافظه (OOM-kill cascades) صورت‌حساب 5000 دلاری برای اجرای ایجنت روی دست تیم نگذارد.

مفهوم

این ایجنت روی یک گراف دانش کار می‌کند. گره‌ها شامل آبجکت‌های کوبرنتیز (Pods، Deployments، Services، Nodes، HPAs و PVCs) به‌همراه منابع تله‌متری (سری‌های زمانی Prometheus، استریم‌های لاگ Loki و تریس‌های Tempo) هستند. یال‌ها روابط مالکیت (Pod -> ReplicaSet -> Deployment)، زمان‌بندی استقرار (Pod -> Node) و مشاهده (Pod -> Prometheus series) را مشخص می‌کنند. این گراف با همگام‌سازی مداوم با kube-state-metrics به‌روز نگه داشته می‌شود و با وقوع هر هشدار، دوباره نمونه‌برداری می‌شود.

هنگام فعال شدن هشدار، ایجنت ریشه‌یابی را از همان آبجکت آسیب‌دیده آغاز می‌کند؛ یال‌ها را می‌پیماید، برش‌های مربوط به تله‌متری در 15 دقیقه‌ی گذشته را واکشی می‌کند و پیش‌نویس فرضیه را می‌نویسد. فرضیه‌ها بر اساس شواهد رتبه‌بندی می‌شوند: این‌که چه تعداد ارجاع تله‌متری از آن پشتیبانی می‌کند، این داده‌ها چقدر تازگی دارند و میزان دقت و اختصاصی‌بودن آن‌ها چقدر است. سه فرضیه‌ی برتر همراه با تصویر مسیر پیمایش در گراف و دکمه‌های تأیید برای اقدامات اصلاحی به Slack ارسال می‌شوند.

اقدامات اصلاحی پشت دروازه‌ی تأییدیه قرار دارند. اقدامات مجازِ پیش‌فرض کاملاً فقط‌خواندنی هستند. اقدامات مخرب (کاهش مقیاس، بازگشت به عقب، حذف پادها) نیازمند تأیید در Slack هستند؛ هوک‌های بازگشت به عقب در ArgoCD به توکن احراز هویتی نیاز دارند که هرگز در اختیار ایجنت قرار نمی‌گیرد. لاگ بازرسی تمام دستوراتی را که ایجنت بررسی کرده — نه صرفاً آن‌هایی که اجرا شده‌اند — ثبت می‌کند تا فرایند بازبینی بتواند خطاهای بالقوه و نزدیک به وقوع (near-misses) را شناسایی کند.

معماری

PagerDuty / Alertmanager webhook
           |
           v
     FastAPI receiver
           |
           v
   LangGraph root-cause agent
           |
           +---- read-only MCP tools ----+
           |                             |
           v                             v
   K8s knowledge graph              telemetry slices
     (Neo4j / kuzu)              Prometheus, Loki, Tempo
   ownership + scheduling          last 15m, scoped
           |
           v
   hypothesis ranking (evidence weight)
           |
           v
   Slack brief + approval buttons
           |
           v (approved)
   ArgoCD rollback hook / PagerDuty escalate
           |
           v
   audit log: considered vs executed, every command

استک فنی

  • منابع مشاهده‌پذیری: Prometheus، Loki، Tempo، kube-state-metrics
  • گراف دانش: Neo4j (مدیریت‌شده) یا kuzu (درون‌برنامه‌ای) برای آبجکت‌های کوبرنتیز + یال‌های تله‌متری
  • ایجنت: LangGraph با لیست مجاز به ازای هر ابزار، در حالت پیش‌فرض فقط‌خواندنی
  • بستر انتقال ابزار: FastMCP روی بستر StreamableHTTP؛ سرور جداگانه برای ابزارهای مخرب پشت دروازه‌ی تأییدیه
  • مدل‌ها: Claude Sonnet 4.7 برای استدلال ریشه‌یابی خرابی، Gemini 2.5 Flash برای خلاصه‌سازی لاگ‌ها
  • اقدام اصلاحی: وب‌هوک بازگشت به عقب در ArgoCD، ارجاع به PagerDuty، کارت تأییدیه در Slack
  • لاگ بازرسی: لاگ ساختاریافته‌ی فقط‌افزودنی (بررسی‌شده، اجراشده، تأییدکننده، نتیجه)
  • استقرار: دیپلوی کوبرنتیز با نقش RBAC محدود و اختصاصی در یک نیم‌اسپیس جداگانه
پیمایش علت ریشه‌ایفقط-خواندنی تا زمان تأیید
ROOT-CAUSE WALKAn OOMKilled alert lands on the pod. The agent walks ownership edges up to the deployment and the scheduling edge out to the node, pulling a telemetry slice at each hop. Hypotheses rank by evidence weight, and the winner still waits behind a human approval gate before any remediation runs.پیمایش گراف دانشdeploymentreplicasetpodnodeمالکیتمالکیتهشدار: OOMKilledفرضیه‌های رتبه‌بندی‌شدهمحدودیت‌های بسیار پایین 0.86فشار حافظه node 0.51مسیر پیش‌روی ناموفق 0.22در انتظار تأیید در Slack
یک هشدار OOMKilled روی pod فرود می‌آید. ایجنت یال‌های مالکیت را تا deployment و یال زمان‌بندی را تا node پیمایش می‌کند و در هر گام لغزش، برشی از تله‌متری را واکشی می‌کند. فرضیه‌ها بر اساس وزن شواهد رتبه‌بندی می‌شوند و فرضیه برتر پیش از اجرای هرگونه اصلاح، همچنان پشت دروازه‌ی تأییدیه انسانی منتظر می‌ماند.

پیاده‌سازی

  1. ورود داده‌ها به گراف. همگام‌سازی kube-state-metrics با Neo4j/kuzu در بازه‌های 30 ثانیه‌ای. گره‌ها: Pod، Deployment، Node، Service، PVC و HPA. یال‌ها: OWNED_BY، SCHEDULED_ON، EXPOSES، MOUNTS و SCALES. یال‌های لایه‌ی تله‌متری: OBSERVED_BY (پادی که یک سری زمانی Prometheus آن را مشاهده می‌کند).

  2. دریافت‌کننده‌ی هشدار. اندپوینت FastAPI برای دریافت وب‌هوک‌های PagerDuty یا Alertmanager. استخراج آبجکت‌های تحت‌تأثیر و نقض رخ‌داده در SLO.

  3. سطح دسترسی ابزارهای فقط‌خواندنی. کپسوله‌سازی دستورات kubectl، کوئری‌های Prometheus، لاگ‌های Loki (logql) و تریس‌های Tempo (traceql) از طریق FastMCP. هر ابزار محدود به افعال خواندنی RBAC مانند «get»، «list» و «describe» است. در سرور پیش‌فرض هیچ دستوری مانند «delete»، «exec» یا «scale» وجود ندارد.

  4. ایجنت ریشه‌یابی خرابی. جریان کاری LangGraph با سه گره: گره sample برش داده‌های تله‌متری 15 دقیقه‌ی گذشته را واکشی می‌کند، گره walk گراف را برای آبجکت‌های همسایه کوئری می‌زند، و گره hypothesize پیش‌نویس فرضیه‌های رتبه‌بندی‌شده‌ی علت ریشه‌ای را همراه با ارجاعات تله‌متری تدوین می‌کند.

  5. امتیازدهی به شواهد. فرمول امتیاز هر فرضیه: تازگی × اختصاصی‌بودن × معکوس طول مسیر در گراف × تعداد ارجاعات تله‌متری. 3 مورد برتر را برگردانید.

  6. گزارش خلاصه در Slack. ارسال یک پیوست شامل فرضیه، تصویر مسیر طی‌شده در گراف (یک زیرگراف رندرشده در سمت سرور) و دکمه‌های تأیید برای حداکثر یک اقدام اصلاحی.

  7. دروازه‌ی تأییدیه‌ی اقدامات اصلاحی. ابزارهای مخرب (کاهش مقیاس، بازگشت به عقب، حذف) روی یک سرور MCP ثانویه و پشت یک توکن تأیید قرار دارند. ایجنت تنها زمانی می‌تواند آن‌ها را فراخوانی کند که کارت Slack توسط انسان تأیید شده باشد.

  8. لاگ بازرسی. فایل JSONL فقط‌افزودنی: برای هر دستور کاندیدا، ثبت کنید که آیا بررسی شده، آیا اجرا شده و چه کسی آن را تأیید کرده است. ارسال روزانه‌ی این لاگ‌ها به S3.

  9. مجموعه سناریوهای رخداد شبیه‌سازی‌شده. ساخت 20 سناریو: خطای آبشاری OOMKill، ناپایداری موقت DNS، نوسان شدید HPA، پر شدن PVC، همسایه‌ی پر سر و صدا (noisy neighbor)، مشکل در سایدکار، اعمال ConfigMap معیوب، چرخش گواهی‌نامه، عقب‌گرد دریافت ایمیج (image-pull backoff) و مواردی از این دست. امتیازدهی به ایجنت بر اساس دقت در ریشه‌یابی و مدت زمان رسیدن به فرضیه.

استفاده عملیاتی

webhook: alert.pagerduty.com -> checkout-api SLO breach, error rate 14%
[graph]   affected: Deployment checkout-api (3 Pods, Node ip-10-2-3-4)
[walk]    neighbors: ReplicaSet checkout-api-abc, Service checkout-api,
           recent rollout 14m ago
[sample]  prometheus error_rate 14%, up-trend; loki 500s on /api/v2/pay
[hypo]    #1 bad rollout: latest image checkout-api:v2.41 fails /healthz
          citations: deploy.yaml (rev 42), prometheus errorRate, loki 500 stack
[slack]   [ROLL BACK to v2.40]  [ESCALATE]  [IGNORE]
          (approval required; agent does not roll back unilaterally)

تحویل نهایی

فایل outputs/skill-devops-agent.md خروجی کار است. این ایجنت با دریافت کلاستر کوبرنتیز و منبع هشدار، فرضیه‌های رتبه‌بندی‌شده‌ی علت ریشه‌ای و یک جریان کاری اصلاحی با نظارت انسان در Slack را پیاده می‌کند.

ضریب معیار نحوه‌ی ارزیابی
25 دقت RCA در مجموعه‌ی سناریوها کسب حداقل 80٪ ریشه‌یابی درست در میان 20 رخداد شبیه‌سازی‌شده
20 ایمنی فعال نشدن گارد اقدامات مخرب بدون وجود تأییدیه‌ی اسلک در لاگ بازرسی
20 زمان رسیدن به فرضیه صدک 50 (p50) زیر 5 دقیقه از لحظه‌ی هشدار تا ارسال گزارش به Slack
20 قابلیت تفسیرپذیری ارائه‌ی مسیر پیمایش گراف و ارجاعات تله‌متری برای تمام فرضیه‌ها
15 یکپارچگی کامل سیستم کارکرد سرتاسری اتصال به PagerDuty، Slack، ArgoCD و Prometheus
100

تمرین‌ها

  1. ایجنت خود را روی همان سه سناریویی که برای دموی AWS DevOps Agent استفاده شده است اجرا کنید. نتایج را در کنار هم منتشر کرده و نقاط واگرایی ایجنت را گزارش دهید.

  2. قابلیت ممیزی «خطاهای نزدیک به وقوع» را اضافه کنید تا هر دستوری را که ایجنت بررسی کرده و در صورت نبود تأییدیه می‌توانست مخرب باشد، ثبت کند. نرخ این خطاها را طی یک هفته اندازه بگیرید.

  3. مدل تولید فرضیه را از Claude Sonnet 4.7 به مدل خودمیزبان Llama 3.3 70B تغییر دهید. تفاوت دقت RCA و هزینه‌ی دلاری به ازای هر رخداد را مقایسه کنید.

  4. یک فیلتر علّی بسازید: تمایز بین جهش‌های آماری همبسته در تله‌متری و علت ریشه‌ای واقعی. یک دسته‌بند کوچک بر اساس برچسب‌های 20 سناریو آموزش دهید.

  5. اجرای آزمایشی (dry-run) برای بازگشت به عقب اضافه کنید: اجرای ArgoCD rollback روی یک کلاستر استیجینگ با همان مانیفست. طرح بازگشت به عقب را قبل از فعال شدن دکمه‌ی تأیید در Slack، داخل یک کلاستر زنده اعتبارسنجی کنید.

اصطلاحات کلیدی

اصطلاح در زبان عامیانه معنای دقیق فنی
K8s knowledge graph «گراف کلاستر» گره‌ها = آبجکت‌های کوبرنتیز + سری‌های تله‌متری؛ یال‌ها = مالکیت، زمان‌بندی و مشاهده
Read-only-by-default «محدودسازی RBAC» اکانت سرویس ایجنت فقط مجوزهای get/list/describe دارد؛ افعال مخرب در سروری جداگانه پشت تأییدیه هستند
Audit log «بررسی‌شده در برابر اجراشده» ثبت فقط‌افزودنی تک‌تک دستورات کاندیدا، وضعیت اجرای آن‌ها و شخص تأییدکننده
Hypothesis ranking «امتیاز شواهد» تازگی × اختصاصی‌بودن × معکوس طول مسیر در گراف × تعداد ارجاعات تله‌متری
Slack approval card «دروازه‌ی HITL» پیام تعاملی در Slack با دکمه‌های اقدام اصلاحی؛ ایجنت تا زمان کلیک انسان پیش نمی‌رود
Telemetry citation «اشاره‌گر شواهد» کوئری Prometheus، سلکتور Loki یا URL تریس Tempo که از ادعای مطرح‌شده پشتیبانی می‌کند
MTTR «زمان رفع خرابی» زمان واقعی سپری‌شده از لحظه‌ی شلیک هشدار تا بازیابی کامل SLO

برای مطالعه‌ی بیشتر

خودآزمایی

به سؤال‌ها جواب بدهید تا ببینید چقدر از درس در ذهنتان مانده است.

  1. پیش از درسسطح دسترسی پیش‌فرض در پیکربندی RBAC برای ایجنت عیب‌یابی چیست؟
  2. پیش از درسگراف دانشی که ایجنت در طول تحلیل علت ریشه‌ای پیمایش می‌کند چیست؟
  3. حین درسفرضیه‌های علت ریشه‌ای چگونه برای گزارش خلاصه در Slack رتبه‌بندی می‌شوند؟
  4. حین درسچرا لاگ بازرسی علاوه بر دستورات اجراشده، دستوراتی را که ایجنت صرفاً مد نظر داشته نیز ثبت می‌کند؟
  5. حین درسکدام سازوکار مانع از آن می‌شود که ایجنت در یک استقرار ناموفق به‌صورت یک‌جانبه اقدام به بازگشت به عقب (Rollback) کند؟
  6. پس از درسهدف میانه (p50) زمان رسیدن به فرضیه که شیوه‌نامه‌ی نمره‌دهی آن را می‌سنجد چقدر است؟
  7. پس از درسمجموعه حوادث ساختگی مورد استفاده برای امتیازدهی به دقت RCA چقدر بزرگ است؟

سؤالات متداول

چرا ایجنت عیب‌یابی کوبرنتیز به صورت پیش‌فرض فقط‌خواندنی (Read-only) است؟

برای جلوگیری از رفتارهای غیرمنتظره یا مخرب؛ سطح دسترسی ایجنت محدود به افعالی مثل get و list است و هرگونه اقدام اصلاحی مانند حذف پاد یا rollback نیازمند تأیید صریح انسان در Slack است.

فرضیه‌های علت ریشه‌ای چگونه رتبه‌بندی می‌شوند؟

فرضیه‌ها بر اساس فرمولی شامل تازگی داده‌ها، میزان اختصاصی‌بودن، معکوس طول مسیر در گراف و تعداد ارجاعات تله‌متری معتبر امتیازدهی و مرتب می‌شوند.

نقش گراف دانش در تحلیل خرابی‌های کلاستر چیست؟

گراف دانش روابط مالکیتی، زمان‌بندی و پایش تله‌متری را بین آبجکت‌های کوبرنتیز مدل‌سازی می‌کند تا ایجنت بتواند مسیر انتشار خطا میان پادها، نودها و سرویس‌ها را پیمایش کند.

ما رو توی گوگل بیشتر ببین

با افزودن نکست ادمین به «منابع ترجیحی» گوگل، درس‌ها و مطالب ما را در بخش اخبار برتر جستجو بیشتر می‌بینید.