Windows事件日志中超过4 GB的含义是什么?


13

我发现此Microsoft KB涵盖了Windows 2008 / Vista以下操作系统的建议最大事件日志设置,建议最大为4GB,并且还看到一些模糊的参考,至少不建议大于4 GB的事件日志2008 R2,但我想知道如果事件日志超出此大小会发生什么?

我已经在测试服务器(2012 R2)上超过了此限制,并且没有注意到内存占用率高之类的问题。我们不在乎2008 R2之前的操作系统,但想要一个大日志,因为我们正在通过许多机器收集事件Windows事件转发,希望将所有事件放在一个地方。


3
由于您的问题引起了我的兴趣,而我的老板今天很生气,我今晚将让事件登录到一台服务器失控的情况下,然后将结果发布回我现有的答案中,但是正如我所说,4 GB是在64位操作系统上并不是一个硬性限制,我的经验是,即使32位应用程序和API通常也可以处理大于4 GB的文件。
HopelessN00b 2015年

嗯,似乎生成一个大于4 GB的事件日志文件可能要更长一些。我们最繁忙的域控制器在20分钟前清除了其日志。
HopelessN00b 2015年

Answers:


10

除了必须加载4 GB日志的可怕性能和荒谬的等待时间外,如果您不得不搜索这么大的东西,那就麻烦了。我认为在我的环境中看到的最大容量为10 GB,尽管我放弃等待加载,但似乎没有任何损害。

Server 2008的4GB警告是由于在4 GB时经常遇到的32位限制。在64位系统上,您可以允许它增长到16 TB(或64,取决于),这应该没问题,尽管我不知道有人能接近这个极限。

当然,如果您还没有,那么您会发现使用非常大的日志文件是不切实际的-上次我尝试加载一个简单的100 GB(文本)日志文件时,如果没有它,就无法打开它使应用程序打开时崩溃,我怀疑您会在100 GB之前解决该问题。

更好的方法是将文件大小限制在合理范围内,并使用脚本不时清除它。我在我的环境中使用以下内容,并结合了安全日志的1 GB大小限制。我们的某些服务器(大多数)每天会生成3 GB以上的安全事件,我们不想浪费所有空间在我整理之前要退出的巨大日志文件上,因此我的脚本将日志内容复制到了另一个文件夹,然后清除要再次写入的事件日志。并且由于备份了我将其复制到的文件夹,因此我们始终可以在需要的可怕事件中返回日志。

#Adapted from: http://blogs.technet.com/b/heyscriptingguy/archive/2009/04/08/how-can-i-check-the-size-of-my-event-log-and-then-backup-and-archive-it-if-it-is-more-than-half-full.aspx

Param($logName = "security",$backupFolder = "C:\backupLogs")

Function Get-EventLog([string]$logName)
{
 $log = Get-WmiObject -Class Win32_NTEventLogFile -filter "LogFileName = '$logName'"
 If($log.FileSize / $log.MaxFileSize -ge .9)
  {
   "Log is at least 90% full. Backing up now."
   Backup-EventLog($log)
  } #end if
 Else 
 { 
   "Not backed up: $logName is only " + ($log.FileSize / $log.MaxFileSize).tostring("N2") +  " percent full" 
 } #end else
} #end Get-EventLog

Function Backup-EventLog($log)
{
 $folder = Join-Path -Path $BackUpFolder -ChildPath (Get-Date).ToString("MMddyy_hhmm")
 If(-not(Test-Path $folder)) 
   { 
     New-Item -path $folder -itemtype Directory -force | out-Null
   }
  $rtn = $log.BackupEventLog("$folder\$logName.evt").ReturnValue
  If($rtn -eq 0)
    {
     $log.ClearEventLog() | out-null
    } #end if
 ELSE 
   {
    "$logName could not be cleared. Backup ended with $($rtn)" 
  }
} #end Backup-EventLog

# *** ENTRY POINT ***
Get-EventLog -logname $logname

6
对于任何记得Windows事件日志是内存映射文件并将整个日志加载到内存的人来说,Windows Vista / Server 2008中引入的新事件日志记录基础结构消除了这一限制。但是,如果您仍在使用Server 2003, ,则无法创建大小超过1GB的日志,因为在该OS中,任何进程的内存映射文件总数都不能超过1 GB。
我说恢复莫妮卡

之后,您可以将文件拆分为文件夹。您可以编写一个PHP脚本来这样做。并使其运行半年左右。这将帮助您组织数据。您可以让内部服务器具有非常基本的PHP页面,该页面使您可以访问单个文件夹中巨大文件中的数据,从而帮助您快速查看所需的数据。或者,您可以编写一个简单的程序来做到这一点。VB.net或C#都是很好的选择。
Ismael Miguel 2015年

3

另一个答案涵盖了其背后的原因-对于现代系统,大多数情况下,使事件查看器GUI中的加载时间保持一定程度是可以忍受的。将当前日志复制到要备份的位置,然后清除它也很好。

为了解析无论如何最终都会生成的大型日志文件,有两个不错的选择:

1)解析日志的速度超过当前GUI可以管理的速度,或者2)将日志拆分为单独的文件。

我确定2)有一些易于使用的实用程序,因此我将重点介绍1)。

首先,Powershell为此功能提供了出色的cmdlet,称为“ get-winevent”。我见过的最快性能涉及使用哈希表。这是一个示例,它从最后一天开始获取安全日志中与特定用户有关的所有事件:

$timeframe = (get-date) - (new-timespan -day 1)
$userevt = Get-WinEvent -ComputerName <specify> -FilterHashTable @{LogName='Security'; Data='<enter username here>'; StartTime=$timeframe}

$ userevt现在是事件的集合。根据匹配的数量,您可以将其通过管道传递到格式列表,以轻松读取少量事件。对于中等号,请执行相同的操作,但将输出重定向到文件:

$userevt | format-list > <outputfile>.txt

对于较大的数量,请开始过滤(例如,您希望呼叫者计算机发生我们在上面获得的用户的锁定事件):

$userevt | %{if ($_.message -match "Caller Computer .*") {$matches[0]}}

这将显示每个锁定事件的单行结果。对于2008 R2上的4GB日志,上述过程通常需要1-4分钟。

其次,尤其是对于最终可能需要管理的任何2003机器,都可以在事件查看器的左窗格中右键单击特定的日志文件,然后选择“将日志文件另存为”。

如果在本地计算机上运行事件查看器,则可以保存.evt文件,该文件可以通过get-winevent进行解析。

另外,您可以保存一个文本或CSV文件(我觉得CSV更容易),可以通过适当的命令行实用程序(例如grep或findstr)或某些程序(如notepad ++)进行解析。


1

真实示例:发生这种情况的原因是,安全日志已增加到12GB,可以根据合规性要求保留6个月。

在第3个月之前,我们无法登录到服务器2008r2和2012r2服务器。登录将停留在“欢迎”屏幕上。我们尝试将服务器内存增加到20gb,以容纳正在打开的大文件,但服务器仍然很生气。我们最终决定遵循管理引擎的建议1GB,并对其进行调整以在满文件或覆盖文件时存档旧文件。

如果需要,我们可以使用此脚本来清理超过180天的旧文件,但是我们可以将文件保留在原位。

get-childitem -Path "C:\Windows\System32\winevt\Logs" |
  where-object {$_.LastWriteTime -lt (get-date).AddDays(-180)} |
  remove-item –whatif

https://www.manageengine.com/products/active-directory-audit/help/getting-started/event-log-size-retention-settings.html

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.