Настройка мониторингу роботи крипто-бота
Торговий або арбітражний бот — це stateful процес, який працює 24/7 з реальними грошима. Без моніторингу перший же збій перетворюється на убиток, який ви виявите вранці. Хороша система мониторингу замічає проблему раніше, ніж вона стає дорогостоючою.
Що монюруємо
Здоров'я процесу: бот живий, heartbeat приходить регулярно. Найбазовіший рівень — /healthz endpoint, який перевіряється раз в хвилину.
On-chain стан: баланси кошельків, немає транзакцій в pending > 10 хвилин (застрявший nonce), gas price не вийшов за межи дозволеного діапазону.
Біржовий стан: API біржі відповідає, WebSocket підключений, open orders актуальні (немає ордерів старше N годин які не виконуються).
P&L метрики: реалізований і нереалізований PnL, дневний drawdown. Алерт якщо drawdown > X% від капіталу.
Стек мониторингу
Prometheus + Grafana — стандарт для production ботів. Бот експортує метрики:
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 по часу, latency біржевих запитів.
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-повідомлення
Для немедленних алертів простіше всього Telegram Bot API:
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) з обов'язковими полями: timestamp, level, event, data. Для агрегації — 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 });
Dead man's switch
Для критичних ботів — зовнішній watchdog. Якщо бот не "постукав" за N хвилин — автоматично перезапускаємо або шлемо SMS. Найпростіша реалізація через healthchecks.io або Cronitor: бот шле GET-запит кожні 5 хвилин, сервіс піднімає алерт при відсутності пінгу.
Настройка базового мониторингу з Prometheus, Grafana і Telegram-алертами: 1 робочий день. Включаючи конфігурацію alerting rules під специфіку конкретного бота.







