Настройка мониторинга uptime торгового бота

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

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

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

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

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

Настройка мониторинга uptime торгового бота

Торговый бот который упал в 3 ночи и никто не заметил — это не просто пропущенные сделки. Это открытые позиции без управления, пропущенные стоп-лоссы, и потенциально значительные убытки к моменту когда кто-то это обнаружит. Мониторинг uptime бота — это не Grafana ради красивых графиков, это система которая разбудит вас раньше чем рынок сделает это болезненнее.

Что нужно мониторить

Uptime бота — это не просто «процесс запущен». Процесс может быть живым, но бот не торгует. Нужны три уровня проверок:

Process alive — самый базовый. Процесс запущен, не завис.

Application alive — бот действительно обрабатывает данные. Heartbeat: бот регулярно пишет timestamp последней активности. Если timestamp не обновлялся N минут — что-то не так.

Trading alive — бот не просто работает, но и торгует ожидаемым образом. Метрики: количество ордеров за период, P&L, открытые позиции соответствуют стратегии.

Инструменты

Healthcheck endpoint. Самый простой и надёжный подход — добавить HTTP endpoint в бота:

from fastapi import FastAPI
import asyncio
import time

app = FastAPI()
last_heartbeat = time.time()
bot_state = {"status": "running", "last_trade": None, "open_positions": 0}

@app.get("/health")
async def health():
    age = time.time() - last_heartbeat
    if age > 60:  # не обновлялся больше минуты
        return {"status": "stale", "heartbeat_age_seconds": age}, 503
    return {"status": "ok", **bot_state}

# В основном цикле бота
async def bot_loop():
    global last_heartbeat
    while True:
        last_heartbeat = time.time()
        await run_strategy()
        await asyncio.sleep(5)

Uptime Kuma — self-hosted аналог UptimeRobot. Проверяет HTTP endpoint каждые N секунд, отправляет уведомления в Telegram/Discord/PagerDuty при недоступности. Деплоится за 5 минут на Docker:

docker run -d --restart=always -p 3001:3001 \
  -v uptime-kuma:/app/data louislam/uptime-kuma:1

Для бота: Monitor Type = HTTP, URL = http://your-bot-host:8080/health, interval = 30 seconds, expected status = 200.

Better Uptime / PagerDuty — если нужны SLA-гарантии и escalation политики.

Telegram-алерт напрямую из бота. Самый быстрый способ получить уведомление — бот сам отправляет сообщение при ошибке:

import httpx

async def notify_telegram(message: str):
    await httpx.AsyncClient().post(
        f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage",
        json={"chat_id": CHAT_ID, "text": message}
    )

# В exception handler
try:
    await run_strategy()
except Exception as e:
    await notify_telegram(f"Bot crashed: {e}")
    raise

Prometheus + Grafana для метрик

Для более детального мониторинга — экспортировать метрики в Prometheus:

from prometheus_client import Counter, Gauge, start_http_server

orders_placed = Counter('bot_orders_placed_total', 'Total orders placed', ['symbol', 'side'])
open_positions = Gauge('bot_open_positions', 'Number of open positions')
pnl_gauge = Gauge('bot_unrealized_pnl_usd', 'Unrealized PnL in USD')
last_heartbeat_gauge = Gauge('bot_last_heartbeat_timestamp', 'Last heartbeat timestamp')

# В коде бота
orders_placed.labels(symbol='BTCUSDT', side='buy').inc()
last_heartbeat_gauge.set(time.time())

start_http_server(9090)  # Prometheus scrape endpoint

Alerting rules в Prometheus:

groups:
  - name: trading_bot
    rules:
      - alert: BotHeartbeatStale
        expr: time() - bot_last_heartbeat_timestamp > 120
        for: 1m
        annotations:
          summary: "Trading bot heartbeat stale for {{ $value }}s"
          
      - alert: BotNoOrders
        expr: rate(bot_orders_placed_total[30m]) == 0
        for: 30m
        annotations:
          summary: "Bot placed no orders in 30 minutes"

Watchdog процесс

Если сам бот не может отправить алерт (процесс мёртв) — нужен внешний watchdog. Простейший вариант на bash с кронтабом:

#!/bin/bash
# /usr/local/bin/bot-watchdog.sh

HEALTH_URL="http://localhost:8080/health"
TELEGRAM_TOKEN="..."
CHAT_ID="..."

response=$(curl -s -o /dev/null -w "%{http_code}" --max-time 10 "$HEALTH_URL")

if [ "$response" != "200" ]; then
    curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage" \
      -d "chat_id=${CHAT_ID}" \
      -d "text=ALERT: Trading bot health check failed (HTTP ${response})"
fi
# Crontab: каждую минуту
* * * * * /usr/local/bin/bot-watchdog.sh

Автоматический перезапуск

systemd — если бот запущен как systemd service:

[Unit]
Description=Trading Bot
After=network.target

[Service]
ExecStart=/usr/bin/python3 /opt/bot/main.py
Restart=on-failure
RestartSec=10
StartLimitIntervalSec=60
StartLimitBurst=3

[Install]
WantedBy=multi-user.target

Restart=on-failure — автоматически перезапускает при падении. StartLimitBurst=3 — не более 3 перезапусков за 60 секунд (защита от crash loop).

Docker restart policy: --restart=unless-stopped или --restart=on-failure:3.

Что входит в настройку

Настройка занимает 1-2 дня: добавление healthcheck endpoint в бота (или адаптация существующего), деплой Uptime Kuma / настройка внешнего мониторинга, настройка Telegram-алертов, watchdog скрипт, автоматический перезапуск через systemd/Docker, базовые Prometheus метрики если нужна аналитика по торговой активности.