【问题标题】:Tuning PowerShell script for Logs为日志调整 PowerShell 脚本
【发布时间】:2015-08-11 14:31:50
【问题描述】:

我编写了以下脚本,用于通过分析 IIS 日志生成有关 SSRS、Excel 和性能点的报告:

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 GB 并且位置有 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)}

请对此进行调查并分享您的观点。谢谢

【问题讨论】:

  • 你真的,真的,真的,真的很想为此使用LogParser。它理解 IIS 格式,允许您编写类似 SQL 的查询,并在我的笔记本电脑上在大约 10 分钟内浏览 4GB 的 IIS 日志。哎呀,如果你愿意,你甚至可以将结果直接输出到 SQL Server。
  • @BaconBits:感谢您的回复。你能告诉我一个介绍性链接或一些关于使用 Logparser 的操作方法吗??

标签: windows-server-2008-r2 powershell-3.0


【解决方案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 程序,它有一个 GUI,但我从来没有真正关心过它。我不喜欢这个界面,但我对命令行很满意。

【讨论】:

  • 感谢您的回复。如果我在多个位置有日志文件,您能告诉我如何编辑上述查询吗?请帮忙
  • @Lilly123 根据this,您可以用逗号分隔文件列表并使用通配符。
  • @Lilly123 请注意,该答案将日志文件合并到另一个日志文件中的建议并非绝对必要。你应该可以通过FROM C:\Logs\ex*.log, D:\Logs\ex*.log等方式查询多个日志文件。
猜你喜欢
  • 2021-12-06
  • 1970-01-01
  • 2014-02-10
  • 2020-11-06
  • 2019-06-15
  • 2021-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多