معرفی
آلرتمنجر (Alertmanager) ابزار متنباز مدیریت هشدار در اکوسیستم پرومتئوس (Prometheus) است. پرومتئوس قوانین هشدار (Alert Rules) را ارزیابی میکند و هشدارهای فعال را به Alertmanager میفرستد. از این مرحله به بعد، Alertmanager مشخص میکند اعلانها چگونه گروهبندی شوند، از چه مسیری عبور کنند، به کدام گیرنده (Receiver) برسند و در چه شرایطی ارسال آنها بهطور موقت متوقف شود.
یکی از وظایف مهم Alertmanager، کاهش اعلانهای تکراری و پراکنده است. برای مثال، اگر اختلال در یک پایگاه داده باعث فعالشدن چند هشدار در سرویسهای وابسته شود، Alertmanager میتواند هشدارهای مرتبط را براساس برچسبهای مشخص (Labels) در یک اعلان گروهی قرار دهد. هشدارهای اصلی همچنان بهصورت جداگانه وجود دارند، اما تیم بهجای دریافت تعداد زیادی پیام مستقل، یک اعلان شامل مجموعهای از هشدارهای مرتبط دریافت میکند.
مسیردهی، مهار و کنترل اعلانها در Alertmanager
مسیردهی در Alertmanager از طریق یک درخت مسیر (Routing Tree) انجام میشود. در مسیر ریشه، یک گیرنده پیشفرض تعریف میشود و میتوان مسیرهای فرزند را براساس برچسبهایی مانند تیم، سرویس، محیط یا شدت هشدار ایجاد کرد. به این ترتیب، برای مثال، هشدارهای مربوط به یک سرویس میتوانند به تیم مسئول آن و هشدارهای بحرانی به کانال مناسب عملیات یا تیم کشیک ارسال شوند.
Alertmanager همچنین دو سازوکار مهم برای کنترل اعلانها دارد:
سایلنس (Silence): برای متوقفکردن موقت اعلان هشدارهایی استفاده میشود که با تطبیقگرهای مشخص (Matchers) مطابقت دارند.
مهار هشدار (Inhibition): بهصورت خودکار اعلان برخی هشدارها را در حضور هشدار دیگری مهار میکند. برای مثال، هنگامی که قطعی کامل یک خوشه فعال است، میتوان اعلان برخی هشدارهای پیامدی همان خوشه را مهار کرد.
پیکربندی و عوامل مؤثر بر کیفیت هشداردهی
Alertmanager ابزار جمعآوری متریک (Metrics) نیست و جایگزین Prometheus نمیشود. تولید هشدار معمولاً براساس دادهها و قوانین هشدار پرومتئوس انجام میشود و Alertmanager مدیریت مرحله بعد، یعنی اعلانرسانی و مسیردهی هشدارها را بر عهده دارد.
پیکربندی اصلی این ابزار با فایل YAML انجام میشود و بخشهایی مانند درخت مسیردهی (Routing Tree)، گیرندهها (Receivers)، زمانبندی گروهبندی (Grouping) و قوانین مهار (Inhibition Rules) را در بر میگیرد. سایلنسها نیز از طریق رابط کاربری Alertmanager یا رابط برنامهنویسی کاربردی (API) قابل مدیریت هستند.
کیفیت هشداردهی (Alerting) تنها به تنظیمات Alertmanager وابسته نیست. تعریف قوانین هشدار مناسب، انتخاب برچسبهای پایدار، تعیین گیرنده صحیح و تنظیم زمانبندی گروهبندی و تکرار اعلانها نیز بر میزان نویز هشدارها و امکان اقدام مؤثر براساس آنها تأثیر میگذارند.
مسیر عملی شروع
ابتدا در قواعد هشدار Prometheus، برچسبهای پایدار و تصمیمساز مانند alertname، severity، service، team و environment را تعریف کنید. برچسبی که مقدارش برای هر رخداد تغییر میکند، مانند شناسه پردازش، معمولاً گزینه مناسبی برای group_by نیست.
یک receiver ساده، مانند ایمیل یا webhook آزمایشی، بسازید و یک route پیشفرض برای هشدارهای بدون مسیر مشخص قرار دهید.
سپس route-های اختصاصی را بر اساس team و severity اضافه کنید. هشدار بحرانی باید به گیرنده فوری برسد و هشدارهای کماهمیتتر میتوانند به کانال اطلاعرسانی تیم بروند.
برای تمرین، دو قانون هشدار بسازید که هر دو اختلال یک سرویس را گزارش کنند. آنها را با service و environment یکسان به Alertmanager بفرستید و بررسی کنید یک اعلان گروهی، با فهرست هشدارهای عضو، دریافت میشود.
موفقیت پیکربندی را با دو معیار بسنجید: هشدار بحرانی در زمان مورد انتظار به گیرنده درست برسد و یک رخداد واحد به اعلانهای تکراری و پراکنده تبدیل نشود.
پس از تثبیت مسیرهای پایه، Silence را فقط برای نگهداریهای زماندار و با تطبیق دقیق برچسبها بهکار ببرید. Inhibition نیز زمانی مناسب است که یک هشدار علت اصلی، مانند قطع میزبان، باید هشدارهای پیامدی سرویسهای وابسته را موقتاً مهار کند.
ویژگیهای کلیدی
موارد زیر تصویری کلی از این بخش برای این ابزار ارائه میکنند.
-
گروهبندی هشدارهای مرتبط
هشدارهای دارای برچسبهای مشترک را در یک اعلان جمع میکند تا یک رخداد زیرساختی به دهها پیام جداگانه تبدیل نشود.
-
مسیردهی مبتنی بر برچسب
بر اساس برچسبهایی مانند severity، service، team یا environment، هر هشدار را به گیرنده مناسب هدایت میکند.
-
بیصدا کردن موقت هشدار
با Silence میتوان هشدارهای مشخص را برای یک بازه زمانی خاموش کرد؛ مثلاً هنگام نگهداری برنامهریزیشده یک سرویس.
-
مهار هشدارهای کماهمیت
قوانین Inhibition اجازه میدهند هشدارهای فرعی در حضور یک هشدار جدیتر ارسال نشوند. برای مثال، پنهان کردن هشدار سرویسهای وابسته هنگام قطعی میزبان یکی از این موارد است.
-
ارسال به کانالهای گوناگون
میتواند اعلان را به ایمیل، Slack، Microsoft Teams، PagerDuty، webhook و یکپارچهسازیهای دیگر ارسال کند.
-
پشتیبانی از افزونگی
چند نمونه آلرتمنجر میتوانند برای کاهش نقطه شکست واحد اجرا شوند و وضعیت Silence و اعلانها را میان خود هماهنگ کنند.
کاربردها
برای آشنایی بهتر با این ابزار، توجه به موارد زیر میتواند مفید باشد.
-
هشداردهی برای سرویسهای Kubernetes
هشدارهایی مانند CrashLoopBackOff باید ابتدا از متریکهای exporterهایی مانند kube-state-metrics و قواعد Prometheus تولید شوند. Alertmanager سپس برچسبهایی مانند namespace، service یا team را برای مسیردهی به تیم مسئول بهکار میگیرد.
-
کاهش هشدارهای تکراری در رخدادها
گروهبندی خطاهای متعدد ناشی از یک علت مشترک، مانند اختلال شبکه یا قطع پایگاه داده، برای تمرکز تیم روی ریشه رخداد.
-
تفکیک هشدارهای عملیاتی و کسبوکاری
هدایت هشدارهای بحرانی زیرساخت به تیم عملیات و هشدارهای مرتبط با شاخصهای محصول به تیم یا کانال دیگری.
-
مدیریت زمان نگهداری
ثبت Silence زماندار برای جلوگیری از ارسال هشدارهای مورد انتظار هنگام استقرار نسخه جدید، مهاجرت یا تعمیر زیرساخت.
-
یکپارچهسازی با سامانه کشیک
Alertmanager میتواند هشدار را با route و تکرار اعلان به webhook یا سامانه کشیک بفرستد. تشدید مرحلهای بر اساس حلنشدن رخداد معمولاً باید در گیرنده یا سامانه کشیک بیرونی طراحی شود.
پرسشهای رایج درباره آلرتمنجر
در این بخش، به تعدادی از پرسشهای رایج درباره این ابزار پاسخ داده شده است.
تفاوت Prometheus و آلرتمنجر چیست؟
Prometheus متریکها را جمعآوری میکند و قوانین هشدار را ارزیابی میکند. آلرتمنجر هشدارهای تولیدشده را گروهبندی، مسیردهی، بیصدا و به گیرندهها ارسال میکند.
آیا میتوان از آلرتمنجر بدون Prometheus استفاده کرد؟
بله، سامانههای دیگر نیز میتوانند هشدار سازگار با API آلرتمنجر ارسال کنند. با این حال، رایجترین کاربرد آن دریافت هشدار از Prometheus است.
آیا آلرتمنجر هشدار را به تلگرام ارسال میکند؟
ارسال مستقیم تلگرام جزو گیرندههای اصلی داخلی آن نیست، اما میتوان با webhook و یک سرویس واسط، پیام را به ربات یا کانال تلگرام فرستاد.
Silence با Inhibition چه تفاوتی دارد؟
Silence یک خاموشسازی موقت و دستی یا APIمحور برای هشدارهای منطبق است. Inhibition یک قانون خودکار است که هشدار فرعی را در حضور هشدار اصلی مهار میکند.
برای شروع یادگیری آلرتمنجر چه چیزهایی لازم است؟
ابتدا باید مفاهیم متریک، برچسب، قانون هشدار و Prometheus را بدانید. سپس پیکربندی route، receiver، group_by، Silence و Inhibition را با یک محیط آزمایشی تمرین کنید.