我有一个本地的.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驱动它。