El mayor portal de MU Online de Brasil — desde 2003
Tutorial Intermedio Infra

Cómo configurar alertas de incidentes vía Telegram para tu servidor de MU Online

Monta un sistema de alertas vía bot de Telegram para enterarte en segundos cuando el GameServer, MySQL o el sitio de tu servidor de MU Online se caigan, con scripts de monitoreo, escalamiento y pruebas de falla controladas.

GA Gabriel · Actualizado el 31 jul 2026 · ⏱ 15 min de lectura
Respuesta rápida

Cuando el GameServer se cae a las 3 de la madrugada y nadie se entera hasta que los jugadores empiezan a quejarse en Discord, el costo no es solo técnico — es reputacional, y en servidores monetizados, también financiero (donaciones y eventos pagos interrumpidos sin aviso). Un sistema de alertas vía

Cuando el GameServer se cae a las 3 de la madrugada y nadie se entera hasta que los jugadores empiezan a quejarse en Discord, el costo no es solo técnico — es reputacional, y en servidores monetizados, también financiero (donaciones y eventos pagos interrumpidos sin aviso). Un sistema de alertas vía Telegram resuelve este punto ciego, avisando al equipo de administración en segundos, directo al celular, sin depender de que alguien esté mirando un panel. Este tutorial muestra cómo crear el bot, escribir los scripts de verificación de los servicios críticos de tu servidor de MU Online, configurar el escalamiento y probar fallas de forma controlada antes de confiar en el sistema en producción.

Por qué Telegram y no correo o SMS

El correo tiene un retraso de entrega variable y con frecuencia cae en spam cuando se envía desde un script automatizado sin infraestructura de SMTP con buena reputación. El SMS tiene costo por mensaje y no escala bien para alertas frecuentes. Telegram, en cambio, ofrece una API de bot gratuita, entrega casi instantánea vía push notification en el celular, y soporta grupos con múltiples administradores recibiendo la misma alerta simultáneamente — es el canal más usado hoy por administradores de servidores privados justamente por esta combinación de costo cero y velocidad.

Creando el bot en Telegram

  1. Abre una conversación con @BotFather dentro de Telegram.
  2. Envía /newbot y sigue las instrucciones, definiendo un nombre (por ejemplo, "ViciadosMU Monitor") y un username terminado en "bot" (por ejemplo, viciadosmu_monitor_bot).
  3. BotFather devuelve un token con el formato 123456789:ABCdefGhIJKlmNoPQRsTUvwxYZ — guárdalo con el mismo cuidado que una contraseña de base de datos.
  4. Crea un grupo de Telegram con los administradores y añade el bot a ese grupo.
  5. Descubre el chat_id del grupo accediendo a https://api.telegram.org/bot<TOKEN>/getUpdates después de enviar cualquier mensaje en el grupo — el chat_id del grupo aparece en el JSON devuelto (generalmente un número negativo).

Estructura de monitoreo: qué revisar en el servidor de MU

ServicioQué verificarSeñal de falla
GameServerProceso activo y puerto escuchando (por ejemplo, 55901)Proceso muerto o puerto cerrado
MySQL/MariaDBConexión y respuesta a una consulta simple (SELECT 1)Timeout o error de conexión
ConnectServerPuerto de entrada (por ejemplo, 44405) respondiendoPuerto cerrado
Sitio/panelHTTP 200 en la home y en la página de loginEstado distinto de 200 o timeout
Uso de RAM/CPU del hostPorcentaje por encima del umbral (por ejemplo, 90%)Recurso saturado, riesgo de caída inminente
Espacio en discoPorcentaje libre por debajo del umbral (por ejemplo, 10%)Log o backup llenando el disco

Script de verificación en Bash (Linux)

Un script simple, ejecutado por cron cada minuto, cubre la mayoría de los casos:

#!/bin/bash
# monitor_mu.sh
TOKEN="123456789:ABCdefGhIJKlmNoPQRsTUvwxYZ"
CHAT_ID="-1001234567890"
STATE_FILE="/tmp/mu_monitor_state"

