Estou planejando usar o Webalizer para analisar e representar graficamente os logs do IIS, mas como temos um farm de servidores, o Webalizer exige que eu verifique se todos os logs estão em ordem cronológica (ou então ele começará a ignorar os resultados).
Nossos logs são armazenados em gzip, então comecei descompactando tudo em arquivos separados e então usei o LogParser 2.2 para mesclar esses arquivos. Meu comando LogParser foi:
LogParser.exe -i:iisw3c "select * into combinedLogFile.log from *.log order by date, time" -o:w3c
Provavelmente não preciso de * mas preciso da maioria dos campos porque o Webalizer precisará deles. Isso funciona perfeitamente em alguns dos meus logs, mas um de nossos clusters de farm de servidores gera muitos logs, temos 14 servidores em que os logs de cada servidor são (no mínimo) 2,5 GB por dia (cada log está em um dia separado). Então, quando tento mesclar esses logs, o LogParser apenas trava com um erro genérico insignificante.
Assumi que era um problema de memória e tentei várias maneiras de minimizar a memória.
Estou usando o powershell para chamar o LogParser e, assim, comecei a tentar canalizar a entrada usando a tubulação padrão do Powershell. (Isso causou um OutOfMemoryException no Powershell (em vez de LogParser) mais cedo do que apenas usando os arquivos de qualquer maneira que eu poderia fazê-lo).
O que eu finalmente terminei é usar vários pipes nomeados sendo chamados de uma chamada de arquivo em lote para "Cat", inserindo diretamente o LogParser ... e voltei para onde comecei quando estava pré-compactando-os.
Temos outros scripts que processam esses mesmos arquivos de log e nenhum deles tem problemas (embora sua saída seja geralmente menor do que essa será).
Então, eu só quero saber se você tem alguma idéia sobre uma maneira melhor de mesclar todos esses arquivos ou algum script LogParser que funcione como o que eu criei não é suficiente.
P.S. Eu sei que eu provavelmente poderia escrever um programa de fusão no .NET como todos os logs individuais já estão classificados e, portanto, eu não precisaria ler mais do que algumas linhas de cada vez, mas eu estou tentando evitar ter que fazer isso, se possível .