El mayor portal de MU Online de Brasil — desde 2003
Tutorial Avanzado Infraestructura

Cómo monitorear tu servidor de MU Online con Grafana y Prometheus

Instala Prometheus y Grafana para monitorear CPU, memoria, MySQL y jugadores en línea de tu servidor de MU Online en tiempo real, con dashboards listos y alertas automáticas antes de que los jugadores sientan el problema.

RO Rodrigo · Actualizado el 23 ene 2019 · ⏱ 18 min de lectura
Respuesta rápida

Administrar un servidor de MU Online sin monitoreo es como pilotar a ciegas: solo descubres que MySQL se trabó, que la CPU se disparó o que el GameServer se cayó cuando los jugadores ya se están quejando en Discord. Prometheus y Grafana forman el dúo estándar de la industria para observabilidad — el

Administrar un servidor de MU Online sin monitoreo es como pilotar a ciegas: solo descubres que MySQL se trabó, que la CPU se disparó o que el GameServer se cayó cuando los jugadores ya se están quejando en Discord. Prometheus y Grafana forman el dúo estándar de la industria para observabilidad — el primero recolecta métricas de CPU, memoria, disco, red y base de datos a lo largo del tiempo, y el segundo transforma esos datos en dashboards visuales y alertas automáticas. Este tutorial cubre la instalación de ambos, la configuración de exporters para MySQL y sistema operativo, la creación de un exporter personalizado para jugadores en línea, dashboards listos y alertas que avisan a tu equipo antes de que el jugador perciba el problema.

Por qué monitorear de forma proactiva

La mayoría de los administradores de servidores privados solo reaccionan después del problema — un pico de lag, una caída del GameServer, un disco lleno que traba MySQL. Con métricas históricas, identificas patrones (por ejemplo, MySQL siempre se atasca a las 21h cuando la población de jugadores llega al pico) y actúas antes de que la queja aparezca en Discord. El monitoreo también es evidencia concreta para justificar upgrades de hardware o la migración a un dedicado, en lugar de decisiones basadas en "impresión".

Visión general de la arquitectura

ComponenteFunción
PrometheusRecolecta y almacena métricas en series temporales
Node ExporterExpone métricas del sistema operativo (CPU, RAM, disco, red)
MySQL ExporterExpone métricas de MySQL (queries/s, conexiones, slow queries)
Exporter personalizadoExpone jugadores en línea, cuentas activas, guerra de castillo en curso
GrafanaVisualiza las métricas en dashboards y dispara alertas visuales
AlertmanagerEnvía notificaciones (Discord, correo, Telegram) basadas en reglas

Requisitos previos

  • Servidor Linux (o WSL/dedicado Windows con adaptaciones) con acceso root/sudo.
  • Servidor de MU Online ya funcionando (mira el tutorial de creación de servidor).
  • Docker instalado (recomendado, simplifica la instalación de todo el stack).
  • Acceso de lectura a MySQL para el exporter de base de datos.

Paso 1 — Instalar Prometheus y Grafana vía Docker Compose

La forma más simple de levantar todo el stack es con Docker Compose, aislando cada servicio en su propio contenedor.

version: "3.8"
services:
  prometheus:
    image: prom/prometheus
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"
  grafana:
    image: grafana/grafana
    ports:
      - "3000:3000"
  node_exporter:
    image: prom/node-exporter
    ports:
      - "9100:9100"
  mysqld_exporter:
    image: prom/mysqld-exporter
    environment:
      - DATA_SOURCE_NAME=exporter:senha@(mysql-host:3306)/
    ports:
      - "9104:9104"
docker compose up -d

Paso 2 — Configurar Prometheus para recolectar los exporters

Edita el prometheus.yml agregando cada objetivo (target) que Prometheus debe consultar periódicamente:

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['node_exporter:9100']
  - job_name: 'mysql'
    static_configs:
      - targets: ['mysqld_exporter:9104']
  - job_name: 'mu_online'
    static_configs:
      - targets: ['mu_exporter:9200']

Reinicia el contenedor de Prometheus y confirma en http://ip-del-servidor:9090/targets que todos los objetivos aparecen como UP.

Paso 3 — Crear un usuario MySQL dedicado al exporter

Nunca uses la cuenta root de MySQL en el exporter. Crea un usuario con permisos mínimos de lectura de métricas:

CREATE USER 'exporter'@'%' IDENTIFIED BY 'senha_forte' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%';

Paso 4 — Armar un exporter personalizado para jugadores en línea

No existe un exporter oficial para métricas específicas de MU Online, pero es simple armar un script periódico que consulta la base de datos (tabla de cuentas conectadas o conteo vía ConnectServer) y expone el resultado en formato Prometheus:

from prometheus_client import Gauge, start_http_server
import mysql.connector
import time

jogadores_online = Gauge('mu_jogadores_online', 'Jugadores conectados en este momento')

def coletar():
    conn = mysql.connector.connect(host="localhost", user="exporter", password="senha_forte", database="MuOnline")
    cursor = conn.cursor()
    cursor.execute("SELECT COUNT(*) FROM MEMB_STAT WHERE ConnectStat = 1")
    jogadores_online.set(cursor.fetchone()[0])
    conn.close()

if __name__ == "__main__":
    start_http_server(9200)
    while True:
        coletar()
        time.sleep(30)

Paso 5 — Conectar Grafana a Prometheus

