O maior portal de MU Online do Brasil — desde 2003
Tutorial Avançado Tutoriais

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.

EQ Equipe ViciadosMU · Atualizado em 3 jul 2026 · ⏱ 12 min de leitura

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
Nota: Servidores Season 6 costumam rodar GameServer.exe consumindo entre 200 MB e 1,2 GB de RAM dependendo do número de jogadores e mapas carregados. Defina o limiar de alerta de memória em 80% do total disponível no host.

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
Dica: Mantenha o log em disco separado do volume do sistema operacional. Se o disco C: lotar, o script ainda consegue gravar alertas num volume D: ou E:.

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
Atenção: Substitua 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.

Nota: Para configurar Database Mail: Management → Database Mail → Configure Database Mail. Use um servidor SMTP autenticado. Após configurar, teste com 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
Dica: Use /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.

Atenção: Nunca armazene senhas em texto claro dentro dos scripts .bat. Para credenciais SQL, use autenticação Windows (Trusted_Connection=yes) ou armazene em variáveis de ambiente do sistema, nunca hardcoded no script.

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.

EQ

Equipe ViciadosMU

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

Continue lendo

Artigos relacionados