Muito trabalho com os seus logs?
Se tem que gerir múltiplos servidores,cuidar dos logs de segurança de todos eles é um trabalho árduo!
A melhor solução é a automação! A criação de um script automatizado para recuperar os logs de cada servidor,excluir os eventos do Event Viewer e armazenar tudo numa pasta do servidor de arquivos (ou qualquer outra pasta de rede).
O script abaixo exemplifica como percorrer uma listagem de servidores (através do arquivo servidores.txt),recuperar o log de segurança e enviar para uma localização remota central:
' VB Script Document'Para executar:"cscript logs.vbs"'--------------------------------------------strDate = Year(Now) &"-" &String(2 - Len(Month(Now)),"0") &Month(Now) &_"-" &String(2 - Len(Day(Now)),"0") &Day(Now)pastaLocal = "C:\logs" 'pastaLocal tem que ser a pasta indicada em arquivoLogarquivoLog = "C:\logs\" &strDate &"-SEG.evt" 'arquivo de log local de cada máquina remotapastaRemota = "\\arquivos2\logs"arquivoSRV = "\\arquivos2\logs\servidores.txt"WScript.Echo vbCRLF &"Coletor de Eventos de Segurança" &vbCRLF &vbCRLF &_"Lista de entrada:" &vbTAB &arquivoSRV &vbCRLF &_"Pasta Log Local:" &vbTAB &arquivoLog &" (em cada máquina remota)" &vbCRLF &_"Pasta Log Remota:" &vbTAB &pastaRemota &vbCRLF &vbCRLFSet oFS = CreateObject("Scripting.FileSystemObject")'Abrir o arquivo de texto com a listagem de servidores'Apenas um computador por linha,SEM ESPAÇOS E SEM TABS!Set oTS = oFS.OpenTextFile(arquivoSRV)'percorre o arquivo de textoDo Until oTS.AtEndOfStream'busca o próximo computadorsComputer = oTS.ReadLineWScript.StdOut.Write "conexão a " &sComputer &"..."Set oWMIService = GetObject("winmgmts:" _&"{impersonationLevel=impersonate,(Security,Backup)}!\\" &_sComputer &"\root\cimv2")WScript.StdOut.Write " estabelecida." &vbCRLF &"recuperando arquivo de log remoto..."'efetua um query ao log de segurançaSet cLogFiles = oWMIService.ExecQuery ("Select * from Win32_NTEventLogFile where " &"LogFileName='Security'")'pesquisa a coleção de logsFor Each oLogfile in cLogFilesIf(oFS.FolderExists(pastaLocal)) = 0 ThenoFS.CreateFolder pastaLocalEnd IfIf (oFS.FileExists(arquivoLog)) ThenoFS.Deletefile arquivoLogEnd If'faz o backup do log para um arquivo local na máquina remotaerrBackupLog = oLogFile.BackupEventLog(arquivoLog)'verifica se ocorreu algum erroIf errBackupLog <>0 Then'se ocorreu - apresentar o erroWscript.Echo vbCRLF &"Não foi possível recuperar o log de " &sComputer &". Erro:" &errBackupLogElseWScript.StdOut.Write " terminado." &vbCRLF &"Excluíndo log de eventos remoto..."'sem erros - é seguro apagar o logoLogFile.ClearEventLog()WScript.StdOut.Write " terminado." &vbCRLF &"Copiando arquivo da máquina remota para repositório central..."If (Not oFS.FolderExists(pastaRemota &"\" &sComputer)) ThenWScript.StdOut.Write " (Nova pasta)..."oFS.CreateFolder pastaRemota &"\" &sComputerEnd IfoFS.CopyFile "\\" &sComputer &"\" &Replace(arquivoLog,":","$"),pastaRemota &"\" &sComputer &"\" &strDate &"-SEG.evt"WScript.StdOut.Write " terminado." &vbCRLF &"excluíndo arquivo de log da máquina remota..."oFS.Deletefile "\\" &sComputer &"\" &Replace(arquivoLog,":","$")WScript.Echo " terminado."End IfWScript.EchoNextLoop'fechar o arquivo de servidoresoTS.Close'--------------------------------------------Os arquivos de log no formato .evt ocupam bastante espaço,poderemos efetuar ainda um script (ou adicionar ao já existente) para após a cópia dos arquivos guardá-los em formato comprimido (ZIP) para economizar espaço.
Segue abaixo uma demonstração:
' VB Script Document'Para executar:"cscript arquivar.vbs"sub shell(cmd)' Executar um comando pela linha de comandos (Shell)dim objShellSet objShell = WScript.CreateObject( "WScript.Shell" )objShell.Run(cmd)Set objShell = Nothingend sub'--------------------------------------------strDate = Year(Now) &"-" &String(2 - Len(Month(Now)),"0") &Month(Now) &_"-" &String(2 - Len(Day(Now)),"0") &Day(Now)pastaRemota = "\\arquivos2\logs"arquivoSRV = "\\arquivos2\logs\servers.txt"'pastaRemota = "\\server\grps\is\dumpTest"'arquivoSRV = "\\server\grps\is\dumpTest\servers.txt"WScript.Echo vbCRLF &"Arquivador de Eventos" &vbCRLF &vbCRLF &_"Arquivo de entrada:" &vbTAB &arquivoSRV &vbCRLF &_"Repositório central:" &vbTAB &pastaRemota &vbCRLF &vbCRLFSet oFS = CreateObject("Scripting.FileSystemObject")'Abrir o arquivo de texto com os nomes dos servidores'apenas um computador por linha,SEM ESPAÇOS OU TABS!Set oTS = oFS.OpenTextFile(arquivoSRV)'Percorrer o arquivo de textoDo Until oTS.AtEndOfStream'Buscar computadorComputador = oTS.ReadLineWScript.StdOut.Write "Arquivando arquivos do servidor:" &Computador &"..."If (oFS.FileExists(Computador &"\" &strDate &"-SEG.evt")) ThenFileExists = "Verdadeiro"ElseFileExists = "Falso"End IfIf (FileExists="Verdadeiro") Then'Executar 7z para comprimir arquivosArquivosZip = "7za.exe a " &Computador &"\" &strDate &".zip " &Computador &"\" &"*.evt"shell ArquivosZipIf (oFS.FileExists(Computador &"\" &strDate &".zip")) ThenWScript.StdOut.Write " Ok!" &vbCRLF &vbCRLF &"Eliminando arquivos de evento..."oFS.Deletefile Computador &"\*.evt"ElseWScript.StdOut.Write " FALHA!" &vbCRLF &vbCRLF &"Ocorreu um erro! Programa"End IfWScript.Echo " terminado."WScript.EchoElseWScript.StdOut.Write " FALHA!" &vbCRLF &vbCRLF &"Não foram localizados registros de evento!"WScript.EchoEnd IfLoop'fechar o arquivo de entradaoTS.Close'--------------------------------------------Com estas dicas fica mais eficiente a administração dos logs de eventos e evitará que eles fiquem cheios. Se quiser dá para integrar os dois scripts acima em um único script,além que dá para efectuar o arquivamento de outros tipos de log. Para tanto basta substituir o LogFileName na linha:
Set cLogFiles = oWMIService.ExecQuery ("Select * from Win32_NTEventLogFile where " &"LogFileName='Security'")Por:
LogFileName=’Application’para Logs de aplicação.
LogFileName=’System’para Logs de sistema.
LogFileName=’File Replication Service’para Logs de replicação de arquivos.
LogFileName=’Directory Service’para Logs do serviço de diretório.
LogFileName=’DNS Server’para Logs do servidor DNS.
LogFileName=’Internet Explorer’para Logs do Internet Explorer.
LogFileName=’Windows PowerShell’para Logs da Shell do Windows.
O comando para comprimir (zipar) os arquivos é do 7zip,um software open-source para compressão de arquivos. Pode ser baixado gratuitamente em www.7zip.org. Neste caso foi usada a versão de linha de comandos que não requer qualquer instalação.
Agora resta apenas agendar este script através do agendador de tarefas do windows (Task Scheduler) e programar para execução diária.


Português
Inglês
Bom dia!
È possivel efetuar a compactação de log so IIS,e excluir os logs originas apos a compactação ?/
Grato
Martins
Like or Dislike:
0
0
Olá Martins,é possível sim!
O código abaixo arquiva (comprime) os logs IIS com x nr de dias e permite também se você quiser excluir arquivos comprimidos também por data:
Option ExplicitWScript.Timeout = 82800
' This Script archives (compresses to a zip file,then deletes the
' original) IIS log files older than a specified number of days.
' The script can also delete the compressed archive files older
' than another specified number of days.
'
' Run it as a daily scheduled task on high traffic web servers to
' avoid running out of disc space. IIS logs can typically be
' compressed to well below 1/20 of the original file size.
'
' The script needs the command line version of the free 7-Zip
' compressor available on http://www.7-zip.org/
'
' The ArchiveLogFiles function takes three parameters:
' "Path to log dir"
' "Compress log files older than n days and delete the original files"
' "Delete compressed log files older than n days"
'
' Multiple function calls can be added to archive files in different
' log folders with different log retentions.
'
' Note that the function runs through subfolders recursively,so if
' the same log retention should be used on a whole log folder tree
' structure,only one call with the root log folder is needed.
' Additional calls with specific subfolders can then be made to have
' shorter retentions on those.
'
' Edit the example lines below to match the log folder paths,
' archive and retention values needed on the server.
ArchiveLogFiles "D:\Logfiles",30,180
ArchiveLogFiles "D:\Logfiles\W3SVC1",14,30
ArchiveLogFiles "D:\Logfiles\W3SVC243",5,30
ArchiveLogFiles "D:\Logfiles\SMTPSVC1",7,60
Function ArchiveLogFiles(strLogPath,intZipAge,intDelAge)
Dim objFs
Dim objFsCheck
Dim objFolder
Dim objSubFolder
Dim objFile
Dim objWShell
Set objWShell = CreateObject("WScript.Shell")
Set objFs = CreateObject("Scripting.FileSystemObject")
Set objFsCheck = CreateObject("Scripting.FileSystemObject")
If Right(strLogPath,1) "\" Then
strLogPath = strLogPath &"\"
End If
If objFs.FolderExists(strLogPath) Then
Set objFolder = objFs.GetFolder(strLogPath)
For Each objSubFolder in objFolder.subFolders
ArchiveLogFiles strLogPath &objSubFolder.Name,intZipAge,intDelAge
Next
For Each objFile in objFolder.Files
If (InStr(objFile.Name,"ex") >0) _
And (Right(objFile.Name,4) = ".log") Then
If DateDiff("d",objFile.DateLastModified,Date) >intZipAge Then
objWShell.Run "7za.exe a -tzip """ &strLogPath &_
Left(objFile.Name,Len(objFile.Name)-3) &"zip"" """ &_
strLogPath &objFile.Name &"""",7,true
If objFsCheck.FileExists(strLogPath &_
Left(objFile.Name,Len(objFile.Name)-3) &"zip") And _
(objFsCheck.FileExists(strLogPath &objFile.Name)) Then
objFsCheck.DeleteFile(strLogPath &objFile.Name)
End If
End If
ElseIf (InStr(objFile.Name,"ex") >0) _
And (Right(objFile.Name,4) = ".zip") Then
If DateDiff("d",objFile.DateLastModified,Date) >intDelAge Then
objFsCheck.DeleteFile(strLogPath &objFile.Name)
End If
End If
Next
Set objFs = Nothing
Set objFsCheck = Nothing
Set objFolder = Nothing
Set objWShell = nothing
End If
End Function
(Retirado de http://www.808.dk/?code-iis-log-housekeeping)
Like or Dislike:
0
0
Security Event Log do windows ? ,necessito ler esses logs para buscar dandos e armazenar em um banco de dados.
Like or Dislike:
0
0