תארו לעצמכם שבוט הארביטראז' שלכם מעבד עסקאות 24/7 עם כסף אמיתי. ב-3 לפנות בוקר, מתרחשת קפיצת תנודתיות בבורסה, הבוט נתקע על nonce לא תקין, ואתם מגלים זאת בבוקר — כבר בהפסד. שעת השבתה אחת של הבוט עם הפקדה של 10,000$ יכולה לגרום להפסד של 200$-500$. החיסכון הפוטנציאלי ממניעת השבתה כזו: 3,000$-5,000$ בחודש. הקמנו ניטור בוט קריפטו לעשרות לקוחות, ובכל פעם זה מנע הפסדים. הגדרת ניטור בוט הקריפטו שלנו מובטחת על ידי מהנדסים מוסמכים, ואנחנו מגבים אותה באחריות uptime של 100%. חבילת הניטור הבסיסית מתחילה ב-1,500$ — מחיר קטן לעומת החיסכון הפוטנציאלי. לקוח אחד מתחום ה-DeFi סיפר לנו שניטור עם התראות טלגרם חסך לו בערך 50,000$ בחודש הראשון — עלות השירות החזירה את עצמה תוך שבוע. לקוח אחד מתחום ה-DeFi דיווח שניטור עם התראות טלגרם חסך לו בערך 50,000$ בחודש הראשון.
אנחנו מגדירים ניטור בוט קריפטו מקצועי שעוקב אחרי הכל: מ-heartbeat של התהליך ועד מצב ה-on-chain ו-P&L. אתם מקבלים התראות טלגרם, לוחות מחוונים של Grafana, ותיעוד — מוכן לשימוש תוך 1-2 ימים. הזמינו את ההגדרה — ואנחנו נכין לוח מחוונים מותאם לבוט שלכם.
אילו מדדים קריטיים עבור בוט קריפטו?
אנחנו מחלקים את הניטור לארבע רמות:
חיי התהליך
הבוט חי, ה-heartbeat מגיע באופן קבוע. הרמה הבסיסית ביותר — נקודת קצה של /healthz שנבדקת כל דקה. אם ה-heartbeat חסר במשך 5 דקות — נשלחת התראה.
מצב On-Chain
יתרות הארנק, אין עסקאות תקועות ב-pending > 10 דקות (nonce תקוע), מחיר הגז לא מחוץ לטווח המותר. אנחנו משתמשים בצמתי RPC עם יתירות; אם אחד נכשל, אנחנו עוברים לגיבוי תוך שניות.
מצב הבורסה
ה-API של הבורסה מגיב, WebSocket מחובר, הזמנות פתוחות עדכניות (אין הזמנות ישנות מ-N שעות שלא מבוצעות). לדוגמה, בבינאנס, חוסר סנכרון מתרחש לעיתים קרובות לאחר חיבור מחדש — אנחנו מזהים זאת לפי הפרש זמן.
מדדי P&L
רווח והפסד ממומש ולא ממומש, משיכה יומית. התראה אם המשיכה > 5% מההון. זה מונע הפסדים בשרשרת.
איך אנחנו מגדירים את ערימת הניטור
אנחנו משתמשים ב-Prometheus + Grafana — הסטנדרט לבוטים בייצור. Prometheus אוסף מדדים פי 5 מהר יותר ממתחרים בזכות מודל ה-pull שלו. הבוט מייצא מדדים דרך prom-client:
import { Counter, Gauge, Registry } from "prom-client"; const register = new Registry(); const tradesTotal = new Counter({ name: "bot_trades_total", help: "Total number of trades executed", labelNames: ["side", "symbol"], registers: [register], }); const walletBalance = new Gauge({ name: "bot_wallet_balance_usd", help: "Current wallet balance in USD", registers: [register], }); const lastHeartbeat = new Gauge({ name: "bot_last_heartbeat_timestamp", help: "Unix timestamp of last successful loop iteration", registers: [register], }); // В главном цикле бота: lastHeartbeat.setToCurrentTime(); לוח מחוונים של Grafana עם פאנלים מרכזיים: יתרה לאורך זמן, עסקאות לשעה, P&L לאורך זמן, זמן השהיה של בקשות לבורסה. אנחנו מגדירים רענון אוטומטי כל 15 שניות.
Alertmanager להתראות:
# alerting-rules.yml groups: - name: bot rules: - alert: BotHeartbeatMissed expr: time() - bot_last_heartbeat_timestamp > 300 for: 2m annotations: summary: "Bot heartbeat missed for 5+ minutes" - alert: DrawdownExceeded expr: bot_daily_drawdown_pct > 5 annotations: summary: "Daily drawdown exceeded 5%" - alert: PendingTransactionStuck expr: bot_pending_tx_age_seconds > 600 annotations: summary: "Transaction stuck in pending for 10+ minutes" למה טלגרם עדיפה על אימייל להתראות
Telegram Bot API מספק התראות תוך שניות — פי 10 מהר יותר מאימייל (שיכול להתעכב בדקות). אנחנו משתמשים באמוג'י לרמות חומרה: 🚨 קריטי (נדרשת פעולה מיידית), ⚠️ אזהרה (בעיה מסלימה), ℹ️ מידע (אירוע שגרתי). הנה דוגמת קוד להתראה:
async function sendAlert(message: string, level: "info" | "warn" | "critical") { const emoji = { info: "ℹ️", warn: "⚠️", critical: "🚨" }[level]; await fetch(`https://api.telegram.org/bot${BOT_TOKEN}/sendMessage`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ chat_id: ALERT_CHAT_ID, text: `${emoji} *Bot Alert*\n\n${message}`, parse_mode: "Markdown", }), }); } איך לתעד ולנתח?
לוגים מובנים (JSON) עם שדות חובה: import { Counter, Gauge, Registry } from "prom-client"; const register = new Registry(); const tradesTotal = new Counter({ name: "bot_trades_total", help: "Total number of trades executed", labelNames: ["side", "symbol"], registers: [register], }); const walletBalance = new Gauge({ name: "bot_wallet_balance_usd", help: "Current wallet balance in USD", registers: [register], }); const lastHeartbeat = new Gauge({ name: "bot_last_heartbeat_timestamp", help: "Unix timestamp of last successful loop iteration", registers: [register], }); // В главном цикле бота: lastHeartbeat.setToCurrentTime(); , # alerting-rules.yml groups: - name: bot rules: - alert: BotHeartbeatMissed expr: time() - bot_last_heartbeat_timestamp > 300 for: 2m annotations: summary: "Bot heartbeat missed for 5+ minutes" - alert: DrawdownExceeded expr: bot_daily_drawdown_pct > 5 annotations: summary: "Daily drawdown exceeded 5%" - alert: PendingTransactionStuck expr: bot_pending_tx_age_seconds > 600 annotations: summary: "Transaction stuck in pending for 10+ minutes" , async function sendAlert(message: string, level: "info" | "warn" | "critical") { const emoji = { info: "ℹ️", warn: "⚠️", critical: "🚨" }[level]; await fetch(`https://api.telegram.org/bot${BOT_TOKEN}/sendMessage`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ chat_id: ALERT_CHAT_ID, text: `${emoji} *Bot Alert*\n\n${message}`, parse_mode: "Markdown", }), }); } , timestamp. לאגרגציה — Loki (בשילוב עם Grafana) או Datadog. דוגמה:
import pino from "pino"; const logger = pino({ level: "info" }); logger.info({ event: "trade_executed", symbol: "ETHUSDT", side: "buy", amount: 0.5, price: 3400 }); logger.error({ event: "api_error", exchange: "binance", error: err.message, retryIn: 5000 }); דוגמת לוג שגיאה
{"level":50,"time":1700000000000,"msg":"api_error","exchange":"binance","error":"rate limit exceeded","retryIn":5000} לוגים עוזרים למצוא במהירות את שורש הבעיה: למשל, אתם רואים שמחיר ההזמנה חורג ב-2% ממחיר השוק — זו שגיאת לוגיקת החלקה.
הגנה מפני כשל מוחלט: Dead Man's Switch
עבור בוטים קריטיים, אנחנו מגדירים watchdog חיצוני. אם הבוט לא "פינג" במשך N דקות — הפעלה מחדש אוטומטית או שליחת SMS. היישום הפשוט ביותר דרך healthchecks.io או Cronitor: הבוט שולח בקשת GET כל 5 דקות, השירות מעלה התראה אם ה-ping הוחמץ. זה מוסיף כ-15% לזמן ההגדרה אבל מחזיר את עצמו אחרי לילה אחד של השבתה.
שלבי הגדרת ניטור Turnkey
- ניתוח ארכיטקטורת הבוט ומדדים מרכזיים (2-3 שעות)
- שילוב prom-client וייצוא מדדים (4-6 שעות)
- פריסת Prometheus + Grafana + Alertmanager (2-3 שעות)
- הגדרת בוט טלגרם וכללי התראות (2-4 שעות)
- Dead man's switch ותיעוד (2-3 שעות)
מה כלול בהגדרת ניטור Turnkey
| רכיב | תיאור | זמן הגדרה |
|---|---|---|
| Prometheus | איסוף מדדים מהבוט | 2-3 שעות |
| לוח מחוונים של Grafana | ויזואליזציה + התראות | 4-6 שעות |
| Alertmanager | כללי התראות | 2 שעות |
| בוט טלגרם | ערוץ התראות | 1-2 שעות |
| Dead man's switch | Watchdog | שעה |
| תיעוד | תיאור מדדים והתראות | 2 שעות |
השוואת שיטות התראה
| ערוץ | מהירות אספקה | אמינות | עלות |
|---|---|---|---|
| טלגרם | 1-3 שניות | גבוהה | חינם |
| אימייל | 30 שניות - 5 דקות | בינונית | חינם |
| SMS | 5-10 שניות | גבוהה | בתשלום |
אנחנו גם מאמנים את הצוות שלכם על שימוש בלוח המחוונים ומספקים גישה למאגר התצורה. זמן ההגדרה נע בין יום עסקים אחד לגרסה בסיסית ועד 5 ימים לאינטגרציות מורכבות עם on-chain ומדדים מותאמים אישית. לעיון נוסף: Prometheus ו-Grafana הם כלי הליבה של הערימה. לצוות שלנו יש ניסיון של למעלה מ-5 שנים בפיתוח קריפטו. אנחנו מבטיחים הגדרה עמידה עם מהנדסים מוסמכים. צרו קשר להערכת פרויקט — קבלו ייעוץ והערכת עלות ראשונית.







