MonitoreoUptime3 min de lectura

Monitorear uptime de tu bot

Configurar alertas para saber si tu bot se desconecta y reiniciarlo automáticamente.


¿Por qué monitorear tu bot?

Un bot de Discord puede caerse por múltiples razones: errores no manejados, problemas de red, rate limits de la API, o falta de memoria. El monitoreo te permite detectar caídas al instante y actuar antes de que tus usuarios lo noten.

Método 1: Systemd con reinicio automático

Si usás systemd (recomendado), el reinicio automático ya está configurado:

ini
[Service]
Restart=always
RestartSec=10
StartLimitIntervalSec=300
StartLimitBurst=5

Esto reinicia el bot automáticamente si se cae, con un máximo de 5 reinicios en 5 minutos para evitar loops.

Método 2: PM2 con monitoreo integrado

PM2 incluye monitoreo y reinicio automático:

bash
# Ver estado de todos los bots
pm2 status

# Configurar reinicio por uso de memoria
pm2 start bot.js --name "mi-bot" --max-memory-restart 500M

# Reinicio automático si el bot crashea
pm2 start bot.js --name "mi-bot" --exp-backoff-restart-delay=1000

Método 3: Health check con script personalizado

Creá un script que verifique si el bot está online y lo reinicie si no:

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

BOT_SERVICE="discord-bot-python"
LOG_FILE="/var/log/bot-health.log"

# Verificar si el servicio está activo
if ! systemctl is-active --quiet $BOT_SERVICE; then
  echo "$(date): Bot caído, reiniciando..." >> $LOG_FILE
  systemctl restart $BOT_SERVICE
  
  # Notificar por webhook de Discord
  curl -H "Content-Type: application/json" \
    -d '{"content":"⚠️ Bot reiniciado automáticamente"}' \
    "https://discord.com/api/webhooks/TU_WEBHOOK_URL"
fi

Programalo con cron cada 2 minutos:

bash
*/2 * * * * /usr/local/bin/check-bot.sh

Método 4: Webhook de Discord para alertas

Agregá un heartbeat en tu bot que envíe señales periódicas:

python
import aiohttp
import asyncio

async def heartbeat():
    while True:
        async with aiohttp.ClientSession() as session:
            await session.post(
                'https://tu-servicio-uptime.com/api/heartbeat/BOT_ID'
            )
        await asyncio.sleep(60)  # Cada 60 segundos

# Iniciá el heartbeat junto con el bot
bot.loop.create_task(heartbeat())

Método 5: Monitoreo con UptimeRobot o Hetrix

Si tu bot expone un endpoint HTTP de health check:

python
from aiohttp import web

async def health_check(request):
    if bot.is_ready():
        return web.Response(text="OK", status=200)
    return web.Response(text="Bot not ready", status=503)

# Levantar servidor HTTP en puerto 8080
app = web.Application()
app.router.add_get('/health', health_check)

Configurá UptimeRobot para hacer ping a http://TU_IP:8080/health cada 5 minutos.

Configurar alertas por email

Instalá msmtp para enviar emails desde el servidor:

bash
sudo apt install -y msmtp msmtp-mta

Configurá /etc/msmtprc con tu proveedor SMTP y usalo en los scripts de monitoreo.

Recomendaciones

  • Combiná systemd (reinicio automático) con un health check externo (alertas)
  • Configurá un webhook de Discord para recibir alertas en un canal privado
  • Revisá los logs periódicamente para detectar errores recurrentes
  • Si el bot se reinicia constantemente, investigá la causa raíz en vez de solo reiniciar

¿Te resultó útil esta guía?