Настройка уведомлений о сбоях криптобота

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1306 услуг
Настройка уведомлений о сбоях криптобота
Простой
~1 день
Часто задаваемые вопросы

Направления блокчейн-разработки

Этапы блокчейн-разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1307
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1219
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    920
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1148
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    611
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    886

Настройка уведомлений о сбоях крипто-бота

Крипто-бот упал в 3 ночи, пропустил 40 транзакций или завис на одной операции — узнать об этом нужно немедленно, не через 8 часов когда откроете ноутбук. Правильная система алертов закрывает три класса проблем: падение процесса, деградация производительности (бот работает, но медленно или пропускает события), и бизнес-аномалии (нет транзакций уже 2 часа — это нормально или сеть упала?).

Типичная архитектура крипто-бота и точки отказа

Большинство крипто-ботов — это цикл: слушаем события → обрабатываем → действуем. Точки отказа:

  • RPC провайдер — Infura/Alchemy могут возвращать ошибки, ratelimit или отставать от head блока
  • WebSocket соединение — рвётся, бот продолжает работать но не получает события
  • Обработчик транзакций — зависает на одной, блокирует очередь
  • Нехватка gas/SOL — бот не может отправлять транзакции
  • Процесс упал — OOM, необработанное исключение, segfault

Healthcheck endpoint + внешний мониторинг

Самый надёжный подход: бот периодически сообщает "я жив", внешний сервис фиксирует отсутствие сигнала.

// В боте: heartbeat каждые 30 секунд
class BotHealthReporter {
  private lastProcessedBlock: number = 0;
  private processedCount: number = 0;

  startHeartbeat(): void {
    setInterval(async () => {
      const payload = {
        status: 'ok',
        lastBlock: this.lastProcessedBlock,
        processed: this.processedCount,
        timestamp: Date.now(),
        rpcLatency: await this.measureRpcLatency(),
      };
      
      // Betterstack/Healthchecks.io ping
      await fetch(process.env.HEALTHCHECK_PING_URL!, {
        method: 'POST',
        body: JSON.stringify(payload),
      }).catch(() => {}); // Не крашимся если healthcheck недоступен
    }, 30_000);
  }
}

Healthchecks.io — бесплатный сервис для deadman's switch алертов. Настраиваете: "если не получу ping в течение 2 минут — отправь уведомление". Поддерживает Telegram, Email, Slack, PagerDuty.

Betterstack (ex. Logtail) — аналог с более богатым UI и интеграцией с логами.

Telegram-бот для алертов: быстрее email

class TelegramAlerter {
  private bot: Telegraf;
  private chatId: string;

  constructor() {
    this.bot = new Telegraf(process.env.TELEGRAM_BOT_TOKEN!);
    this.chatId = process.env.TELEGRAM_ALERT_CHAT_ID!;
  }

  async sendAlert(level: 'info' | 'warning' | 'critical', message: string): Promise<void> {
    const emoji = { info: 'ℹ️', warning: '⚠️', critical: '🚨' }[level];
    const text = `${emoji} *[${level.toUpperCase()}]*\n\n${message}\n\n_${new Date().toISOString()}_`;
    
    await this.bot.telegram.sendMessage(this.chatId, text, {
      parse_mode: 'Markdown',
    });
  }

  async sendBlockAlert(currentBlock: number, chainHead: number): Promise<void> {
    const lag = chainHead - currentBlock;
    if (lag > 50) {
      await this.sendAlert('critical', 
        `Бот отстаёт от сети на ${lag} блоков\nТекущий: ${currentBlock}\nHead: ${chainHead}`
      );
    }
  }
}

Мониторинг отставания от chain head

Бот может работать без ошибок, но обрабатывать блоки с отставанием — из-за медленного RPC или перегруженного обработчика. Добавляем проверку lag:

async function checkChainLag(provider: JsonRpcProvider, lastProcessed: number): Promise<void> {
  const currentHead = await provider.getBlockNumber();
  const lag = currentHead - lastProcessed;
  
  if (lag > 10)  alerter.sendAlert('warning', `Lag: ${lag} блоков`);
  if (lag > 50)  alerter.sendAlert('critical', `Критическое отставание: ${lag} блоков`);
  
  // Метрика для Grafana
  metrics.gauge('bot_chain_lag_blocks', lag);
}

Алерт на низкий баланс gas wallet

async function checkGasBalance(provider: JsonRpcProvider, botAddress: string): Promise<void> {
  const balance = await provider.getBalance(botAddress);
  const balanceEth = parseFloat(formatEther(balance));
  
  if (balanceEth < 0.05) {
    await alerter.sendAlert('warning', 
      `Низкий баланс gas wallet: ${balanceEth.toFixed(4)} ETH\nАдрес: ${botAddress}`
    );
  }
  if (balanceEth < 0.01) {
    await alerter.sendAlert('critical', 
      `КРИТИЧНО: gas wallet почти пуст: ${balanceEth.toFixed(4)} ETH — бот скоро остановится`
    );
  }
}

Process supervisor: автоперезапуск

Если бот упал — он должен автоматически подняться. PM2 для Node.js:

# ecosystem.config.js
module.exports = {
  apps: [{
    name: 'crypto-bot',
    script: 'dist/bot.js',
    restart_delay: 5000,
    max_restarts: 10,
    min_uptime: '10s', // не считаем рестарт если упал раньше чем через 10s
    error_file: '/var/log/crypto-bot/error.log',
    out_file: '/var/log/crypto-bot/out.log',
  }]
};

pm2 start ecosystem.config.js
pm2 save # автозапуск после перезагрузки сервера

PM2 сам отправляет уведомления через pm2-notify или интеграцию с keymetrics. При каждом рестарте — логируем и отправляем алерт через Telegram.

Итоговый чеклист алертов

  • Отсутствие heartbeat > 2 минут → критический алерт
  • Отставание от chain head > 50 блоков → критический алерт
  • Баланс gas wallet < 0.05 ETH → предупреждение
  • N ошибок подряд в обработчике → критический алерт
  • Процесс перезапустился → информационный алерт
  • RPC latency > 5 секунд → предупреждение