Tengo los registros de eventos de uno de nuestros servidores localmente en formato .evtx. Puedo cargar el archivo de registro en PS usando el comando:
Get-WinEvent -Ruta D:\Desktop\serverlogs.evtx
Lo que me gustaría hacer es en los eventos del grupo del campo Mensaje donde el texto coincide en un cierto porcentaje (digamos 80% igual). Como tenemos seguimientos de pila para errores en los detalles, que serán los mismos, pero también registramos la IP del cliente y la URL a la que se accedió, que probablemente será diferente.
Quiero agruparlos para poder resolver los errores más comunes y priorizar su corrección y, como hay más de 25 000 errores en el archivo de registro, prefiero no hacerlo manualmente.
Creo que puedo descubrir cómo hacer la mayor parte de esto, pero no estoy seguro de cómo podría hacer la parte de "campos de grupo que son en su mayoría iguales". ¿PowerShell tiene algo como esto integrado?
Respuesta1
En primer lugar, desea filtrar todo lo que pueda porque el siguiente paso utiliza el Where-Object
cmdlet, que puede ser lento para este tipo de cosas (desafortunadamente, no se parece a ninguno de los argumentos para Get-WinEvent
admitir comodines para la propiedad Mensaje de un evento).
Por ejemplo, obtenga solo los eventos de nivel "error":
$events = Get-WinEvent -FilterHashTable @{ Path="D:\Desktop\serverlogs.evtx";Level=2 }
Luego, puedes usar -match
o -like
para filtrar aún más aquellos que tienen texto similar:
$events = $events | ?{ $_.Message -match "your similar error here" }
Ahora que ha reducido la lista, puede canalizar los resultados al Group-Object
cmdlet, especificando que desea agruparlos en la propiedad "Mensaje" del evento:
$events | Group-Object -Property Message
Respuesta2
Aunque preguntaste cómo hacer esto en Powershell, te sugiero que también eches un vistazo aAnalizador de registros de MicrosoftEsto le permitirá escribir consultas similares a SQL en sus registros (y una gran cantidad de otros trucos útiles). Tampoco hay ninguna razón por la que no puedas manejarlo desde Powershell.