מנוע ניתוח לוגים (Log Event Aggregator)
monitoring/log_analyzer.py מרכז את כל האינטליגנציה שמטרתה להמיר זרם לוגים רועש להתראות פעולה. העמוד מפרט את רכיבי המערכת, הארכיטקטורה והקונפיגורציה שבין monitoring/log_analyzer.py, monitoring/error_signatures.py ו-scripts/run_log_aggregator.py.
ארכיטקטורה
סינון רעשים – השורה עוברת דרך
noise_allowlistשמוגדר ב-config/error_signatures.yml. התאמה תעצור את העיבוד.התאמת חתימה –
ErrorSignatures.match()מחזיר קטגוריה, תקציר, מדיניות וסיווג על בסיס regex.Canonicalization + Fingerprint – מנרמל מזהים דינמיים (UUID, timestamps, נתיבים) ומחשב fingerprint קצר (sha1/12).
חלונות גלילה – לכל fingerprint נשמר
_Groupעם מספר מופעים, דוגמאות אחרונות וטווח הזמנים.הפעלת מדיניות –
immediate_categoriesגורמות לאזעקה מיידית; אחרת נדרש min_count בתוך window_minutes.Cooldown – לאחר התראה, אותו fingerprint לא ישלח שוב עד שיחלוף
cooldown_minutes.שליחה – כברירת מחדל נשלח ל-
internal_alerts.emit_internal_alert; במצב shadow (למשל בטסטים) נוצרת רק שורת לוג.
קונפיגורציה וקבצים
config/error_signatures.yml– מנהל קטגוריות (config/retryable/third_party/…) ורשימת חתימות בעלותpattern. עדכון הקובץ משפיע ישירות על הדירוג והתיאור שנשלח למפעיל. מומלץ לקרוא את קבצי קונפיגורציה ייעודיים ב-Rate Limiting.config/alerts.yml– קובע את חלונות הזמן, ספי הספירה וקטגוריות שחייבות לעבור גם בזמן cooldown. מודגם בפרק ”alerts.yml“ בעמוד הקונפיגורציה.config/observability_runbooks.yml(ולצורך תאימות:config/alert_quick_fixes.json) +config/alert_graph_sources.json– משמשים את ה-Observability Dashboard להצגת Quick Fixes וגרפים בהקשר של ההתראה שהופקה מהלוגים.
הרצת CLI מקומית
scripts/run_log_aggregator.py מאפשר לצרף את המנוע ל-pipeline קיים (למשל tail של Docker). הוא טוען את אותם קבצים כמו הסרוויס הראשי ויכול לרענן חתימות אוטומטית.
export ERROR_SIGNATURES_PATH="config/error_signatures.yml"
export ALERTS_GROUPING_CONFIG="config/alerts.yml"
LOG_AGG_ECHO=1 tail -F logs/app.log | python scripts/run_log_aggregator.py
דגלים חשובים:
LOG_AGG_RELOAD_SECONDS– טעינה מחדש של חתימות/קונפיג בכל N שניות (ברירת מחדל 60).LOG_AGG_ECHO=1– מדפיס ל-stderr כל שורה שסווגה כדי לחקור false positives.ERROR_SIGNATURES_PATH/ALERTS_GROUPING_CONFIG– מצביעים על קובץ חלופי (למשל קובץ ניסוי ב-tmp).
שילוב במערכת
Alert Storage – התראות שמקורן בלוגים נשמרות יחד עם שאר ההתראות, ולכן מופיעות ב-Observability Dashboard, באינטגרציות Slack ובפקודות ChatOps כגון
/triage.Quick Fixes – כל התראה מקבלת רשימת פעולות המבוססת על ה-Runbooks ב-
observability_runbooks.yml(ולצורך תאימות קיימת גםalert_quick_fixes.json). לדוגמה:/triage errors, מעבר ל-Playbook או פתיחת Incident Replay.Visual Context – אם קיימת התאמה ל-
alert_graph_sources.json(לפי metric/category) יוצמד לגרף חיצוני מאושר.
עבודה בטוחה
שכפול לסביבות ניסוי – לפני שינוי regex מהר, הריצו את כלי ה-CLI על snapshot לוגים היסטורי כדי לראות האם נוצרות התראות מיותרות.
בדיקות –
LogEventAggregator.snapshot()מאפשר לבדוק במבחנים האם fingerprint מסוים נאגר והאם הספירה התאפסה לאחר cooldown.Shadow Mode – בעת חיבור הסקריפט לסביבת production מומלץ להתחיל עם
shadow=True(קוד מותאם אישית) כדי לוודא שאין הצפה בהתראות.
ניפוי תקלות נפוץ
אין קבצי קונפיג? ודאו שהנתיבים יחסיים לשורש הפרויקט או שתעבירו נתיב מוחלט.
התראות לא יוצאות? בדקו שהקטגוריה אינה ברשימת
noise_allowlistוש-min_count_defaultאינו גבוה מדי עבור השדה שנמדד.קלסיפיקציה שגויה? השתמשו ב-
LOG_AGG_ECHOכדי לגזור את ה-fingerprint ולהוסיף חתימה חדשה או להרחיב את ה-regex הקיים.