Accede a http://ip-del-servidor:3000 (login predeterminado admin/admin la primera vez), ve a Data Sources y agrega Prometheus con la URL http://prometheus:9090. Guarda y prueba la conexión antes de seguir con los dashboards.

Paso 6 — Importar dashboards listos

La comunidad de Grafana ofrece dashboards listos para Node Exporter (ID 1860) y MySQL Exporter (ID 7362), que importas directamente por el ID en la pantalla de Import Dashboard. Para las métricas personalizadas de MU Online, arma un panel simple con un gráfico de línea usando la métrica mu_jogadores_online a lo largo del tiempo.

PanelMétricaTipo de gráfico sugerido
Jugadores en líneamu_jogadores_onlineLínea, últimas 24h
CPU del servidornode_cpu_seconds_totalLínea, con promedios móviles
Conexiones MySQLmysql_global_status_threads_connectedLínea
Slow queriesmysql_global_status_slow_queriesContador/barra
Uso de disconode_filesystem_avail_bytesGauge

Paso 7 — Configurar alertas con Alertmanager

Crea reglas de alerta en Prometheus para condiciones críticas, como CPU por encima de 90% durante 5 minutos o caída en el número de jugadores en línea (indicio de GameServer fuera de línea):

groups:
  - name: mu_alerts
    rules:
      - alert: CPUAlta
        expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 90
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "CPU por encima de 90% durante 5 minutos"
      - alert: ServidorForaDoAr
        expr: mu_jogadores_online == 0
        for: 3m
        labels:
          severity: critical
        annotations:
          summary: "Ningún jugador en línea — posible GameServer fuera de línea"

Configura el Alertmanager con un webhook de Discord para recibir estas notificaciones automáticamente en el canal del equipo de administración.

Paso 8 — Definir retención y backup de las métricas

Configura la retención de Prometheus (predeterminada 15 días) según el espacio en disco disponible, e incluye el volumen de datos de Prometheus y Grafana en la rutina de backup del servidor, para no perder el historial en caso de falla de disco.

Errores comunes y soluciones

SíntomaCausa probableSolución
El target aparece como DOWN en PrometheusEl exporter no está corriendo o el puerto está bloqueadoVerificar contenedor/servicio y reglas de firewall
Dashboard de Grafana sin datosData source mal configuradoRevisar la URL de Prometheus en Data Sources
El exporter de MySQL falla al conectarUsuario/contraseña o permisos incorrectosRecrear el usuario exporter con el GRANT correcto
La alerta no llega a DiscordWebhook del Alertmanager mal configuradoProbar el webhook manualmente con curl
Métrica de jugadores en línea siempre en ceroQuery personalizada incorrecta para el esquema del emuladorAjustar la query según la tabla real de sesiones

Lista de verificación de monitoreo

  • Prometheus, Grafana y exporters corriendo vía Docker Compose.
  • Todos los targets con estado UP en Prometheus.
  • Usuario MySQL dedicado al exporter, con permisos mínimos.
  • Exporter personalizado de jugadores en línea funcionando.
  • Dashboards importados y mostrando datos reales.
  • Reglas de alerta configuradas para CPU, disco y caída de jugadores.
  • Alertmanager integrado al Discord del equipo.
  • Retención de datos y backup del stack de monitoreo definidos.

Con el monitoreo activo, el siguiente paso natural es cruzar estas métricas con el proceso de respuesta a incidentes de tu equipo — saber que el disco se está llenando no sirve de nada si nadie es notificado a tiempo para actuar; revisa también el tutorial de creación de servidor de MU Online para garantizar que la infraestructura base soporta este nivel de observabilidad.

Preguntas frecuentes

¿Necesito saber programar para configurar Grafana y Prometheus?

No es necesario programar, pero ayuda entender conceptos básicos de YAML (archivos de configuración) y línea de comandos de Linux. La mayor parte del trabajo es editar archivos de configuración e importar dashboards listos de la comunidad, sin escribir código.

¿Grafana y Prometheus consumen muchos recursos del servidor?

Consumen recursos moderados — generalmente menos del 5% de CPU y algunos cientos de MB de RAM en un servidor de porte medio. Vale la pena correrlos en una VM o contenedor separado del GameServer para no competir por recursos en el pico de jugadores.

¿Puedo monitorear el número de jugadores en línea de MU Online directamente?

Sí, con un exporter personalizado (script que lee el conteo de conexiones del ConnectServer o consulta la base de datos) que expone esa métrica en el formato que Prometheus entiende. No existe un exporter oficial listo, pero es simple de armar con un script periódico.

¿Cuál es la diferencia entre Prometheus y Grafana?

Prometheus recolecta y almacena las métricas a lo largo del tiempo (series temporales); Grafana es la capa visual que lee esas métricas y arma los dashboards y alertas. Necesitas los dos: uno sin el otro solo resuelve la mitad del problema.

¿Cómo recibo una alerta en Discord cuando el servidor se caiga?

Configura el Alertmanager (componente del ecosistema Prometheus) con un webhook de Discord, y crea reglas de alerta en Prometheus para condiciones como 'GameServer fuera de línea' o 'CPU por encima de 90% durante 5 minutos'. El Alertmanager envía la notificación automáticamente al canal configurado.

RO
Fundador y editor jefe

Rodrigo mantiene ViciadosMU desde los inicios del portal. Especialista en creación y administración de servidores de MU Online, historia del juego y la evolución de las seasons — escribió buena parte del archivo antes de 2024.

Sigue leyendo

Artículos relacionados