Como Monitorar Logs do Servidor de MU Online em Tempo Real
Aprenda a monitorar logs do servidor MU Online em tempo real usando ferramentas nativas do Windows, scripts batch e consultas SQL para diagnosticar erros rapidamente.
Manter o servidor de MU Online funcionando com estabilidade exige monitoramento constante. Sem visibilidade dos logs, qualquer crash, tentativa de exploit ou problema de desempenho pode passar despercebido por horas. Este tutorial cobre desde a leitura básica de arquivos de log até consultas SQL avançadas para acompanhar o servidor em tempo real.
Por Que Monitorar Logs é Essencial
O MuServer gera logs em duas camadas distintas: arquivos de texto no sistema de arquivos e registros no banco de dados SQL Server. Cada camada tem finalidade diferente:
- Arquivos .log: eventos do processo em tempo de execução, erros de memória, falhas de carregamento de mapas
- Tabelas SQL: histórico de ações de jogadores, transações de itens, conexões, logs de GM
Ignorar qualquer uma dessas camadas significa ter visibilidade parcial do que acontece no servidor.
Parte 1 — Estrutura de Logs do MuServer
1.1 Localização dos Arquivos de Log
A estrutura padrão do MuServer Season 6 organiza os logs assim:
MuServer/
├── GameServer/
│ └── Log/
│ ├── GameServer.log ← eventos gerais do processo
│ ├── Error.log ← erros críticos e exceptions
│ ├── ServerInfo.log ← conexões e handshakes
│ └── GMCommand.log ← comandos executados por GMs
├── ConnectServer/
│ └── Log/
│ ├── ConnectServer.log ← tentativas de conexão ao CS
│ └── Error.log
├── DataServer/
│ └── Log/
│ └── DataServer.log ← sincronização com banco de dados
└── EventServer/
└── Log/
└── EventServer.log ← logs dos eventos (BC, DS, CC)
GameServer01.log, GameServer02.log, etc., dentro de subpastas por servidor.1.2 Verificando as Configurações de Log
Antes de monitorar, confirme que o log está habilitado. Abra GameServer/GameServer.ini e localize:
[Log]
LogSave=1
LogType=3
LogPath=./Log/
MaxLogFileSize=10240
LogSave=1— habilita gravação em arquivo (0 desativa)LogType=3— nível de detalhe (1=erros, 2=avisos, 3=informações, 4=debug)MaxLogFileSize=10240— tamanho máximo em KB antes de rotacionar (10 MB)
LogType=4 em produção pode gerar arquivos de log com centenas de MB por dia, afetando o desempenho do disco. Use apenas para diagnóstico temporário.Parte 2 — Monitoramento em Tempo Real com Ferramentas do Windows
2.1 PowerShell — Método Mais Rápido
O PowerShell nativo do Windows é suficiente para monitorar logs sem instalar nada:
Passo 1 — Abra o PowerShell como Administrador.
Passo 2 — Execute o comando para acompanhar o GameServer.log em tempo real:
Get-Content -Path "C:\MuServer\GameServer\Log\GameServer.log" -Wait -Tail 100
Passo 3 — Para filtrar apenas linhas com erros:
Get-Content -Path "C:\MuServer\GameServer\Log\GameServer.log" -Wait -Tail 100 |
Where-Object { $_ -match "Error|FAIL|Critical|Exception" }
Passo 4 — Para monitorar múltiplos logs simultaneamente, crie um script 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
}
2.2 Script Batch para Alertas de Erro
Crie C:\MuServer\Tools\alerta_erros.bat para verificar erros a cada minuto:
@echo off
:loop
findstr /I "Critical Error Exception FAIL" "C:\MuServer\GameServer\Log\Error.log" > "%TEMP%\erros_mu.txt"
for %%A in ("%TEMP%\erros_mu.txt") do if %%~zA GTR 0 (
echo [%DATE% %TIME%] ERROS DETECTADOS - Verifique Error.log
type "%TEMP%\erros_mu.txt"
)
timeout /t 60 /nobreak > nul
goto loop
Parte 3 — Monitoramento via SQL Server
3.1 Tabelas de Log Principais
O MuServer armazena registros de ações dos jogadores no banco MuOnline. As tabelas mais úteis para monitoramento são:
| Tabela | Conteúdo |
|---|---|
LOG_ConnectMember | Conexões e desconexões de jogadores |
LOG_DropItem | Itens dropados no chão |
LOG_PickupItem | Itens coletados |
LOG_TradeItem | Trocas entre jogadores |
LOG_WareHouseItem | Movimentação no armazém |
LOG_GMCommand | Comandos de GM executados |
3.2 Consultas SQL para Monitoramento em Tempo Real
Conexões da última hora:
SELECT
TOP 50
sID AS AccountID,
sCharName AS Character,
sIP AS IPAddress,
sDate AS DateTime,
sType AS Action -- 0=login, 1=logout
FROM MuOnline..LOG_ConnectMember
WHERE sDate >= DATEADD(HOUR, -1, GETDATE())
ORDER BY sDate DESC;
Jogadores conectados agora:
SELECT
a.memb_guid,
a.memb___id AS Account,
c.Name AS Character,
c.MapNumber AS Map,
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;
Últimas transações de armazém suspeitas (grandes quantidades):
SELECT TOP 20
sID AS Account,
sCharName AS Character,
sItemName AS Item,
sItemCount AS Quantity,
sDate AS DateTime
FROM MuOnline..LOG_WareHouseItem
WHERE sDate >= CAST(GETDATE() AS DATE)
AND sItemCount > 50
ORDER BY sDate DESC;
GameServer/GameServer.ini tem SQLLog=1 e se os scripts de criação de tabelas foram executados durante a instalação do MuServer.3.3 View para Dashboard de Monitoramento
Crie uma view SQL para consolidar informações do servidor:
USE MuOnline;
GO
CREATE VIEW vw_ServerStatus AS
SELECT
(SELECT COUNT(*) FROM MEMB_INFO WHERE ConnectStat = 1) AS PlayersOnline,
(SELECT COUNT(*) FROM Character WHERE CtlCode > 0) AS GMsOnline,
(SELECT MAX(sDate) FROM LOG_ConnectMember) AS LastLoginTime,
(SELECT COUNT(*) FROM LOG_ConnectMember
WHERE sDate >= CAST(GETDATE() AS DATE) AND sType = 0) AS LoginsToday,
GETDATE() AS CheckedAt;
GO
-- Consulte a view a cada 30 segundos no SSMS:
SELECT * FROM vw_ServerStatus;
Parte 4 — Rotação e Limpeza de Logs
4.1 Script de Rotação Automática
Logs antigos consomem espaço em disco. Crie C:\MuServer\Tools\rotacionar_logs.bat:
@echo off
set LOG_DIR=C:\MuServer\GameServer\Log
set ARCHIVE_DIR=C:\MuServer\GameServer\Log\Archive
set DATE_TAG=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
if not exist "%ARCHIVE_DIR%" mkdir "%ARCHIVE_DIR%"
:: Compactar logs com mais de 7 dias
forfiles /p "%LOG_DIR%" /m *.log /d -7 /c "cmd /c move @path %ARCHIVE_DIR%\@fname_%DATE_TAG%@ext"
echo [%DATE% %TIME%] Rotacao de logs concluida.
4.2 Limpeza de Logs SQL Antigos
-- Manter apenas os ultimos 30 dias de log de conexoes
DELETE FROM MuOnline..LOG_ConnectMember
WHERE sDate < DATEADD(DAY, -30, GETDATE());
-- Manter apenas os ultimos 15 dias de log de itens
DELETE FROM MuOnline..LOG_DropItem
WHERE sDate < DATEADD(DAY, -15, GETDATE());
DELETE FROM MuOnline..LOG_PickupItem
WHERE sDate < DATEADD(DAY, -15, GETDATE());
-- Verificar espaco recuperado
EXEC sp_spaceused 'LOG_ConnectMember';
SELECT INTO MuOnline..LOG_ConnectMember_backup SELECT * FROM MuOnline..LOG_ConnectMember WHERE sDate < DATEADD(DAY, -30, GETDATE()) antes da exclusao.Resolucao de Problemas Comuns
Log parou de ser atualizado: O arquivo pode ter atingido o limite MaxLogFileSize. Renomeie o arquivo atual para GameServer_old.log e o servidor criara um novo automaticamente sem precisar reiniciar.
DataServer.log mostrando erros de timeout: Verifique a string de conexao em DataServer/DataServer.ini no parametro DBConnString. Erros de timeout frequentes indicam problema de rede entre o servidor de jogo e o SQL Server, ou indice fragmentado no banco. Execute DBCC INDEXDEFRAG(MuOnline) para desfragmentar.
ConnectServer.log com muitas reconexoes: Isso indica instabilidade de rede ou que o ServerList.dat do GameServer nao esta sincronizado com o IP real do ConnectServer. Confirme o parametro ServerAddr em ConnectServer/ConnectServer.ini.
Perguntas frequentes
Onde ficam os arquivos de log do GameServer?
Os logs do GameServer ficam em GameServer/Log/, com arquivos separados por categoria: GameServer.log (eventos gerais), Error.log (erros críticos) e ServerInfo.log (informações de conexão). Alguns builds do Season 6 também geram ConnectLog/ dentro dessa pasta.
Como monitorar múltiplos logs ao mesmo tempo no Windows?
Use o PowerShell com o comando Get-Content -Path 'GameServer/Log/GameServer.log' -Wait -Tail 50 em múltiplas janelas simultâneas, ou use a ferramenta gratuita mTail para abrir vários arquivos em abas separadas com atualização automática.
O log do GameServer não está sendo gerado, o que pode ser?
Verifique no arquivo GameServer/GameServer.ini se o parâmetro LogSave=1 está ativo. Em algumas versões do MuServer o log só é criado se a pasta GameServer/Log/ existir previamente — crie-a manualmente se necessário.
Como filtrar apenas erros de conexão de jogadores nos logs SQL?
Execute SELECT TOP 100 * FROM MuOnline..LOG_ConnectMember WHERE sDate >= CAST(GETDATE() AS DATE) ORDER BY sDate DESC no SQL Server Management Studio para ver as conexões do dia atual ordenadas por hora.