Encontrando os erros mais comuns em logs de eventos usando Powershell.

Encontrando os erros mais comuns em logs de eventos usando Powershell.

Tenho os logs de eventos de um de nossos servidores localmente no formato .evtx. Posso carregar o arquivo de log no PS usando o comando:

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

O que eu gostaria de fazer é nos eventos do grupo de campo Mensagem onde o texto corresponde a uma certa porcentagem (digamos 80% do mesmo). Como temos stacktraces para erros nos detalhes que serão os mesmos, mas também registramos o IP do cliente, url que foi acessada que provavelmente será diferente.

Quero agrupá-los para poder descobrir os erros mais comuns para priorizar sua correção e, como há mais de 25.000 erros no arquivo de log, prefiro não fazer isso manualmente.

Acho que posso descobrir como fazer a maior parte disso, mas não tenho certeza de como poderia fazer a parte dos 'campos de grupo que são basicamente iguais'. O PowerShell tem algo assim integrado?

Responder1

Primeiro, você deseja filtrar o máximo que puder porque a próxima etapa usa o Where-Objectcmdlet, que pode ser lento para esse tipo de coisa (infelizmente, não se parece com nenhum dos argumentos para Get-WinEventcuringas de suporte para a propriedade Message de um evento).

Por exemplo, obtenha apenas os eventos de nível "erro":

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

Em seguida, você pode usar -matchou -likepara filtrar ainda mais aqueles que possuem texto semelhante:

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

Agora que reduziu a lista, você pode canalizar os resultados para o Group-Objectcmdlet, especificando que deseja agrupá-los na propriedade "Mensagem" do evento:

$events | Group-Object -Property Message

Responder2

Embora você tenha perguntado como fazer isso no Powershell, sugiro também dar uma olhada emAnalisador de log da MicrosoftIsso permitirá que você escreva consultas semelhantes a SQL em seus logs (e uma série de outros truques úteis). Não há razão para que você também não possa dirigi-lo no Powershell.

informação relacionada