Como Monitorar Servidor de MU com Sistema de Alertas Automáticos
Aprenda a configurar monitoramento completo do seu servidor MU Online com alertas automáticos por script, SQL e logs para manter uptime máximo.
Manter um servidor de MU Online no ar 24/7 exige mais do que apenas iniciar os processos e torcer para o melhor. Crashes silenciosos, travamentos de banco de dados e uso excessivo de memória podem derrubar o servidor sem que o administrador perceba por horas. Este guia ensina como montar um sistema de monitoramento automatizado com alertas em tempo real usando ferramentas nativas do Windows Server.
O Que Monitorar em um Servidor MU
Antes de escrever qualquer script, mapeie os pontos críticos da sua infraestrutura:
- Processos obrigatórios:
GameServer.exe,ConnectServer.exe,DataServer.exe,EventServer.exe - Serviço SQL Server: instância onde reside o banco
MuOnline - Uso de CPU e memória RAM dos processos do servidor
- Espaço em disco nos volumes de log e backup
- Conectividade de rede: porta 55901 (ConnectServer) e 44405 (GameServer padrão)
- Fila de conexões ativas via query SQL
Passo 1 — Criar o Script de Verificação de Processos
Crie o arquivo C:\MuServer\Scripts\monitor_processos.bat:
@echo off
setlocal
:: Configuracoes
set LOG=C:\MuServer\Logs\monitor.log
set DATA=%DATE% %TIME%
:: Verificar GameServer
tasklist /fi "IMAGENAME eq GameServer.exe" | find "GameServer.exe" >nul 2>&1
if errorlevel 1 (
echo [%DATA%] ALERTA: GameServer.exe NAO encontrado >> %LOG%
call C:\MuServer\Scripts\alertar.bat "GameServer parado"
:: Reinicio automatico
start "" "C:\MuServer\GameServer\GameServer.exe"
echo [%DATA%] INFO: GameServer.exe reiniciado >> %LOG%
) else (
echo [%DATA%] OK: GameServer.exe em execucao >> %LOG%
)
:: Verificar ConnectServer
tasklist /fi "IMAGENAME eq ConnectServer.exe" | find "ConnectServer.exe" >nul 2>&1
if errorlevel 1 (
echo [%DATA%] ALERTA: ConnectServer.exe NAO encontrado >> %LOG%
call C:\MuServer\Scripts\alertar.bat "ConnectServer parado"
start "" "C:\MuServer\ConnectServer\ConnectServer.exe"
)
:: Verificar DataServer
tasklist /fi "IMAGENAME eq DataServer.exe" | find "DataServer.exe" >nul 2>&1
if errorlevel 1 (
echo [%DATA%] ALERTA: DataServer.exe NAO encontrado >> %LOG%
call C:\MuServer\Scripts\alertar.bat "DataServer parado"
start "" "C:\MuServer\DataServer\DataServer.exe"
)
endlocal
Passo 2 — Script de Alerta por Arquivo de Texto (Webhook Opcional)
Crie C:\MuServer\Scripts\alertar.bat para registrar e opcionalmente disparar webhook:
@echo off
set MENSAGEM=%~1
set DATA=%DATE% %TIME%
set LOG_ALERTA=C:\MuServer\Logs\alertas.log
echo [%DATA%] CRITICO: %MENSAGEM% >> %LOG_ALERTA%
:: Opcional: disparar webhook Discord via PowerShell
powershell -Command "& { $body = ConvertTo-Json @{content='[MU Server] ALERTA: %MENSAGEM%'}; Invoke-RestMethod -Uri 'https://discord.com/api/webhooks/SEU_WEBHOOK_ID/SEU_TOKEN' -Method Post -Body $body -ContentType 'application/json' }" >> %LOG_ALERTA% 2>&1
SEU_WEBHOOK_ID e SEU_TOKEN pelo webhook real do seu canal Discord. Nunca commite esse arquivo em repositórios públicos, pois o token dá acesso de escrita ao canal.Passo 3 — Monitoramento via SQL Server
Consultas SQL para verificar a saúde do banco MuOnline. Execute via sqlcmd ou agende no SQL Server Agent.
Verificar jogadores online ativos (Session 6):
USE MuOnline;
SELECT COUNT(*) AS Jogadores_Online
FROM MEMB_STAT
WHERE ConnectStat = 1;
Detectar contas bloqueadas em excesso (possível ataque de força bruta):
USE MuOnline;
SELECT TOP 20
memb___id,
bloc_code,
mail_addr,
modi_date
FROM MEMB_INFO
WHERE bloc_code > 0
AND modi_date >= DATEADD(HOUR, -1, GETDATE())
ORDER BY modi_date DESC;
Verificar tamanho do banco e alertar se acima de 10 GB:
USE master;
SELECT
DB_NAME(database_id) AS Banco,
ROUND(SUM(size * 8.0 / 1024 / 1024), 2) AS Tamanho_GB
FROM sys.master_files
WHERE DB_NAME(database_id) = 'MuOnline'
GROUP BY database_id
HAVING SUM(size * 8.0 / 1024 / 1024) > 10;
Crie um Job no SQL Server Agent (Management → SQL Server Agent → Jobs → New Job) com frequência de 30 minutos executando essas queries e enviando e-mail via Database Mail quando o resultado não for vazio.
EXEC msdb.dbo.sp_send_dbmail @profile_name='MonitorMU', @recipients='[email protected]', @subject='Teste', @body='OK';Passo 4 — Monitoramento de Porta de Rede
Crie C:\MuServer\Scripts\monitor_porta.bat:
@echo off
setlocal
set HOST=127.0.0.1
set PORTA=55901
set DATA=%DATE% %TIME%
set LOG=C:\MuServer\Logs\monitor.log
powershell -Command "& { $client = New-Object System.Net.Sockets.TcpClient; try { $client.Connect('%HOST%', %PORTA%); $client.Close(); Write-Output 'OK' } catch { Write-Output 'FALHA' } }" > C:\MuServer\Scripts\temp_port.txt
findstr "OK" C:\MuServer\Scripts\temp_port.txt >nul
if errorlevel 1 (
echo [%DATA%] ALERTA: Porta %PORTA% inacessivel >> %LOG%
call C:\MuServer\Scripts\alertar.bat "Porta ConnectServer %PORTA% inacessivel"
) else (
echo [%DATA%] OK: Porta %PORTA% respondendo >> %LOG%
)
del C:\MuServer\Scripts\temp_port.txt
endlocal
Passo 5 — Agendar Execução Automática no Windows
Use o Agendador de Tarefas do Windows para rodar os scripts periodicamente.
Via linha de comando (executar como Administrador):
:: Monitor de processos a cada 60 segundos
schtasks /create /tn "MU_Monitor_Processos" /tr "C:\MuServer\Scripts\monitor_processos.bat" /sc minute /mo 1 /ru SYSTEM /f
:: Monitor de porta a cada 2 minutos
schtasks /create /tn "MU_Monitor_Porta" /tr "C:\MuServer\Scripts\monitor_porta.bat" /sc minute /mo 2 /ru SYSTEM /f
/ru SYSTEM para que as tarefas rodem mesmo sem usuário logado. Para servidores com múltiplos administradores, considere criar uma conta de serviço dedicada MuMonitor com permissões mínimas.Passo 6 — Monitoramento de Uso de Memória RAM
Adicione ao monitor_processos.bat o bloco abaixo para alertar quando o GameServer consumir mais de 1,5 GB:
:: Checar uso de memoria do GameServer (limite: 1536 MB)
for /f "tokens=5" %%a in ('tasklist /fi "IMAGENAME eq GameServer.exe" /fo list ^| findstr "Mem"') do (
set MEM=%%a
)
:: Nota: MEM vem em KB, converter para MB e comparar
powershell -Command "& { $proc = Get-Process GameServer -ErrorAction SilentlyContinue; if ($proc -and ($proc.WorkingSet64 / 1MB) -gt 1536) { Write-Output 'ALTO' } else { Write-Output 'OK' } }" > C:\MuServer\Scripts\temp_mem.txt
findstr "ALTO" C:\MuServer\Scripts\temp_mem.txt >nul
if not errorlevel 1 (
echo [%DATA%] ALERTA: GameServer com uso de memoria acima de 1.5GB >> %LOG%
call C:\MuServer\Scripts\alertar.bat "Memoria GameServer critica"
)
del C:\MuServer\Scripts\temp_mem.txt
Passo 7 — Rotação de Logs
Logs sem rotação enchem o disco em semanas. Crie C:\MuServer\Scripts\rotacionar_logs.bat:
@echo off
:: Manter apenas logs dos ultimos 30 dias
forfiles /p "C:\MuServer\Logs" /s /m *.log /d -30 /c "cmd /c del @path"
echo [%DATE% %TIME%] Logs antigos removidos >> C:\MuServer\Logs\monitor.log
Agende para rodar diariamente às 03:00:
schtasks /create /tn "MU_Rotacao_Logs" /tr "C:\MuServer\Scripts\rotacionar_logs.bat" /sc daily /st 03:00 /ru SYSTEM /f
Estrutura Final de Arquivos
C:\MuServer\
├── Scripts\
│ ├── monitor_processos.bat
│ ├── monitor_porta.bat
│ ├── alertar.bat
│ └── rotacionar_logs.bat
└── Logs\
├── monitor.log
└── alertas.log
Resolução de Problemas
Script não reinicia o GameServer após crash: Verifique se o caminho no start "" aponta para o diretório correto e se o executável tem permissão de execução pela conta SYSTEM. Teste manualmente: runas /user:SYSTEM "C:\MuServer\GameServer\GameServer.exe".
Alertas Discord não chegam: Confirme que o servidor tem acesso à internet na porta 443. Teste: Test-NetConnection discord.com -Port 443 no PowerShell. Se o firewall bloqueia, libere saída HTTPS para o processo PowerShell.exe.
SQL Server Agent não envia e-mail: Valide o perfil de Database Mail com EXEC msdb.dbo.sysmail_help_status_sp; e verifique se o status é STARTED. Reinicie com EXEC msdb.dbo.sysmail_start_sp; se necessário.
Perguntas frequentes
Com que frequência devo rodar o script de monitoramento?
Recomenda-se intervalos de 60 segundos para processos críticos (GameServer, ConnectServer) e 5 minutos para verificações de banco de dados e espaço em disco. Intervalos menores que 30 segundos podem sobrecarregar servidores com hardware limitado.
O script reinicia o servidor automaticamente em caso de crash?
Sim, se você incluir a lógica de restart no bloco condicional do .bat ou PowerShell. Use Start-Process 'GameServer/GameServer.exe' dentro do bloco IF NOT (tasklist /fi 'IMAGENAME eq GameServer.exe' | find 'GameServer.exe') para reinicialização automática.
Como evitar falsos positivos no alerta de processo parado?
Adicione uma segunda verificação com 10-15 segundos de delay antes de disparar o alerta. Um processo pode aparecer ausente momentaneamente durante uma reinicialização agendada ou update. Use um contador de falhas consecutivas antes de alertar.
Posso monitorar múltiplas instâncias de GameServer no mesmo host?
Sim. Adapte o script para verificar pelo nome do processo com tasklist /fi 'IMAGENAME eq GameServer1.exe' e repita o bloco para GameServer2.exe. Certifique-se de que cada instância tem um executável com nome distinto para evitar ambiguidade.