Filtrando o Log do IIS

Lidar com grandes quantidades de texto sempre foi um desafio para administradores Windows. Por anos, lutamos com ferramentas pobres para conseguir tirar alguma informação útil de arquivos texto. Por fim acabávamos por mandar o arquivo para um computador Unix só pra usar uma das ferramentas legais que esse sistema operacional sempre teve. Agora “Seus problemas acabaram”, com o Powershell é possível lidar bem com boa parte destes arquivos, e os administradores Unix não vão rir mais de você (ou vão rir menos).

Aqui, vou mostrar como fazer uma query em um arquivo de Log do IIS. Sei que existem ferramentas prontas para fazer queries no log do IIS, mas estou iniciando uma série chamada: Faça com o PowerShell e use apenas uma linha. O objetivo aqui é demonstrar quais foram os piores tempos de resposta para uma pagina em especifico.

Uma linha no log do IIS costuma se parecer com isto:

2009-01-04 01:57:42 W3SVC1381969044 172.23.33.67 POST /main.aspx?content=ContactRegister.ascx&Channel=NotSend 80 - 172.25.33.56 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+2.0.50727) 302 0 0 3281

Imagine mais de um milhão de linhas como essa. Pra mim soa como o inferno em forma de arquivo texto. Mas vamos dizer que você precisa saber do "inferno" quais são os piores tempos de resposta de uma pagina chamada ContactRegister.ascx. Talvez você pudesse perguntar ao diabo, já que é ele que comanda o lugar... Mas nós vamos tentar um método mais seguro:

get-content ex090103.log | select-string ContactRegister.ascx | where{ [int] $_.ToString().Split()[14] -gt 5000 }

Mesmo no inferno há algum tipo de ordem, note que os campos do log são separados por espaços. A ultima posição neste caso é um campo chamado time-taken (no exemplo acima ele mostra o tempo de 3.231 milisegundos). O segredo aqui está em converter o 14° campo (posição correspondente ao time-taken) em um inteiro para poder usa-lo dentro da condição WHERE. Neste exemplo o comando retornará todas as chamadas a esta pagina que demoraram mais de 5 segundos para responder.

Simples não?

Comentários

Postar um comentário

Postagens mais visitadas deste blog

Consultando usuario atualmente logado

Resolvendo a Provinha do Google Developer Day Brasil 2011 com Powershell

BIG-IP Cookie decode