Como configurar logs rotativos e retenção no servidor de MU
Configure rotação automática, compactação e política de retenção dos logs do seu servidor de MU Online para evitar disco cheio, manter histórico útil e ainda ter rastros para investigar fraudes e travamentos.
Logs são a memória do seu servidor de MU Online. Quando um jogador acusa outro de duplicar itens, quando o GameServer trava sem explicação, ou quando você precisa entender por que o banco ficou lento às 3 da manhã, é nos logs que a resposta está. O problema é que logs sem gerenciamento viram um pass
Logs são a memória do seu servidor de MU Online. Quando um jogador acusa outro de duplicar itens, quando o GameServer trava sem explicação, ou quando você precisa entender por que o banco ficou lento às 3 da manhã, é nos logs que a resposta está. O problema é que logs sem gerenciamento viram um passivo: crescem sem parar, enchem o disco e derrubam justamente o servidor que deveriam ajudar a manter no ar. A solução é configurar rotação (dividir os logs em pedaços gerenciáveis), compactação (reduzir o espaço dos antigos) e retenção (definir por quanto tempo guardar cada tipo). Este guia mostra como montar tudo isso no Windows, com scripts prontos e uma política de retenção pensada por categoria. Os valores citados são exemplos que variam por provedor/versão, então ajuste à sua realidade.
Pré-requisitos
Para configurar logs rotativos você precisa de:
- Acesso administrativo ao servidor (RDP no Windows Server) com permissão para criar Tarefas Agendadas.
- Conhecimento de onde cada componente grava seus logs: ConnectServer, GameServer, DataServer e SQL Server.
- Espaço em disco suficiente para pelo menos alguns dias de log antes da primeira compactação.
- PowerShell disponível (padrão no Windows Server) para os scripts de rotação.
- Uma decisão de política de retenção por tipo de log (veremos adiante).
- Um servidor base funcional. Se você ainda está montando, comece por como criar servidor de MU Online.
Passo 1: Mapeie todos os logs do servidor
Antes de rotacionar qualquer coisa, você precisa saber o que existe e onde. Um servidor de MU típico gera logs em vários lugares. Faça um inventário:
| Fonte | Local típico (exemplo) | Conteúdo |
|---|---|---|
| GameServer | GameServer\Log\ | Login, combate, comércio, comandos, erros |
| ConnectServer | ConnectServer\Log\ | Conexões, seleção de servidor |
| DataServer | DataServer\Log\ | Acesso ao banco, salvamentos |
| SQL Server | pasta LOG da instância | Erros do banco, deadlocks |
| Site/Painel | pasta de logs do servidor web | Acessos, cadastros, doações |
Os caminhos exatos variam por provedor/versão do emulador. Documente os seus em um arquivo de referência; isso economiza tempo em toda manutenção futura.
Passo 2: Escolha a estratégia de rotação
Existem duas abordagens principais de rotação, e você pode combiná-las:
- Rotação por data: um arquivo novo por dia (por exemplo,
GameServer-2025-01-31.log). Muitos emuladores já fazem isso nativamente. É a mais simples e segura, porque nunca mexe no arquivo que o processo está escrevendo. - Rotação por tamanho: quando o arquivo atinge um limite (por exemplo, 100 MB), ele é fechado, renomeado e um novo começa. Útil para logs muito verbosos que crescem rápido dentro de um mesmo dia.
Para a maioria dos servidores, a rotação por data é o ponto de partida ideal. Se algum log específico cresce descontroladamente dentro do dia, adicione rotação por tamanho para ele.
> Verifique se o seu emulador já rotaciona por data. Se sim, seu trabalho vira apenas compactar e reter. Se não, os scripts abaixo cuidam disso.
Passo 3: Crie o script de rotação e compactação
O coração da automação é um script PowerShell que percorre a pasta de logs, compacta os arquivos antigos e apaga os que passaram do prazo. Salve algo como C:\MuServer\Scripts\RotacionarLogs.ps1:
# Configuração
$pastaLogs = "C:\MuServer\GameServer\Log"
$diasParaZipar = 1 # compacta logs com mais de 1 dia
$diasParaApagar = 30 # apaga arquivos com mais de 30 dias
$agora = Get-Date
# 1) Compacta logs antigos ainda não compactados
Get-ChildItem -Path $pastaLogs -Filter *.log |
Where-Object { $_.LastWriteTime -lt $agora.AddDays(-$diasParaZipar) } |
ForEach-Object {
$zip = "$($_.FullName).zip"
Compress-Archive -Path $_.FullName -DestinationPath $zip -Force
Remove-Item $_.FullName -Force
Write-Output "Compactado: $($_.Name)"
}
# 2) Apaga arquivos compactados alem do prazo de retencao
Get-ChildItem -Path $pastaLogs -Filter *.zip |
Where-Object { $_.LastWriteTime -lt $agora.AddDays(-$diasParaApagar) } |
ForEach-Object {
Remove-Item $_.FullName -Force
Write-Output "Removido por retencao: $($_.Name)"
}
Ajuste $diasParaZipar e $diasParaApagar conforme a política definida no próximo passo. Repita o bloco (ou parametrize o script) para cada pasta de log mapeada.
Passo 4: Defina a política de retenção por categoria
Nem todo log tem o mesmo valor. Tratar todos igual é um erro: ou você guarda lixo demais, ou apaga cedo demais aquilo que precisaria em uma investigação. Separe por categoria e defina retenções diferentes.
| Categoria de log | Retenção sugerida (exemplo) | Justificativa |
|---|---|---|
| Segurança / anti-fraude | Longa (meses) | Investigações surgem tarde |
| Transações valiosas (itens, doações) | Longa (meses) | Chargeback e disputas |
| Erros críticos do servidor | Média-longa (semanas a meses) | Diagnóstico de bugs recorrentes |
| Login / conexões | Média (semanas) | Suporte e padrões de acesso |
| Depuração verbosa | Curta (poucos dias) | Volume alto, valor efêmero |
Os prazos exatos variam por provedor/versão e pela sua capacidade de disco e obrigações legais. O princípio é constante: retenha mais tempo o que é caro de perder e descarte rápido o que é barato de recriar.
Passo 5: Agende a rotação com Tarefas Agendadas
Com o script pronto, agende-o para rodar automaticamente todo dia. Use o Agendador de Tarefas do Windows. Você pode criá-lo pela interface gráfica ou por linha de comando:
# Cria uma tarefa diaria as 05:00 para rotacionar logs
$acao = New-ScheduledTaskAction -Execute "powershell.exe" `
-Argument "-NoProfile -ExecutionPolicy Bypass -File C:\MuServer\Scripts\RotacionarLogs.ps1"
$gatilho = New-ScheduledTaskTrigger -Daily -At 5:00AM
Register-ScheduledTask -TaskName "MU-RotacionarLogs" `
-Action $acao -Trigger $gatilho -RunLevel Highest `
-Description "Compacta e aplica retencao nos logs do MU"
Escolha um horário de baixa atividade (madrugada) para que a compactação e a exclusão não disputem I/O de disco com o pico de jogadores. Isso evita que a própria rotação vire causa de lag.
Passo 6: Trate o log do SQL Server à parte
O SQL Server tem seus próprios mecanismos e não deve ser gerenciado só com scripts de arquivo. Dois pontos merecem atenção:
- Log de erros do SQL Server (ERRORLOG): por padrão o SQL Server mantém alguns arquivos históricos e cicla no reinício. Você pode aumentar o número de arquivos retidos e forçar o ciclo periodicamente:
-- Forca a criacao de um novo arquivo de ERRORLOG
EXEC sp_cycle_errorlog;
- Log de transações do banco (.ldf): este NÃO é um log de texto para leitura; é parte do mecanismo do banco. Nunca apague o
.ldf. Em vez disso, mantenha o modelo de recuperação adequado e faça backups do log de transações se estiver em modo FULL, para que ele não cresça indefinidamente. A configuração ideal varia por versão e pela sua estratégia de backup.
> Confundir o log de transações do SQL (.ldf) com um log de texto descartável e apagá-lo é um erro grave que pode corromper o banco. Trate o .ldf pela via de backups, nunca por exclusão manual.
Passo 7: Monitore o crescimento e valide a rotação
Configurar não basta; você precisa confirmar que a rotação está funcionando e que o disco não corre risco. Monte um monitoramento leve:
- Verifique periodicamente o espaço livre em disco da partição de logs.
- Confirme que os arquivos
.zipestão sendo criados e os antigos removidos no prazo. - Cheque os logs da própria Tarefa Agendada para garantir que ela roda sem erro.
Um script rápido para ver o tamanho ocupado por logs em cada pasta:
$pastas = @(
"C:\MuServer\GameServer\Log",
"C:\MuServer\ConnectServer\Log",
"C:\MuServer\DataServer\Log"
)
foreach ($p in $pastas) {
if (Test-Path $p) {
$tamMB = (Get-ChildItem $p -Recurse -File |
Measure-Object Length -Sum).Sum / 1MB
Write-Output ("{0,-45} {1,8:N1} MB" -f $p, $tamMB)
}
}
Se uma pasta cresce muito mais rápido que as outras, revise o nível de verbosidade daquele componente. Muitas vezes dá para reduzir o log de depuração sem perder a informação que importa.
Erros comuns e soluções
| Erro | Causa provável | Solução |
|---|---|---|
| Disco enche e servidor cai | Sem rotação nem retenção | Automatize compactação e exclusão por idade |
| Rotação causa lag no pico | Agendada em horário movimentado | Rode a rotação na madrugada |
| Perdeu prova de fraude | Retenção curta demais | Defina retenção longa para logs de segurança |
| Apagou o arquivo .ldf do SQL | Confundir com log de texto | Nunca apague o .ldf; use backup de log de transações |
| Script falha silenciosamente | Sem checagem da Tarefa Agendada | Monitore o histórico da tarefa e o espaço em disco |
| Compactação corrompe log ativo | Zipar arquivo aberto pelo processo | Compacte só arquivos de dias anteriores |
| Todos os logs com mesma retenção | Política única | Separe por categoria e retenha de forma diferente |
Checklist de lançamento
- Mapeei todos os locais de log (GameServer, ConnectServer, DataServer, SQL, site).
- Escolhi a estratégia de rotação (por data e, se preciso, por tamanho).
- Criei o script de rotação, compactação e exclusão por idade.
- Defini uma política de retenção diferente por categoria de log.
- Agendei a rotação para a madrugada via Tarefas Agendadas.
- Configurei o ciclo do ERRORLOG do SQL Server à parte.
- Confirmei que o log de transações (.ldf) é tratado por backup, não por exclusão.
- Só compacto arquivos de dias anteriores, nunca o log ativo.
- Montei monitoramento de espaço em disco e do histórico da tarefa.
- Validei que arquivos antigos são compactados e removidos no prazo.
Logs bem gerenciados são invisíveis quando tudo vai bem e valiosíssimos quando algo dá errado. Ao rotacionar por data, compactar os antigos e reter cada categoria pelo tempo certo, você garante que o disco nunca vira gargalo e que, no dia da investigação, o rastro que você precisa ainda está lá. É uma daquelas configurações que dão pouco trabalho no começo e evitam muita dor de cabeça depois.
Perguntas frequentes
Por quanto tempo devo guardar os logs do servidor?
Depende do tipo de log. Logs de erro e de segurança/anti-fraude valem manter por mais tempo (semanas a meses) porque investigações surgem depois do fato. Logs de depuração verbosos podem ser descartados em poucos dias. O período ideal varia por provedor/versão e pela sua capacidade de disco, então balanceie utilidade contra espaço.
Rotação de log pode ser feita com o servidor no ar?
Sim, na maioria dos casos. Estratégias por data geram um arquivo novo por dia sem tocar no atual. Já mover um arquivo aberto pelo processo pode exigir cuidado, pois alguns emuladores mantêm o handle aberto. Quando houver dúvida, agende a rotação para o reinício diário ou teste em ambiente controlado.
Logs ocupam muito espaço mesmo?
Em servidores movimentados sim. Logs verbosos de GameServer e de banco podem crescer vários GB por dia. Sem rotação e compactação, isso enche o disco e derruba o servidor. Compactar arquivos antigos reduz o tamanho de forma drástica, tipicamente para uma fração do original, embora a taxa varie por conteúdo.
Preciso de ferramentas externas para rotacionar logs no Windows?
Nem sempre. Você pode combinar Tarefas Agendadas do Windows com scripts PowerShell ou batch para renomear, compactar e apagar logs por idade. Ferramentas dedicadas existem e ajudam em ambientes maiores, mas o essencial dá para montar com o que já vem no sistema.
O que nunca devo apagar dos logs?
Evite descartar cedo demais os logs de segurança, de transações importantes (itens valiosos, comércio, doações) e de erros críticos. Esses são os que você mais vai precisar em investigações de fraude, chargeback ou bug. Defina uma retenção maior para eles e trate os logs de depuração como descartáveis.