התראות על כשלי גרידה: למה ומתי?
הפרסר קרס בלילה — עד הבוקר הנתונים מיושנים ואף אחד לא יודע למה. ראינו את זה ב-80% מהפרויקטים שבהם הניטור הוגבל ללוגים. מערכת התראות פותרת את זה: האדם הנכון מקבל הודעה על כשל בפרסור ברגע שהוא מתרחש — דרך טלגרם או אימייל, עם מספיק הקשר לאבחון. ללא התראות כאלה, מהנדס מבלה שעות בחיפוש אחר הגורם בעוד נתוני הלקוח נשארים מיושנים.
התראות אוטומטיות אינן מותרות; הן הכרחיות לכל צינור גרידה. חוסר ניטור מוביל לאובדן נתונים ולסיכון מוניטיני. לדוגמה, שינוי במבנה האתר היעד יכול להיעלם מעיניים במשך ימים עד שמצטברת תוצאה ריקה. היישום שלנו מסוף לסוף — מתכנון ועד פריסה — מאפשר להוסיף התראות במהירות לכל פרסר על כל טכנולוגיה, וחוסך עד 10 שעות של פתרון תקלות בחודש.
אילו אירועים דורשים התראה?
לא כל שגיאה היא כשל. פסק זמן בודד הוא נורמלי — העובד ינסה שוב. מערכת ההתראות מופעלת על:
- משימה שמיצתה את כל הניסיונות (הועברה ל-DLQ או נכשלה סופית)
- קריסת עובד (קריסת תהליך, OOM)
- שיעור שגיאות שחצה סף ב-15 הדקות האחרונות (למשל >20%)
- גרידת אתר שלא הסתיימה בזמן הצפוי (פסק זמן של watchdog)
- מבנה העמוד השתנה — הפרסר מחזיר נתונים ריקים
איזה ערוץ התראות: טלגרם או אימייל?
| ערוץ | מהירות מסירה | אמינות | עלות | מקרה שימוש טיפוסי |
|---|---|---|---|---|
| טלגרם | 1–2 שניות | גבוהה (עם אינטרנט) | חינם | התראות קריטיות מיידיות |
| אימייל (SMTP) | 10–60 שניות | בינונית (עלול להגיע לספאם) | נמוכה | תקצירים אינפורמטיביים, דוחות |
| אימייל (SendGrid) | 2–10 שניות | גבוהה | בתשלום לפי עסקה | התראות טרנזקציוניות עם מסירה מובטחת |
בדרך כלל אנו ממליצים על טלגרם להתראות ברמת P1 (אתר למטה) ועל אימייל לאירועים פחות דחופים. מניסיוננו, תכנית היברידית מקצרת את זמן התגובה של המהנדס פי 3–4.
למה טלגרם הכי טובה לכשלים קריטיים?
הודעות טלגרם מגיעות פי 10–30 מהר יותר מאימייל דרך SMTP ואינן כפופות למסנני ספאם. בפרויקטים שלנו, הזמן מכשל ועד קבלת ההתראה דרך טלגרם לעולם אינו עולה על 2 שניות. למשימות שבהן כל שנייה של השבתה עולה כסף, טלגרם היא הבחירה היחידה. לפי תיעוד Telegram Bot API, הודעות נמסרות כמעט מיידית.
טלגרם: הגדרת בוט ושליחת התראות
קוד לדוגמה לשליחת הודעה דרך Telegram Bot API:
import httpx import textwrap async def send_telegram_alert(bot_token: str, chat_id: str, event: dict): text = textwrap.dedent(f""" 🔴 <b>Сбой парсинга</b> <b>Сайт:</b> {event['site_name']} <b>URL:</b> <code>{event['url']}</code> <b>Ошибка:</b> {event['error_type']} <b>Сообщение:</b> <code>{event['error_message'][:300]}</code> <b>Попыток:</b> {event['attempts']} <b>Время:</b> {event['timestamp']} """).strip() async with httpx.AsyncClient() as client: await client.post( f"https://api.telegram.org/bot{bot_token}/sendMessage", json={"chat_id": chat_id, "text": text, "parse_mode": "HTML"}, timeout=10, ) אימייל: הגדרת SMTP ו-SendGrid
לאימייל, ניתן להשתמש ב-SMTP (smtplib עם TLS) או ב-SendGrid למסירות טובות יותר. דוגמה עם SendGrid:
from sendgrid import SendGridAPIClient from sendgrid.helpers.mail import Mail def send_email_alert(to_email: str, event: dict): message = Mail( from_email='[email protected]', to_emails=to_email, subject=f"[Парсинг] Сбой: {event['site_name']}", html_content=render_alert_template(event), ) sg = SendGridAPIClient(api_key=SENDGRID_API_KEY) sg.send(message) איך דדופליקציה מונעת הצפת התראות?
ללא דדופליקציה, כשל המוני (ספק פרוקסי למטה) היה מפעיל 500 אימיילים בדקה. הפתרון הוא קיבוץ לפי מפתח עם קירור. התראה אחת לכל סוג שגיאה בכל 30 דקות היא איזון סביר בין אינפורמטיביות לרעש. בניסיון שלנו, זה מפחית התראות ב-95% תוך שמירה על מידע קריטי.
def should_send_alert(site_id: int, error_type: str, cooldown_minutes: int = 30) -> bool: key = f"alert_sent:{site_id}:{error_type}" if redis.exists(key): return False redis.setex(key, cooldown_minutes * 60, "1") return True | שיטת דדופליקציה | ביצועים | סובלנות לתקלות | מורכבות יישום |
|---|---|---|---|
| Redis (מומלץ) | ~1 אלפית שנייה לבדיקה | גבוהה (מתמשך) | נמוכה (setex) |
| מילון בזיכרון | <0.1 אלפית שנייה | נמוכה (אבוד באתחול) | נמוכה מאוד |
תצורת דוגמה עם Redis:
import redis import os r = redis.Redis.from_url(os.environ["REDIS_URL"]) COOLDOWN = 30 # minutes def should_send_alert(site_id, error_type): key = f"alert_sent:{site_id}:{error_type}" if r.exists(key): return False r.setex(key, COOLDOWN * 60, "1") return True איך להגדיר התראות טלגרם ב-15 דקות?
- צור בוט דרך @BotFather וקבל את הטוקן.
- קבע chat_id (השתמש ב-@userinfobot).
- שלב את הפונקציה send_telegram_alert בפרסר שלך.
- הפעל אותה באירועי כשל.
- בדוק את השליחה.
תהליך היישום: מניתוח ועד פריסה
- תכנון תכנית התראות (ערוצים, ספים, קירור).
- פיתוח קוד התראות (בוט טלגרם / SendGrid / SMTP).
- יישום דדופליקציה עם Redis או בזיכרון.
- אינטגרציה עם הפרסר שלך (webhook או API).
- תיעוד והדרכת צוות.
- תמיכה למשך שבועיים לאחר המסירה.
לוח זמנים ועלות
פתרון בסיסי (טלגרם + אימייל עם דדופליקציה) — מיום עסקים אחד עד יומיים. אם נדרשת אינטגרציה עם ניטור קיים או חוקים מותאמים אישית — עד 5 ימי עסקים. העלות מחושבת באופן אישי לפי מורכבות: צור קשר להערכת פרויקט חינמית.
ניסיון ואחריות
בנינו מערכות ניטור לפרויקטים עם 10 מיליון בקשות ביום. מעל 5 שנות ניסיון בגרידה ו-50+ יישומים מוצלחים מבטיחים שההתראות לא יפספסו כשל קריטי. הזמן יישום מערכת התראות — והישאר תמיד מעודכן לגבי מצב הגרידה שלך.







