2015-08-11 5 views
0

Я написал следующий скрипт для генерации отчета о SSRS, Excel и точка производительности путем анализа журналов IIS:Tuning PowerShell скрипт для журналов

Write-Host "`r" 
if(!(Test-Path E:\BI_ToolUsage)){New-Item E:\BI_ToolUsage -type directory -force} 
$today=(get-date).ToString("dd_MM_yyyy") 

Write-Host "Content Farm Selected" -f green 
$ConPaths="\\Server_logs\IC1-PS502\IIS-exports\*.log" 
"date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken" |Out-file E:\BI_ToolUsage\Content_SSRS_$today.csv 
"date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken" |Out-file E:\BI_ToolUsage\Content_ExcelService_$today.csv 
"date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken" |Out-file E:\BI_ToolUsage\Content_PerformancePoint_$today.csv 
Foreach($path in $ConPaths) 
{ 
$path 
gc $path |?{($_ | Select-String "RSViewerPage.aspx" | Out-file E:\BI_ToolUsage\Content_SSRS_$today.csv -Width 30000 -append);($_ | Select-String "xlviewer.aspx" | Out-file E:\BI_ToolUsage\Content_ExcelService_$today.csv -append -Width 30000);($_ | Select-String "PPSWebParts/ppsDashboard.css" |Out-file E:\BI_ToolUsage\Content_PerformancePoint_$today.csv -Width 30000 -append)} 
} 
$files=Get-ChildItem E:\BI_ToolUsage\Content* 
foreach($file in $files){(Get-Content $file.FullName)| Where-Object {$_ -match '\S'}|%{$_ -replace " " , ","}|Out-File $file.FullName} 
Write-Host "Completed !" 

Дело здесь размер папки составляет 19,3 ГБ и в этом файле находится 671 файл: \ Server_logs \ IC1-PS502 \ IIS-exports Когда я запускаю этот скрипт, для создания отчетов обычно требуется около 3-4 дней. Можно ли как-то оптимизировать вышеупомянутый скрипт, который может сократить время, необходимое для завершения? Согласно моей модификации знаний в следующей части кода может помочь много:

gc $path |?{($_ | Select-String "RSViewerPage.aspx" | Out-file E:\BI_ToolUsage\Content_SSRS_$today.csv -Width 30000 -append);($_ | Select-String "xlviewer.aspx" | Out-file E:\BI_ToolUsage\Content_ExcelService_$today.csv -append -Width 30000);($_ | Select-String "PPSWebParts/ppsDashboard.css" |Out-file E:\BI_ToolUsage\Content_PerformancePoint_$today.csv -Width 30000 -append)} 

Пожалуйста, посмотрите на это, и поделиться своим мнением. Благодаря

+1

Вы действительно, действительно, действительно, ДЕЙСТВИТЕЛЬНО хотите использовать [LogParser] (http://www.microsoft.com/en-us/download/details.aspx?id=24659) для этого. Он понимает формат IIS, позволяет писать SQL-подобные запросы, а на моем ноутбуке жевать через 4 ГБ журналов IIS примерно через 10 минут. Если вы хотите, вы можете даже выводить результаты непосредственно на SQL Server. –

+0

@BaconBits: спасибо за ответ. Будет ли возможно, чтобы вы рассказали мне вводную ссылку или какую-либо информацию о том, как использовать Logparser? – Lilly123

ответ

1

Если вы заинтересованы в LogParser, есть любое количество sites, но если честно, я нашел справку командной строки LogParser.exe -h и файл LogParser.chm, который устанавливается с программой довольно полезной.

Начало что-то вроде:

LogParser.exe -i:IISW3C -o:csv "SELECT date, time, s-ip, cs-method, cs-uri-stem, 
    cs-uri-query, s-port, cs-username, c-ip, cs(User-Agent), sc-status, sc-substatus, 
    sc-win32-status, time-taken INTO C:\Output\Content_SSRS_2015-08-01.csv 
    FROM C:\Logs\ex150801.log WHERE cs-uri-query LIKE '%RSViewerPage.aspx%'"` 

Обратите внимание, что я могу иметь имена полей неправильно в запросе здесь. Вы можете начать с SELECT *, чтобы посмотреть, как все это работает. Также есть дополнительные поля, которые добавляет LogParser (т. Е. Номер строки, имя файла и т. Д.), Которые вы увидите, если вы запустите SELECT *. Я также предполагаю, что строка, которую вы ищете, находится в cs-uri-query. Не видя файл, это сложно сказать, и это было достаточно долго, так как я работал с журналами IIS, чтобы забыть.

Это не самый простой инструмент для изучения, но файл справки и справки командной строки очень хорош, особенно если вы знакомы с командной строкой и знакомы с SQL. Если вы зададите день, чтобы узнать, как это работает, оно действительно окупается.

Альтернативой является программа Log Parser Studio с графическим интерфейсом, но я никогда не заботился об этом. Мне не нравится интерфейс, но мне очень нравится командная строка.

+0

Спасибо за ответ. Не могли бы вы рассказать мне, как я могу изменить указанный выше запрос, если у меня есть файлы журналов в нескольких местах? Просьба помочь – Lilly123

+0

@ Lilly123 Согласно [this] (http://stackoverflow.com/a/9838279/696808) вы можете разделить список файлов запятыми и использовать подстановочные знаки. –

+1

@ Lilly123 Обратите внимание, что предложение этого ответа объединить файлы журнала в другой файл журнала строго не требуется. Вы должны иметь возможность запрашивать несколько файлов журнала только с помощью 'FROM C: \ Logs \ ex * .log, D: \ Logs \ ex * .log' и так далее. –