Ich habe die Ereignisprotokolle für einen unserer Server lokal im .evtx-Format. Ich kann die Protokolldatei mit dem folgenden Befehl in PS laden:
Get-WinEvent -Pfad D:\Desktop\serverlogs.evtx
Was ich tun möchte, ist, im Nachrichtenfeld Ereignisse zu gruppieren, bei denen der Text zu einem bestimmten Prozentsatz übereinstimmt (sagen wir 80 % gleich). Da wir Stacktraces für Fehler in den Details haben, die gleich sein werden, protokollieren wir aber auch die IP des Clients und die URL, auf die zugegriffen wurde, die wahrscheinlich unterschiedlich sein werden.
Ich möchte sie gruppieren, damit ich die häufigsten Fehler ermitteln und ihre Behebung priorisieren kann. Da die Protokolldatei mehr als 25.000 Fehler enthält, möchte ich dies lieber nicht manuell tun.
Ich denke, ich kann mir vorstellen, wie das meiste davon geht, bin mir aber nicht sicher, wie ich den Teil „Felder gruppieren, die größtenteils gleich sind“ hinbekomme. Ist so etwas in Powershell integriert?
Antwort1
Zunächst möchten Sie so viel wie möglich herausfiltern, da im nächsten Schritt das Where-Object
Cmdlet verwendet wird, das für derartige Dinge langsam sein kann (leider sieht es nicht so aus, als ob eines der Argumente Get-WinEvent
Platzhalter für die Message-Eigenschaft eines Ereignisses unterstützt).
Rufen Sie beispielsweise nur die Ereignisse der Ebene „Fehler“ ab:
$events = Get-WinEvent -FilterHashTable @{ Path="D:\Desktop\serverlogs.evtx";Level=2 }
Anschließend können Sie -match
oder verwenden -like
, um die Ergebnisse weiter nach denen mit ähnlichem Text zu filtern:
$events = $events | ?{ $_.Message -match "your similar error here" }
Nachdem Sie die Liste eingegrenzt haben, können Sie die Ergebnisse an das Group-Object
Cmdlet weiterleiten und dabei angeben, dass Sie sie nach der Eigenschaft „Message“ des Ereignisses gruppieren möchten:
$events | Group-Object -Property Message
Antwort2
Obwohl Sie gefragt haben, wie dies in Powershell geht, würde ich vorschlagen, auch einen Blick aufMicrosoft Log ParserAuf diese Weise können Sie SQL-ähnliche Abfragen für Ihre Protokolle schreiben (und eine ganze Reihe weiterer nützlicher Tricks). Es gibt auch keinen Grund, warum Sie es nicht von Powershell aus ausführen könnten.