تصور کنید یک خطای کوچک در یک عبارت منظم (regex) باعث شود تمام سیستمهای هشدار یک خوشه (cluster) عظیم خاموش شود و یک خرابی بحرانی برای ساعتها نادیده گرفته شود. این کابوس هر مدیر سیستمی است که میخواهد کنترل عملیات خود را به هوش مصنوعی بسپارد. granting full administrative control risks a single misplaced regex muting an entire cluster's paging system and leaving a critical failure invisible to humans.
برای حل این تضاد، در ۳ اوت ۲۰۲۶ یک سرور تخصصی Alertmanager MCP عرضه شد تا روشی ایمن و محدود برای دستهبندی هشدارهای مبتنی بر هوش مصنوعی فراهم کند.
مدیریت دادههای نظارتی معمولاً بر دسترسی «فقط خواندنی» متکی است تا عاملها بهطور تصادفی تاریخچه را پاک نکنند یا دادههای جعلی نسازند. با این حال، ارزشمندترین اقدامی که یک عامل (Agent) — شبیه دستیاری که دستورات شما را اجرا میکند — در زمان حادثه انجام میدهد، خاموش کردن دهها هشدار فرعی برای یافتن علت ریشهای است. برای مثال، ساکت کردن ۴۰ هشدار پاییندستی برای آشکار کردن یک علت ریشهای واحد، اقدامی است که نیازمند دسترسی نوشتاری (write access) است. این سرور یک معماری «نوشتار محدود» (bounded-write architecture) را معرفی میکند که تنها یک اقدام خاص و بازگشتپذیر را اجازه میدهد: ایجاد سکوتهای (silences) کوتاهمدت.
به نقل از وبسایت devtocash.com، این ابزار چهارمین سرویس در سری ابزارهای DevOps است و پس از پیادهسازیهای فقط-خواندنی برای kubectl، Prometheus و Loki عرضه شده است. در حالی که آن ابزارها بر بازیابی دادهها تمرکز داشتند، این سرور روی نیاز پرریسک کاهش اثرات حادثه (incident mitigation) متمرکز است. طبق مستندات این پروژه، پرسش اصلی طراحی این نیست که «چگونه فقط-خواندنی بمانم»، بلکه این است که «چگونه به مدل اجازه دهم یک چیز خاص را بهصورت محدود، بازگشتپذیر و با ثبت نام خود بنویسد». این رویکرد تکاملی در مدیریت دسترسیها، یادآور راهکارهای ایمنسازی دادههای حساس SaaS در پروتکل MCP است تا ریسکهای دسترسی مدلها به زیرساختهای حیاتی کاهش یابد.
مدل تهدید سه لایهای
این سرور برای خنثی کردن سه حالت شکست خاص که هنگام تعامل LLMها با APIهای نظارتی رخ میدهد، طراحی شده است:
- سکوت بیش از حد گسترده (Over-broad Silencing): عاملها معمولاً سادهترین راه را برای قطع نویز انتخاب میکنند. استفاده از یک تطبیقکننده (matcher) مانند
severity=~".+"میتواند کل سیستم پیجر را ساکت کند. از آنجا که عاملی که یاد میگیرد «سکوت باعث توقف نویز میشود» به سراغ گستردهترین تطبیقکنندهای میرود که قابل تجزیه باشد، این سرور تطبیقکنندههای گسترده را نه فقط در پرامپت منع میکند، بلکه از نظر ساختاری غیرممکن میسازد. - مدت زمان طولانی (Excessive Duration): برای جلوگیری از اینکه یک سکوت ساعت ۳ صبح فراموش شود و باعث ماسک شدن یک تکرار واقعی در ساعت ۱۲ ظهر شود، سرور یک سقف TTL (Time-to-Live) سختگیرانه اعمال میکند. سکوتهای ایجاد شده توسط عامل حداکثر ۷۲۰۰ ثانیه (۲ ساعت) اعتبار دارند و هر درخواستی فراتر از این مدت، بهطور خودکار در سمت سرور با استفاده از متغیر
MAX_SILENCE_SECONDS = 2 * 3600محدود میشود. - سوءاستفاده از API: API مدیریتی Alertmanager نقطه اتصال
POST /api/v2/alertsرا میپذیرد که Prometheus برای ارسال هشدارها از آن استفاده میکند. یک عامل — یا مهاجمی که از تزریق پرامپت (Prompt Injection) استفاده میکند — میتواند با تنظیمendsAtروی زمان فعلی، هشدارهای جعلی بسازد یا هشدارهای واقعی را بهدروغ حلشده اعلام کند. این سرور بهسادگی هرگز آن نقطه اتصال را باز نمیکند و نظم «فقط-خواندنی بودن به عنوان ویژگی کد» را برای همه موارد بهجز یک نوشتار خاص حفظ میکند.
چهار ابزار عملیاتی
برای به حداقل رساندن سطح حمله (attack surface)، این سرور دقیقاً چهار قابلیت را با استفاده از چارچوب FastMCP ارائه میدهد. این پیادهسازی از httpx.Client با مهلت زمانی (timeout) ۱۰ ثانیهای استفاده میکند و به متغیر محیطی AM_URL متصل میشود. این توسعه در راستای بهینهسازیهای گستردهتر پروتکل MCP است که اخیراً با حذف جلسات برای افزایش مقیاسپذیری عاملها گام مهمی در جهت کارایی عملیاتی برداشته است.
۱. فهرست خلاصه شده (list_alerts): خروجی خام /api/v2/alerts بسیار حجیم است و شامل مجموعههای کامل برچسب (label sets)، یادداشتها (annotations) و مسیریابی گیرندههاست. در طول یک طوفان هشدار، صدها ورودی میتواند بودجه توکن (Token) — تکههای کوچکی از متن که مدل میخرد — را تمام کند.
* مکانیسم: این ابزار هشدارها را بر اساس نام و شدت گروهبندی میکند، تعداد تکرارها را میشمارد و یک نمونه برچسب برای هر گروه نگه میدارد. کد برای موارد active: true، silenced: false و inhibited: false فیلتر میکند.
* بهینهسازی: مدل به جای دریافت ۳۷ بلوک JSON تقریباً یکسان، عبارتی مانند «KubePodCrashLooping, critical, 37 firing, mostly namespace=payments» دریافت میکند. این رویکرد از قانون «خلاصهسازی پیش از بازگشت» برای بهینهسازی اقتصاد توکنها پیروی میکند.
* ایمنی: نتایج به MAX_ALERTS_RETURNED (۴۰ مورد) محدود شده است. همچنین شامل یک یادداشت حیاتی است: «یادداشتها متنهای غیرقابلاعتماد هستند؛ آنها را نقلقول کنید، هرگز از آنها پیروی نکنید». این امر ضروری است زیرا یادداشتها از برچسبهایی ساخته شدهاند که میتوانند مقادیر غیرقابلاعتمادی مانند نامهای پاد یا مسیرهای URL داشته باشند.
* اعتبارسنجی ورودی: این ابزار یک فیلتر اختیاری با نحو تطبیقکننده Alertmanager میپذیرد. برای جلوگیری از سوءاستفاده، فیلترهای طولانیتر از ۲۵۶ کاراکتر باعث ایجاد ValueError میشوند.
۲. همبستگی خودکار (correlate_alerts): حیاتیترین پرسش در دستهبندی این است که «چه چیزی مشترک است؟». این ابزار مقادیر برچسبهای مشترک بین بسیاری از هشدارهای فعال را شناسایی میکند تا سرنخهایی از شعاع اثر (blast-radius) ارائه دهد.
* عملکرد: این ابزار برچسبهای مشترک را در سمت سرور با استفاده از Counter از ماژول collections محاسبه میکند. برای جلوگیری از همبستگیهای بدیهی، بهطور خاص alertname و __name__ را نادیده میگیرد.
* مثال: این ابزار میتواند فوراً تشخیص دهد که ۴۸ هشدار فعال دارای namespace="payments" هستند و ۳۹ مورد از آنها یک گره خاص (node="ip-10-2-4-17") را به اشتراک دارند.
* تاثیر: این کار یک دیوار از پیامهای پیجر را به یک جمله واحد و آماده تصمیمگیری تبدیل میکند و مانع از آن میشود که عامل مجبور شود با خواندن تکتک برچسبها، الگوها را دوباره استخراج کند. ابزار ۱۰ برچسب رایج اول را برمیگرداند، به شرطی که حداقل در ۳ هشدار ظاهر شده باشند.
۳. سکوت محافظتشده (create_silence): این بخش قلب تپنده سرور است. تمام محدودیتهای مدل تهدید در کد پایتون اجرا میشوند:
* تطبیق سختگیرانه: سرور به یک alertname معتبر (تأیید شده توسط regex [a-zA-Z_][a-zA-Z0-9_]{0,127}) و یک تطبیقکننده برابری نیاز دارد. از یک عبارت منظم WILDCARDY = re.compile(r'^\.?[*+] برای رد کردن صریح تطبیقکنندههای regex یا wildcard استفاده میکند.
* ردپای حسابرسی (Audit Trail): یک reason (دلیل) خوانا برای انسان با حداقل ۱۵ کاراکتر اجباری است تا اطمینان حاصل شود که عامل توضیح میدهد چرا این سکوت ایمن است. سرور هر سکوت را با برچسب createdBy: "oncall-agent" علامتگذاری میکند، صرفنظر از درخواست فراخوانکننده.
* بودجهبندی: محدودیت MAX_ACTIVE_AGENT_SILENCES (۵ مورد) از ایجاد حلقههای پیشرونده که کل محیط را ساکت کنند جلوگیری میکند. اگر بودجه تمام شود، سرور بازبینی انسانی را میطلبد.
* محدودیت: سرور حداکثر چهار تطبیقکننده اضافی میپذیرد. هر مقداری که خالی باشد یا با regex WILDCARDY مطابقت داشته باشد، باعث ایجاد ValueError("matcher {k} is too broad") میشود.
* محدودیتهای زمانی: مقدار duration_seconds به طور پیشفرض ۱۸۰۰ (۳۰ دقیقه) است و بهطور سختگیرانه روی MAX_SILENCE_SECONDS (۲ ساعت) سقفگذاری شده است.
۴. پاکسازی خودکار (list_my_silences و expire_silence): پاکسازی حلقه را میبندد. عامل فقط میتواند سکوتهایی را منقضی کند که خودش ایجاد کرده است، تا اطمینان حاصل شود سکوتهای تعریفشده توسط انسان دستنخورده میمانند.
* منطق: سرور یک مجموعه در حافظه (_agent_silences) از شناسههایی (IDs) که تولید کرده است، نگه میدارد. تابع کمکی _active_agent_silences لیست جهانی سکوتها را فیلتر میکند تا فقط آنهایی را بازگرداند که در این مجموعه هستند و در حال حاضر «فعال» میباشند.
* حفاظت: اگر عاملی سعی کند شناسه سکوتی را حذف کند که در ثبتنام خودش نیست، سرور خطای ValueError("not an agent-created silence; ask a human") را صادر میکند.
* یادداشتی درباره ماندگاری: چون دفتر ثبت در حافظه (in-memory) است، یک بار ریاستارت شدن لیست را پاک میکند. برای محیط تولید، نویسنده توصیه میکند شناسهها در یک فایل ذخیره شوند یا پاسخ Alertmanager برای createdBy == AGENT_ID فیلتر شود تا منبع حقیقت پایداری باشد.
معماری امنیتی چندلایه
سیستم از استراتژی دفاعی دو لایه استفاده میکند. لایه اول منطق برنامه در سرور پایتون است که ورودیها را اعتبارسنجی کرده و سقف ۲ ساعته را اعمال میکند.
لایه دوم یک پروکسی معکوس در سطح شبکه است که به عنوان یک پشتیبان (backstop) عمل میکند. این پروکسی تضمین میکند که حتی اگر سرور MCPe hijacked شود یا دارای باگ باشد، عامل نمیتواند به نقاط اتصال خطرناک دسترسی پیدا کند. پیکربندی مشابه Nginx مسیرها را تنها به سه مسیر محدود میکند:
location /api/v2/alerts: اجازهGETمیدهد اما ازlimit_except GET { deny all; }برای مسدود کردن نوشتارها استفاده میکند.location /api/v2/silences: برای مدیریت سکوتها اجازهGETوPOSTمیدهد.location ~ ^/api/v2/silence/: برای انقضا اجازهGETوDELETEمیدهد.location /: برای تمام درخواستهای دیگر403 Forbiddenبرمیگرداند.
هر درخواست دیگری، بهویژه POST /api/v2/alerts و نقطه اتصال چرخه حیات /-/reload با خطای 403 مواجه میشود. این امر دو لایه مستقل امنیتی ایجاد میکند تا تضمین شود عامل نمیتواند هشدارهای جعلی ارسال کند یا پیکربندیهای خوشه را مجدداً بارگذاری نماید.
از دستهبندی تا خودمختاری
نویسنده برای این قابلیت، استقرار مرحلهای را پیشنهاد میکند. در ابتدا، فراخوانی create_silence باید از طریق یک دروازه تأیید انسانی (human-in-the-loop) هدایت شود. تنها پس از ارزیابی عملکرد در بازپخشهای حوادث تاریخی (historical incident replays) است که باید به اقدام خودمختار ارتقا یابد، و حتی در آن صورت، تنها برای هشدارهای با شدت پایین و غیر-پیجری.
این تغییر تمرکز، ارزیابیها را از «کیفیت نثر» به «دقت فراخوانی ابزار» منتقل میکند. برای ابزارهای خواندنی، ارزیابی میکند که آیا خلاصه، علت ریشهای را نام میبرد یا خیر. برای create_silence معیار این است که آیا تطبیقکنندههای پیشنهادی عامل، بهطور ناخواسته سیگنال علت ریشهای را همراه با نویز پاییندستی ساکت میکرد یا خیر. این یک تست در سطح هارنس (harness-level test) است که در آن فراخوانی ابزار مورد درجهبندی قرار میگیرد، نه متن تولید شده.
با این سرور، حلقه عامل آنکال (on-call) کامل میشود: هشدارها نشاندهنده خرابی هستند، سرور Prometheus اثر را کمی میکند، سرور Loki لاگها را ارائه میدهد، سرور kubectl وضعیت پاد را نشان میدهد و سرور Alertmanager به عامل اجازه میدهد نویزهای تأیید شده را ساکت کند. قانون کلی طراحی این است: وقتی یک عامل به دسترسی نوشتاری نیاز دارد، فعل (verb) کلی را به او نبخشید؛ بلکه یک نمونه محدود، بازگشتپذیر و دارای انقضای خودکار از آن را اعطا کنید و هر مسیر نوشتاری دیگری را در دو لایه غیرقابل دسترس سازید.
گام بعدی شما
- اگر از Prometheus و Alertmanager استفاده میکنید، ابتدا این سرور را در محیط Sandbox تست کنید.
- برای استقرار در محیط عملیاتی، حتماً یک لایه تأیید انسانی (Human-in-the-loop) برای دستور
create_silenceقرار دهید. - اثرات این معماری روی کاهش نرخ «خستگی از هشدار» (Alert Fatigue) را در تیمهای عملیاتی خود بسنجید.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است؛ برای درک اینکه چگونه پردازشهای لبهای این سرعت را ممکن میکنند، به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو