segunda-feira, 26 de janeiro de 2015

Empregar Powershell na análise de logs


Em um mundo perfeito teríamos sempre o ID da correlação, a data e o horário de um erro que facilitaria a análise de um determinado comportamento, porém a maioria dos erros de sistemas de informação tem origem em condições inesperadas pelos desenvolvedores.

Nesses casos, utilizamos logs, dumps e demais dados que foram capturados sobre esses eventos para descobrir a causa raiz do problema. A análise desses dados leva tempo, principalmente em sistemas distribuídos. O Powershell pode ajudar na filtragem dos logs, desde que você saiba o que está procurando.

SharePoint gera arquivos de logs do tipo "ULS" (Unified Logging System) a cada 30 minutos em todos os servidores no Farm com eventos categorizados por horário, severidade, processo, correlação, mensagem do evento, entre outros. 

Aqui podemos empregar Powershell na análise - suponhamos que temos uma pasta x com n logs do SharePoint, a execução do script abaixo filtrará o conteúdo a partir da palavra chave definida:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
## lugar dos logs.
$childs = get-childitem "C:\temp\logs
## o caminho dos logs
$logs = $childs.FullName

foreach ($log in $logs)
{
## a palavra chave, nesse caso acesso negado (0x80070005)
$content = Get-Content $log | ? { $_ -LIKE "*0x80070005*" }
## o log filtrado
add-content -path "C:\filtered.log" $content
}
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Obs.: O loop é necessário para não esgotar a memória do sistema.

Get-ChildItem
Get-Content