我在本地有我們一台伺服器的事件日誌,格式為 .evtx。我可以使用以下命令將日誌檔案載入到 PS 中:
取得 WinEvent -路徑 D:\Desktop\serverlogs.evtx
我想要做的是在「訊息」欄位上對文字以一定百分比相符的事件進行分組(假設 80% 相同)。由於我們有詳細資訊中的錯誤堆疊跟踪,這些錯誤將是相同的,但我們還記錄了客戶端的 IP、訪問的 url,這可能會有所不同。
我想對它們進行分組,以便我可以找出最常見的錯誤來優先修復它們,並且由於日誌檔案中有 25,000 多個錯誤,我寧願不手動執行此操作。
我想我可以弄清楚如何完成大部分工作,但不確定如何完成「大部分相同的群組欄位」部分,powershell 是否內建了類似的功能?
答案1
首先,您希望盡可能過濾掉,因為下一步使用 cmdlet Where-Object
,這對於此類事情可能會很慢(不幸的是,它看起來不像任何支援Get-WinEvent
Message 屬性通配符的參數一個事件)。
例如,僅取得「錯誤」等級事件:
$events = Get-WinEvent -FilterHashTable @{ Path="D:\Desktop\serverlogs.evtx";Level=2 }
然後,您可以使用-match
或-like
進一步過濾出具有相似文字的內容:
$events = $events | ?{ $_.Message -match "your similar error here" }
現在您已經縮小了清單範圍,您可以將結果透過管道傳輸到 cmdlet Group-Object
,指定您希望將它們分組到事件的「Message」屬性上:
$events | Group-Object -Property Message
答案2
雖然您詢問如何在 Powershell 中執行此操作,但我建議您也看看微軟日誌解析器這將使您能夠針對日誌編寫類似 SQL 的查詢(以及大量其他有用的技巧)。你也沒有理由不能從 Powershell 驅動它。