send_alert() {
    local message="$1"
    curl -s -X POST "https://api.telegram.org/bot${TOKEN}/sendMessage" \
        -d chat_id="${CHAT_ID}" \
        -d text="${message}" \
        -d parse_mode="Markdown" > /dev/null
}

check_process() {
    local name="$1"
    local proc="$2"
    if ! pgrep -f "${proc}" > /dev/null; then
        if ! grep -q "${name}_DOWN" "${STATE_FILE}" 2>/dev/null; then
            send_alert "🔴 *ALERTA*: ¡${name} se cayó en el servidor!"
            echo "${name}_DOWN" >> "${STATE_FILE}"
        fi
    else
        if grep -q "${name}_DOWN" "${STATE_FILE}" 2>/dev/null; then
            send_alert "🟢 *RECUPERADO*: ${name} volvió a la normalidad."
            sed -i "/${name}_DOWN/d" "${STATE_FILE}"
        fi
    fi
}

check_process "GameServer" "GameServer"
check_process "ConnectServer" "ConnectServer"
check_process "MySQL" "mysqld"

Guárdalo como /opt/scripts/monitor_mu.sh, dale permiso de ejecución (chmod +x) y agéndalo en el cron:

* * * * * /opt/scripts/monitor_mu.sh

Monitoreando el sitio y el panel

Para verificar disponibilidad HTTP, agrega una función equivalente usando curl con verificación del código de estado:

check_http() {
    local name="$1"
    local url="$2"
    local status
    status=$(curl -s -o /dev/null -w "%{http_code}" --max-time 10 "${url}")
    if [ "${status}" != "200" ]; then
        send_alert "🔴 *ALERTA*: ${name} respondió con estado ${status} (se esperaba 200)."
    fi
}

check_http "Sitio principal" "https://www.viciadosmu.com.br"
check_http "Panel de login" "https://www.viciadosmu.com.br/login"

Evitando la fatiga de alertas con cooldown

Enviar una alerta cada minuto mientras el servicio está caído vuelve el canal inútil rápidamente — el equipo termina silenciando las notificaciones. El patrón usado en el script anterior (archivo de estado STATE_FILE) resuelve esto: la alerta solo se reenvía cuando el estado cambia (de "arriba" a "abajo" o viceversa), no en cada ejecución del cron. Para casos que requieren recordatorios periódicos durante incidentes largos, agrega un segundo timestamp que dispare un "recordatorio" cada 30 minutos mientras el servicio permanezca caído.

Escalamiento por severidad

No toda alerta tiene la misma urgencia. Sepáralas por nivel de severidad para no mezclar una alerta de "disco 85% lleno" con "GameServer se cayó":

NivelEjemploAcción sugerida
CríticoGameServer, ConnectServer o MySQL se cayeronEnvío inmediato + mención a todos (@all en el grupo, si está soportado)
AltoSitio caído, latencia altaEnvío inmediato al grupo
AtenciónDisco por encima de 80%, RAM por encima de 85%Envío único diario, sin repetición
InformativoBackup completado, deploy realizadoCanal separado, sin push urgente

Crea grupos o temas separados en Telegram por nivel, para que las alertas críticas no se pierdan entre mensajes informativos de rutina.

Probando el sistema antes de confiar en él

Nunca confíes en un sistema de alertas que nunca se ha disparado a propósito. Haz una prueba controlada: detén manualmente el GameServer en un horario de bajo movimiento (systemctl stop gameserver o kill en el proceso), confirma que la alerta llega a Telegram en menos de 1 minuto, vuelve a levantar el servicio y confirma que la alerta de "recuperado" también se dispara. Repite la prueba para MySQL y para el sitio, simulando la caída de cada uno de forma aislada.

Integrando con logs específicos del emulador

Además de procesos y puertos, muchos emuladores generan archivos de log con errores específicos (falla de autenticación masiva, error de conexión con la base de cuentas, excepciones no controladas). Un tail -F combinado con grep en un bucle puede disparar alertas cuando aparezcan patrones de error conocidos:

tail -F /home/mu/GameServer/Log/error.log | while read -r line; do
    if echo "${line}" | grep -qi "database connection failed"; then
        send_alert "⚠️ El log del GameServer reportó una falla de conexión con la base de datos."
    fi
