使用Powershell查找事件日志中最常见的错误。

我有一个本地的.evtx格式的服务器的事件日志。 我可以使用以下命令将日志文件加载到PS中:

Get-WinEvent -Path D:\ Desktop \ serverlogs.evtx

我想要做的是在消息字段组的事件,其中文本匹配一定的百分比(比如80%相同)。 由于我们有详细的错误堆栈跟踪将是相同的,但我们也logging客户端的IP,被访问的URL可能会有所不同。

我想对它们进行分组,这样我就可以计算出最常见的错误来优先修复它们,并且由于日志文件中有25,000多个错误,我宁愿不要手动执行。

我想我可以研究如何做到这一点,但我不知道如何做'大部分是相同的'组字段,PowerShell有这样的内置?

首先,您想尽可能多地过滤掉,因为下一步使用了Where-Object cmdlet,对于这种事情可能会很慢(不幸的是,它看起来不像Get-WinEvent支持的任何参数事件的Message属性的通配符)。

例如,获取“错误”级别的事件:

 $events = Get-WinEvent -FilterHashTable @{ Path="D:\Desktop\serverlogs.evtx";Level=2 } 

然后,可以使用-match-match来进一步过滤到具有相似文本的那些:

 $events = $events | ?{ $_.Message -match "your similar error here" } 

现在您已经缩小了列表的范围,您可以将结果传递给Group-Object cmdlet,指定您希望将它们分组到事件的“Message”属性中:

 $events | Group-Object -Property Message 

虽然你问了如何在Powershell中这样做,我还是build议看一看Microsoft Log Parser,这将使你能够针对你的日志(和其他一些有用的技巧)编写类似SQL的查询。 没有理由不能从Powershell驱动它。