התראות (Alerts)
סקירה מהירה
docker/prometheus/prometheus.ymlמחבר את Prometheus לקובץ החוקים ואל Alertmanager.docker/prometheus/alerts.ymlשומר את חוקי ברירת המחדל שלנו.docker/alertmanager/alertmanager.ymlמטפל במסלולי המסירה (webhook, Slack וכו«).
חוקי ברירת המחדל
החוקים המוגדרים כרגע מכסים שגיאות, זמני תגובה ועמידה ב-SLO:
groups:
- name: codebot_alerts
rules:
- alert: HighErrorRate
expr: rate(errors_total[5m]) > 0.05
for: 5m
labels:
severity: warning
annotations:
summary: "שיעור שגיאות גבוה (>5% בדקה)"
- alert: SlowOperationsP95
expr: (histogram_quantile(0.95, rate(operation_latency_seconds_bucket[5m])) > 2) and on(job, instance) (time() - process_start_time_seconds > 300)
for: 10m
labels:
severity: warning
annotations:
summary: "פעולות איטיות: P95 > 2 שניות"
- alert: SLOAvailabilityBreach
expr: |
(
sum(rate(http_requests_total{status!~"5.."}[5m]))
/
sum(rate(http_requests_total[5m]))
) < 0.999
for: 1h
labels:
severity: warning
annotations:
summary: "ירידה בזמינות (SLO 99.9%)"
- alert: SLOLatencyP95Breach
expr: |
(
histogram_quantile(
0.95,
sum by (job, instance, le) (rate(http_request_duration_seconds_bucket{endpoint!~"(metrics|health|static.*|favicon.*)"}[5m]))
) > 1.5
)
and on(job, instance) (time() - process_start_time_seconds > 300)
for: 15m
labels:
severity: warning
component: webapp
annotations:
summary: "זמן תגובה גבוה ב-P95 מעל 1.5 שניות (מתמשך)"
- alert: SLOLatencyP95Critical
expr: |
(
histogram_quantile(
0.95,
sum by (job, instance, le) (rate(http_request_duration_seconds_bucket{endpoint!~"(metrics|health|static.*|favicon.*)"}[5m]))
) > 3
)
and on(job, instance) (time() - process_start_time_seconds > 300)
for: 30m
labels:
severity: critical
component: webapp
annotations:
summary: "קריטי: זמן תגובה P95 מעל 3 שניות לאורך זמן"
התאמה לצרכים שלך
מטריקות: ודא שהשירות חושף
errors_totalו-http_request_duration_seconds_bucket. אם השם שונה, עדכן את הביטוי.ספים: 5% שגיאות או 0.5 שניות P95 אולי לא מתאימים. החלף את המספרים למה שאתה מצפה בפועל.
תוויות: הוסף
team,serviceאוenvironmentכדי לסנן טוב יותר ב-Alertmanager.
מדדי Health ו-Startup ל-Prometheus
התאמת /healthz ל-Prometheus מאפשרת לנו לסמן חריגות בזמן אמת ובעזרת טרנדים היסטוריים. החוקים הבאים מתווספים ל-docker/prometheus/alerts.yml ומשתמשים ב-offset ו-predict_linear כדי להשוות מול בסיס יציב:
- alert: SlowMongoConnection
expr: (min_over_time(health_ping_ms[5m]) > 100) and on(job, instance) (time() - process_start_time_seconds > 300)
for: 0m
labels:
severity: warning
component: mongo
annotations:
summary: "זמן פינג למונגו חוצה 100ms"
- alert: MongoLatencyRegressionVsBaseline
expr: |
(
avg_over_time(health_ping_ms[30m] offset 6h) > 0
)
and
(
avg_over_time(health_ping_ms[30m])
> avg_over_time(health_ping_ms[30m] offset 6h) * 1.5
)
and on(job, instance) (time() - process_start_time_seconds > 300)
for: 10m
labels:
severity: warning
component: mongo
annotations:
summary: "הממוצע הנוכחי גבוה ב־50% מה-baseline שלפני 6 שעות"
- alert: MongoLatencyPredictiveSpike
expr: (predict_linear(health_ping_ms[1h], 10m) > 120) and on(job, instance) (time() - process_start_time_seconds > 300)
for: 0m
labels:
severity: critical
component: mongo
annotations:
summary: "חיזוי: פינג למונגו יעלה מעל 120ms"
- alert: MongoDisconnected
expr: health_mongo_status == 0
for: 2m
labels:
severity: critical
component: mongo
annotations:
summary: "מונגו לא זמין"
- alert: AppLatencyEWMARegression
expr: |
(
health_latency_ewma
> predict_linear(health_latency_ewma[2h], 15m) * 1.2
)
and on(job, instance) (
sum by (job, instance) (increase(http_requests_total[2h])) > 200
)
and on(job, instance) (time() - process_start_time_seconds > 300)
for: 10m
labels:
severity: warning
component: webapp
annotations:
summary: "EWMA של האפליקציה מזנקת ביחס לטרנד"
החוקים עם offset משווים בין חצי שעה אחרונה לבין אותו חלון בדיוק שש שעות אחורה, כדי לזהות סטיה ביחס לשגרה היומית. הוספנו תנאי בסיס שדורש שה-baseline יהיה גדול מאפס כדי למנוע false positives אחרי חזרה מתקלה שבה ה-ping הוחזק כ-0. החוקים המבוססים על predict_linear נותנים heads-up לפני שהערך באמת חוצה את הסף ולכן מקבלים severity גבוה יותר ו-for קצר לצמצום זמן התגובה. בנוסף הוספנו ”תקופת חסד“ של 5 דקות אחרי עליית התהליך (time() - process_start_time_seconds > 300) כדי למנוע התראות שווא בזמן cold start אחרי דיפלוי.
קונפיגורציית alert_manager באפליקציה
הקוד של הבוט מחשב ספים אדפטיביים ומחליט האם להדליק התראה לפי הנתונים שנאגרו בחלון של 5 דקות. ניתן לכייל את ההתנהגות בלי לשנות קוד בעזרת משתני סביבה:
ALERT_COOLDOWN_SEC– כמה זמן חייב לעבור בין שתי התראות מאותו סוג (ברירת מחדל: 300 שניות).ALERT_THRESHOLD_SCALE– פקטור כללי להרחבת ”טווח הנורמה“. אפשר גם להגדירALERT_ERROR_THRESHOLD_SCALEאוALERT_LATENCY_THRESHOLD_SCALEכדי לשלוט בכל מדד בנפרד. לדוגמה, ערך2יכפיל את הסף שמחושב מאליו.ALERT_MIN_SAMPLE_COUNT– כמה דגימות מינימליות חייבות להיות בחלון טרם נשלחת התראה (ברירת מחדל: 15). ניתן לחדד עםALERT_ERROR_MIN_SAMPLE_COUNTאוALERT_LATENCY_MIN_SAMPLE_COUNT.ALERT_TELEGRAM_SUPPRESS_ALERTS– רשימת שמות alerts (מופרדים בפסיקים) שלא יישלחו לטלגרם. ברירת מחדל:AppLatencyEWMARegression; השאר ריק כדי לאפשר את כולם.
מומלץ להתחיל מהברירות מחדל ולהעלות את הערכים רק אם אתם חווים רעש. אפשר לשלב בין הגדלת מספר הדגימות המינימלי לבין הרחבת הסף כדי לתת לבוט ”להירגע“ בספייקים קצרים.
טעינת שינויים
אחרי עריכה של alerts.yml או prometheus.yml:
הרץ
docker compose up -d prometheus alertmanagerכדי לטעון את הקבצים מחדש.לחלופין,
docker compose exec prometheus kill -HUP 1יבקש reload בלי עצירה מלאה.בדוק שהכול תקין עם
docker compose exec prometheus promtool check rules /etc/prometheus/alerts.yml.
בדיקת הזרימה בקצה השני
Alertmanager שולח כרגע ל-webhook בכתובת
http://code-keeper-bot:8000/alertmanager/webhook. ודא שהיעד נקרא כמו שצריך.להוספת Slack או יעד נוסף, ערוך את
docker/alertmanager/alertmanager.ymlוהפעל אתslack_configsעם הסוד המתאים.השתמש ב-
amtool(אם מותקן) או בממשק ה-Web של Alertmanager כדי לוודא שההתראות מתקבלות.
טיפים אחרונים
אם תוסיף הרבה חוקים, שקול לפצל אותם לקבצים שונים ולעדכן את
rule_files.עבור כל חוק, כתוב
summaryקצר וברור – זה הטקסט שמופיע בהתראה.אפשר להוסיף
promtool test rulesעם דוגמאות של מטריקות כדי לתפוס שגיאות לוגיקה מראש.
ראו גם
התראות מערכת – דיסק כמעט מלא
בנוסף לחוקי Prometheus, הבוט מפעיל התרעת מערכת פנימית לפני שמירת קובצי ZIP כאשר המקום הפנוי בדיסק נמוך מהסף.
שם אירוע:
disk_low_space(נרשם גם ב‑observability)ערוץ: Internal Alerts (Telegram/Slack אם מוגדרים
ALERT_TELEGRAM_*)DM למנהלים: אם מוגדרים
BOT_TOKENו‑ADMIN_USER_IDS— נשלחת הודעה פרטית לכל אדמיןסף ברירת מחדל: 200MB; ניתן לשנות בעזרת
BACKUPS_DISK_MIN_FREE_BYTESRate‑limit: התרעה אחת לכל 10 דקות כדי למנוע הצפה
ראו גם בטבלת ENV: BACKUPS_DISK_MIN_FREE_BYTES.