در این نوشتار هدف مشخص کردن تفاوت های کلیدی بین group_interval و group_wait و repeat_interval که از گزینه های پیکربندی Alerting در Prometheus هستند، است.
قبل از اینکه درباره این سه انتخاب عمیقتر شویم، بهتر است مروری به دو مورد پایه ای درباره Alerting در Prometheus داشته باشیم.
خود Prometheus دارای دو لحظهشمار کلی (global) است که شامل scrape_interval و evalution_interval میشود.
در واقع "scrape_interval" زمانی است که بین هر بار دادهگیری (scrape) مربوط به prometheus طی میشود (برای مثال زمانی که Prometheus داده ها را از exporterها میگیرد.) و "evalution_interval" زمانی است که بین هر بار ارزیابی قوانین Alerting مربوط به Prometheus طی میشود.
زمانی که یک قانون (rule) ارزیابی میشود، وضعیت آن میتواند به هر یک از سه حالت inactive (غیرفعال)، pending (در حال انتظار) و همچنین firing (در حال اعلان) تغییر وضعیت دهد. بعد از مشخص شدن وضعیت آن، این وضعیت بهAlertManager فرستاده میشود تا این اعلان ها به صورت بالقوه آغاز یا پایان بیابند.
برای اینکه از ارسال مداوم اعلان هایی برای اخطارهای مشابه جلوگیری شود.(مثلا فرآیندهای (Processes) مشابهی که بر روی instanceها، nodeها یا مرکز داده های مختلفی fail میشوند.)، میتوان AlertManager را به نحوی پیکربندی کرد این اخطارهای مرتبط را تبدیل به یک اخطار کند. برای نمونه:
group_by: ['alertname', 'job']
در مثال بالا از طریق group_by اخطارها برای اساس اشتراک بر اساس alertname یا job تبدیل به گروه میشوند.(هر یک به تنهایی یا هر دو با هم)
ضمنا group_wait مشخص میکند چه میزان زمان قبل از ارسال اعلان باید سپری شود تا اخطارهای مربوط به یک گروه را جمع آوری کنیم. در واقع از این طریق این امکان فراهم می شود تا اخطارهایی که از Prometheus به AlertManager فرستاده می شوند و با یک label یکسان گروه بندی شده اند را buffer کند:
group_by: ['alertname', 'job'] group_wait: 45s # Usually set between ~0s to a few minutes.
همانطور که در پیکربندی بالا میبینید زمان در نظر گرفته شده برای group_wait معمولا بین 0 ثانیه تا چند دقیقه است.
اگر چه این خصوصیت موجب میشود که اخطارهای آزاردهنده دریافت نشوند و شما را از سردردهای ناشی از زنگ خوردن گوشی نجات میدهد ولی از طرف دیگر موجب میشود زمان ارسال اعلان های خطر به تعویق بیفتد.
مسئله دیگری که باید مدنظر داشته باشیم این است که در ارزیابی های آتی هم همان اعلان خطرهای گروه بندی شده را دریافت خواهیم کرد.
توجه داشته باشیم که group_interval زمانی است که باید بعد از آخرین اعلانی که برای گروه وجود دارد سپری شود تا مطمئن شویم اعلان جدیدی وجود نخواهد داشت.
group_by: ['instance', 'job'] group_wait: 45s group_interval: 10m # Usually ~5 mins or more.
در انتها "repeat_interval" زمانی را مشخص میکند که باید قبل از ارسال مجدد اخطاری که قبلا با موفقیت ارسال شده است بگذرد تا مجدد اخطار را ارسال کند.