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

Cómo Monitorear Logs del Servidor de MU Online en Tiempo Real

Aprende a monitorear logs del servidor MU Online en tiempo real con herramientas nativas de Windows, scripts batch y consultas SQL para diagnosticar errores rápidamente.

EQ Equipo ViciadosMU · Actualizado el 3 jul 2026 · ⏱ 12 min de lectura

Mantener un servidor privado de MU Online estable requiere visibilidad constante de lo que ocurre a nivel de proceso y de base de datos. Sin un monitoreo adecuado de logs, un crash, un intento de exploit o una degradación de rendimiento puede pasar desapercibido durante horas. Este tutorial cubre la lectura de archivos de log en tiempo real, la automatización de alertas de errores con scripts batch y la consulta de SQL Server para rastrear la actividad de los jugadores.

Por Qué el Monitoreo de Logs es Fundamental

El MuServer genera logs en dos capas separadas, cada una con un propósito distinto:

  • Archivos de texto (.log): eventos del proceso en tiempo de ejecución, errores de memoria, fallos de carga de mapas y errores de red
  • Tablas de SQL Server: historial de acciones de jugadores, transacciones de ítems, conexiones, registros de comandos GM

Monitorear solo una capa deja puntos ciegos. Un crash del GameServer puede aparecer en Error.log antes de reflejarse en la base de datos, mientras que los intentos de duplicación de ítems solo quedan registrados en las tablas SQL.

Parte 1 — Estructura de Logs del MuServer

1.1 Ubicación de los Archivos de Log

La instalación estándar del MuServer Season 6 organiza los logs de la siguiente manera:

MuServer/
├── GameServer/
│   └── Log/
│       ├── GameServer.log        ← eventos generales del proceso
│       ├── Error.log             ← errores críticos y excepciones
│       ├── ServerInfo.log        ← registros de conexión y handshakes
│       └── GMCommand.log         ← comandos GM ejecutados en el juego
├── ConnectServer/
│   └── Log/
│       ├── ConnectServer.log     ← intentos de conexión al CS
│       └── Error.log
├── DataServer/
│   └── Log/
│       └── DataServer.log        ← eventos de sincronización con la BD
└── EventServer/
    └── Log/
        └── EventServer.log       ← logs de eventos (Blood Castle, Devil Square, etc.)
Nota: En builds del MuServer para Season 9 y versiones posteriores, los logs del GameServer pueden estar divididos por canal: GameServer01.log, GameServer02.log, etc., dentro de subcarpetas por servidor. Ajusta las rutas de monitoreo según corresponda.

1.2 Verificar la Configuración de Logs

Antes de configurar el monitoreo, confirma que el logging esté habilitado. Abre GameServer/GameServer.ini y revisa la sección de log:

[Log]
LogSave=1
LogType=3
LogPath=./Log/
MaxLogFileSize=10240

Parámetros clave:

  • LogSave=1 — habilita la escritura en archivo (0 desactiva el logging por completo)
  • LogType=3 — nivel de detalle (1=solo errores, 2=advertencias+errores, 3=informativo, 4=debug)
  • MaxLogFileSize=10240 — tamaño máximo en KB antes de rotar el archivo (10 MB)
Atenção: Usar LogType=4 en un entorno de producción puede generar cientos de megabytes de datos de log por día, causando una sobrecarga de I/O en disco que afecta el rendimiento del servidor. Usa el logging de debug únicamente durante sesiones activas de diagnóstico.

Parte 2 — Monitoreo en Tiempo Real con Herramientas de Windows

2.1 PowerShell — El Método Más Rápido, Sin Instalación

Paso 1 — Abre PowerShell como Administrador.

Paso 2 — Visualiza el GameServer.log en tiempo real:

Get-Content -Path "C:\MuServer\GameServer\Log\GameServer.log" -Wait -Tail 100

Paso 3 — Filtra solo las líneas relacionadas con errores para reducir el ruido:

Get-Content -Path "C:\MuServer\GameServer\Log\GameServer.log" -Wait -Tail 100 |
  Where-Object { $_ -match "Error|FAIL|Critical|Exception" }

Paso 4 — Monitorea múltiples logs simultáneamente creando C:\MuServer\Tools\monitor_logs.ps1:

$logs = @(
    "C:\MuServer\GameServer\Log\GameServer.log",
    "C:\MuServer\ConnectServer\Log\ConnectServer.log",
    "C:\MuServer\DataServer\Log\DataServer.log"
)

$jobs = foreach ($log in $logs) {
    Start-Job -ScriptBlock {
        param($path)
        Get-Content -Path $path -Wait -Tail 50
    } -ArgumentList $log
}