done

Corre este bucle como un servicio systemd separado, no dentro del cron principal, ya que se mantiene en ejecución continua.

Buenas prácticas de seguridad del bot

Nunca dejes el token del bot en un repositorio público ni en un script accesible vía URL del sitio. Trátalo como una credencial: guárdalo en una variable de entorno o en un archivo con permisos restringidos (chmod 600). Si el token se filtra, revócalo de inmediato desde BotFather (/revoke) y genera uno nuevo, actualizando todos los scripts que lo utilicen.

Errores comunes y soluciones

SíntomaCausa probableSolución
El bot no envía mensajesToken o chat_id incorrectosConfirma el token en BotFather y el chat_id vía getUpdates
Alertas duplicadas cada minutoFalta de control de estado (cooldown)Implementa un archivo de estado para no repetir la misma alerta
La alerta no llega durante una caída realEl cron no está corriendo o el script se colgóVerifica crontab -l y los logs del cron; agrega monitoreo del propio monitor
El mensaje llega cortado o sin formatoparse_mode incompatible con los caracteres usadosEscapa los caracteres especiales de Markdown o usa HTML como parse_mode
Token expuesto públicamenteScript confirmado en un repositorio públicoRevoca el token en BotFather y mueve las credenciales a una variable de entorno

Lista de verificación de implementación de las alertas

  • Bot creado en BotFather y token almacenado de forma segura.
  • Grupo de Telegram creado con los administradores y chat_id identificado.
  • Script de verificación de procesos (GameServer, ConnectServer, MySQL) agendado en el cron.
  • Verificación HTTP del sitio y panel configurada.
  • Cooldown/estado implementado para evitar la fatiga de alertas.
  • Niveles de severidad definidos y separados por canal/tema.
  • Prueba controlada de caída y recuperación realizada para cada servicio.
  • Monitoreo del propio monitor (watchdog) configurado.

Con las alertas corriendo de forma confiable, el siguiente paso es conectar este monitoreo con la rutina general de operación del servidor descrita en el tutorial de cómo crear un servidor de MU Online, garantizando que infraestructura, juego y comunidad estén todos cubiertos por el mismo proceso de respuesta a incidentes.

Preguntas frecuentes

¿Necesito pagar para usar un bot de Telegram para alertas?

No, la API de bots de Telegram es gratuita y no tiene un límite práctico de uso para el volumen de alertas de un servidor de MU. El único costo es el servidor/VPS que corre el script de monitoreo, que generalmente ya existe en tu infraestructura.

¿Cuál es la diferencia entre monitorear vía Telegram y usar un servicio como UptimeRobot?

Servicios como UptimeRobot verifican desde afuera si el puerto/sitio responde, lo cual es ideal para disponibilidad externa. Un script propio corriendo dentro del servidor puede revisar cosas específicas de MU, como procesos colgados, uso de RAM del GameServer o fallas de replicación de MySQL, que un monitor externo genérico no detecta.

¿El bot puede avisar a varios administradores al mismo tiempo?

Sí, puedes enviar el mismo mensaje a un grupo de Telegram con todos los admins, o a múltiples chat_id individuales. Los grupos son más simples de mantener porque no requieren actualizar la lista de destinatarios en el script cada vez que alguien entra o sale del equipo.

¿Cómo evito quedar inundado de alertas repetidas durante una caída prolongada?

Implementa un cooldown (por ejemplo, no reenviar la misma alerta durante 15 minutos) y una alerta de 'recuperado' cuando el servicio vuelva. Esto evita la fatiga de alertas, que ocurre cuando el admin empieza a ignorar las notificaciones por exceso de ruido.

¿Se puede integrar este sistema con el panel del juego (IGCN, MuEMU) directamente?

Sí, si el panel expone alguna API o log de errores, puedes leer esos archivos/endpoints en el mismo script de monitoreo y disparar alertas específicas, como caída de conexión con la base de cuentas o error de autenticación masivo.

GA
Editor de guías y builds

Gabriel cubre gameplay, builds de clases, PvP y progresión. Prueba cada estrategia en un servidor antes de publicar.

Sigue leyendo

Artículos relacionados