Powershell を使用してイベント ログで最も一般的なエラーを見つけます。

Powershell を使用してイベント ログで最も一般的なエラーを見つけます。

ローカルに .evtx 形式のサーバー 1 台のイベント ログがあります。次のコマンドを使用して、ログ ファイルを PS に読み込むことができます。

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

私がやりたいのは、メッセージ フィールド グループ イベントで、テキストが一定の割合 (たとえば 80% 同じ) で一致することです。詳細にはエラーのスタック トレースがあるので同じになりますが、クライアントの IP やアクセスされた URL もログに記録されるため、異なる可能性があります。

最も一般的なエラーを特定して優先的に修正できるように、それらをグループ化したいのですが、ログ ファイルには 25,000 を超えるエラーがあるため、手動で行うのは避けたいです。

これのほとんどを実行する方法はわかると思いますが、「ほとんど同じフィールドをグループ化する」部分をどのように実行すればよいかわかりません。PowerShell にはこのような機能が組み込まれているのでしょうか?

答え1

まず、次のステップではコマンドレットが使用されるため、できるだけ多くのものをフィルター処理する必要があります。このコマンドレットは、この種の処理では遅くなる場合があります (残念ながら、イベントの Message プロパティのワイルドカードをサポートするWhere-Object引数は何もないようですね)。Get-WinEvent

たとえば、「エラー」レベルのイベントのみを取得します。

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

次に、-matchまたは を使用し-likeて、類似したテキストを持つものをさらに絞り込むことができます。

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

リストを絞り込んだので、結果をコマンドGroup-Objectレットにパイプし、イベントの「メッセージ」プロパティでグループ化することを指定できます。

$events | Group-Object -Property Message

答え2

Powershellでこれを行う方法を尋ねましたが、以下も参照することをお勧めします。Microsoft ログ パーサーこれにより、ログに対して SQL のようなクエリ (およびその他の便利なトリック) を記述できるようになります。Powershell から実行できない理由はありません。

関連情報