У меня есть журналы событий для одного из наших серверов локально в формате .evtx. Я могу загрузить файл журнала в PS, используя команду:
Get-WinEvent -Path D: \ Desktop \ serverlogs.evtx
То, что я хотел бы сделать, это события группы поля сообщения, где текст соответствует определенному проценту (скажем, 80%). Поскольку у нас есть трассировки стека для ошибок в деталях, которые будут одинаковыми, но мы также регистрируем IP-адрес клиента, URL-адрес, к которому был осуществлен доступ, который, вероятно, будет другим.
Я хочу сгруппировать их так, чтобы я мог проработать наиболее распространенные ошибки и определить приоритетность их исправления, а поскольку в файле журнала более 25000 ошибок, я бы предпочел не делать это вручную.
Я думаю, что могу решить, как сделать большую часть этого, но не уверен, как я могу сделать «групповые поля, которые в основном одинаковы», есть ли в PowerShell что-то подобное встроено?
Во-первых, вы хотите отфильтровать как можно больше, потому что на следующем шаге используется 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
Хотя вы спрашивали, как это сделать в Powershell, я бы посоветовал также взглянуть на Парсер журнала Microsoft Это позволит вам писать SQL-подобные запросы к вашим журналам (и множество других полезных трюков). Нет причин, по которым вы не могли бы управлять им из Powershell.