while ($true) {
    foreach ($job in $jobs) {
        Receive-Job -Job $job | ForEach-Object {
            Write-Host "[$(Split-Path $job.Name -Leaf)] $_" -ForegroundColor Cyan
        }
    }
    Start-Sleep -Milliseconds 500
}

Ejecuta este script en una ventana de PowerShell dedicada para ver los tres flujos de log en una sola consola con código de colores.

2.2 Script Batch para Alertas Automáticas de Errores

Crea C:\MuServer\Tools\alerta_errores.bat para revisar errores críticos cada 60 segundos:

@echo off
:loop
findstr /I "Critical Error Exception FAIL" "C:\MuServer\GameServer\Log\Error.log" > "%TEMP%\mu_errores.txt"
for %%A in ("%TEMP%\mu_errores.txt") do if %%~zA GTR 0 (
    echo [%DATE% %TIME%] ERRORES DETECTADOS - Revisa Error.log de inmediato
    type "%TEMP%\mu_errores.txt"
)
timeout /t 60 /nobreak > nul
goto loop
Dica: Registra este script como una Tarea Programada de Windows configurada para ejecutarse al inicio del sistema. Configúrala para correr con privilegios elevados de modo que pueda acceder a todos los directorios de log independientemente de los permisos de archivo.

Parte 3 — Monitoreo de Logs via SQL Server

3.1 Tablas de Log Principales en la Base de Datos MuOnline

El MuServer registra las acciones de los jugadores en la base de datos MuOnline. Las tablas más útiles para el monitoreo en tiempo real son:

TablaContenido
LOG_ConnectMemberInicios y cierres de sesión de jugadores
LOG_DropItemÍtems tirados al suelo
LOG_PickupItemÍtems recogidos por jugadores
LOG_TradeItemIntercambios entre jugadores
LOG_WareHouseItemDepósitos y retiros del almacén
LOG_GMCommandTodos los comandos GM ejecutados en el juego

3.2 Consultas SQL para Monitoreo en Tiempo Real

Conexiones de la última hora:

SELECT
    TOP 50
    sID        AS CuentaID,
    sCharName  AS Personaje,
    sIP        AS DireccionIP,
    sDate      AS FechaHora,
    sType      AS Accion  -- 0=login, 1=logout
FROM MuOnline..LOG_ConnectMember
WHERE sDate >= DATEADD(HOUR, -1, GETDATE())
ORDER BY sDate DESC;

Jugadores conectados ahora con posición en el mapa:

SELECT
    a.memb_guid,
    a.memb___id AS Cuenta,
    c.Name      AS Personaje,
    c.MapNumber AS Mapa,
    c.MapPosX,
    c.MapPosY,
    a.ConnectStat
FROM MuOnline..MEMB_INFO a
INNER JOIN MuOnline..Character c ON a.memb___id = c.AccountID
WHERE a.ConnectStat = 1
ORDER BY a.memb_guid;

Actividad reciente de alto volumen en el almacén (posible exploit de apilado de ítems):

SELECT TOP 20
    sID        AS Cuenta,
    sCharName  AS Personaje,
    sItemName  AS Item,
    sItemCount AS Cantidad,
    sDate      AS FechaHora
FROM MuOnline..LOG_WareHouseItem
WHERE sDate >= CAST(GETDATE() AS DATE)
  AND sItemCount > 50
ORDER BY sDate DESC;
Nota: Si las tablas de log no existen en tu base de datos, verifica que SQLLog=1 esté configurado en GameServer/GameServer.ini y que los scripts de creación de tablas hayan sido ejecutados durante la instalación original del MuServer. Estos scripts generalmente se encuentran en la carpeta SQL/ del paquete del servidor.

3.3 Vista SQL para Dashboard de Estado del Servidor

Crea una vista consolidada para revisar el estado general del servidor de un vistazo:

USE MuOnline;
GO

CREATE VIEW vw_EstadoServidor AS
SELECT
    (SELECT COUNT(*) FROM MEMB_INFO WHERE ConnectStat = 1)   AS JugadoresConectados,
    (SELECT COUNT(*) FROM Character WHERE CtlCode > 0)        AS GMsConectados,
    (SELECT MAX(sDate) FROM LOG_ConnectMember)                 AS UltimoLogin,
    (SELECT COUNT(*) FROM LOG_ConnectMember
     WHERE sDate >= CAST(GETDATE() AS DATE) AND sType = 0)    AS LoginsHoy,
    GETDATE()                                                  AS VerificadoEn;
GO

-- Consulta esta vista cada 30 segundos en el SSMS para monitorear el servidor:
SELECT * FROM vw_EstadoServidor;

Parte 4 — Rotación y Limpieza de Logs

4.1 Script de Rotación Automática de Logs

