Налаштування моніторингу 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 метрики якщо потребується аналітика по торговій активності.