Encontranos en redes
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:
[Service]
Restart=always
RestartSec=10
StartLimitIntervalSec=300
StartLimitBurst=5Esto 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:
# 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=1000Método 3: Health check con script personalizado
Creá un script que verifique si el bot está online y lo reinicie si no:
#!/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"
fiProgramalo con cron cada 2 minutos:
*/2 * * * * /usr/local/bin/check-bot.shMétodo 4: Webhook de Discord para alertas
Agregá un heartbeat en tu bot que envíe señales periódicas:
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:
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:
sudo apt install -y msmtp msmtp-mtaConfigurá /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