Los archivos de log antiguos se acumulan rápidamente. Crea C:\MuServer\Tools\rotar_logs.bat para archivar logs con más de 7 días de antigüedad:

@echo off
set LOG_DIR=C:\MuServer\GameServer\Log
set ARCHIVE_DIR=C:\MuServer\GameServer\Log\Archivo
set DATE_TAG=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%

if not exist "%ARCHIVE_DIR%" mkdir "%ARCHIVE_DIR%"

:: Mover archivos de log con más de 7 días a la carpeta de archivo
forfiles /p "%LOG_DIR%" /m *.log /d -7 /c "cmd /c move @path %ARCHIVE_DIR%\@fname_%DATE_TAG%@ext"

echo [%DATE% %TIME%] Rotacion de logs completada.

4.2 Limpieza de Logs SQL para Recuperar Espacio en Disco

-- Conservar solo los últimos 30 días de logs de conexión
DELETE FROM MuOnline..LOG_ConnectMember
WHERE sDate < DATEADD(DAY, -30, GETDATE());

-- Conservar solo los últimos 15 días de logs de ítems
DELETE FROM MuOnline..LOG_DropItem
WHERE sDate < DATEADD(DAY, -15, GETDATE());

DELETE FROM MuOnline..LOG_PickupItem
WHERE sDate < DATEADD(DAY, -15, GETDATE());

-- Verificar cuánto espacio se recuperó
EXEC sp_spaceused 'LOG_ConnectMember';
Atenção: Siempre haz una copia de seguridad de las tablas de log antes de ejecutar operaciones DELETE masivas. Usa SELECT INTO para crear una copia primero: SELECT * INTO MuOnline..LOG_ConnectMember_respaldo FROM MuOnline..LOG_ConnectMember WHERE sDate < DATEADD(DAY, -30, GETDATE()).

Resolución de Problemas Comunes

El archivo de log dejó de actualizarse: El archivo probablemente alcanzó el límite de MaxLogFileSize. Renombra el archivo actual a GameServer_old.log — el servidor creará uno nuevo automáticamente sin necesidad de reiniciar el proceso.

DataServer.log muestra errores de timeout frecuentes: Verifica la cadena de conexión en DataServer/DataServer.ini bajo el parámetro DBConnString. Los timeouts repetidos indican un problema de red entre el host del servidor de juego y la instancia de SQL Server, o una fragmentación severa de índices en la base de datos. Ejecuta DBCC INDEXDEFRAG(MuOnline) para reconstruir los índices.

ConnectServer.log muestra ciclos continuos de reconexión: Esto generalmente significa que el archivo ServerList.dat en el directorio de GameServer contiene una IP desactualizada del ConnectServer, o que el parámetro ServerAddr en ConnectServer/ConnectServer.ini no coincide con la interfaz de red real a la que está vinculado el proceso.

Dica: Configura el SQL Server Agent para enviar alertas por correo electrónico cuando la cantidad de jugadores conectados caiga por debajo de un umbral determinado. Una caída repentina de, por ejemplo, 50 a 0 jugadores casi siempre indica que el proceso GameServer se cayó, lo que te permite actuar antes de que los jugadores empiecen a reportar problemas.

Perguntas frequentes

¿Dónde se encuentran los archivos de log del GameServer?

Los logs del GameServer se almacenan en GameServer/Log/, con archivos separados por categoría: GameServer.log (eventos generales del proceso), Error.log (errores críticos) y ServerInfo.log (registros de conexión). Algunos builds del Season 6 también generan una subcarpeta ConnectLog/ dentro de ese directorio.

¿Cómo monitoreo múltiples archivos de log al mismo tiempo en Windows?

Usa PowerShell con el comando Get-Content -Path 'GameServer/Log/GameServer.log' -Wait -Tail 50 en varias ventanas simultáneas, o usa la herramienta gratuita mTail para abrir varios archivos en pestañas separadas con actualización automática en vivo.

El log del GameServer no se está generando, ¿qué puede estar causando esto?

Verifica que GameServer/GameServer.ini tenga el parámetro LogSave=1 habilitado. En algunos builds del MuServer el archivo de log solo se crea si la carpeta GameServer/Log/ ya existe previamente — créala manualmente si falta y reinicia el proceso GameServer.

¿Cómo filtro solo los errores de conexión de jugadores desde los logs de SQL?

Ejecuta SELECT TOP 100 * FROM MuOnline..LOG_ConnectMember WHERE sDate >= CAST(GETDATE() AS DATE) ORDER BY sDate DESC en SQL Server Management Studio para ver los registros de conexión del día actual ordenados por más recientes primero.

EQ

Equipo ViciadosMU

Equipe editorial do ViciadosMU — portal de MU Online no ar desde 2003.

Sigue leyendo

Artículos relacionados