ローカルに .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 から実行できない理由はありません。