使用 Powershell 尋找事件日誌中最常見的錯誤。

使用 Powershell 尋找事件日誌中最常見的錯誤。

我在本地有我們一台伺服器的事件日誌,格式為 .evtx。我可以使用以下命令將日誌檔案載入到 PS 中:

取得 WinEvent -路徑 D:\Desktop\serverlogs.evtx

我想要做的是在「訊息」欄位上對文字以一定百分比相符的事件進行分組(假設 80% 相同)。由於我們有詳細資訊中的錯誤堆疊跟踪,這些錯誤將是相同的,但我們還記錄了客戶端的 IP、訪問的 url,這可能會有所不同。

我想對它們進行分組,以便我可以找出最常見的錯誤來優先修復它們,並且由於日誌檔案中有 25,000 多個錯誤,我寧願不手動執行此操作。

我想我可以弄清楚如何完成大部分工作,但不確定如何完成「大部分相同的群組欄位」部分,powershell 是否內建了類似的功能?

答案1

首先,您希望盡可能過濾掉,因為下一步使用 cmdlet Where-Object,這對於此類事情可能會很慢(不幸的是,它看起來不像任何支援Get-WinEventMessage 屬性通配符的參數一個事件)。

例如,僅取得「錯誤」等級事件:

$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 驅動它。

相關內容