说明:我不推荐用这种方法来分析IIS日志,原因有二点:
1. 慢:当日志文件稍大一点的时候,用它来分析就比较浪费时间了(尤其是需要多次统计时)。2. 不方便:它支持的查询语法不够丰富,没有像SQL Server针对数据表查询那样全面。
虽然Log Parser支持将解析的IIS日志以表格形式供人阅读,但是有时候我们需要再做一些细致分析时,可能会按不同的方式进行【多次】查询, 对于这种需求,如果每次查询都直接运行Log Parser,你会浪费很多时间。 幸运的是,Log Parser支持将解析结果以多种格式导出(以下为帮助文档截图):
在此,我建议选择输出格式为 SQL 。注意:这里的SQL并不是指SQLSERVER,而是指所有提供ODBC访问接口的数据库。我可以使用下面的命令将IIS日志导入到SQLSERVER中(说明:为了不影响页面宽度我将命令文本换行了):
C:\Program Files\Log Parser 2.2\logparser.exe SELECT * FROM 'D:\Temp\u_ex130615.log' to MyMVC_WebLog -i:IISW3C -o:SQL-oConnString:Driver={SQL Server};server=local\sqlexpress;database=MyTestDb;Integrated Security=SSPI-createtable:ON
导入完成后,我们就可以用熟悉的SQLSERVER来做各种查询和统计分析了,例如下面的查询:
SELECT cip,cethod,sport,csuristem,scstatus,scwin32status,scbytes,cytes,timetakenFROM dbo.MyMVC_WebLog如果如下:
注意:1. IIS日志在将结果导出到SQLSERVER时,字段名中不符合标识符规范的字符将会删除。 例如:c-ip 会变成 cip, s-port 会变成 sport 。2. IIS日志中记录的时间是UTC时间,而且把日期和时间分开了,导出到SQLSERVER时,会生成二个字段:
date, time这二个字段看起来很不舒服,对吧?我也很反感这个结果,下面来说说的二种解决方法:
1. 在SQLSERVER中增加一列,然后把UTC时间换成本地时区的时间,T-SQL脚本如下:
alter table MyMVC_WebLog add Time datetimegoupdate MyMVC_WebLog set Time=dateadd(hh,8,convert(varchar(10),date,120) + ' ' + convert(varchar(13),time,114))
2. 直接在导出IIS日志时,把时间转换过来,此时要修改命令:
C:\Program Files\Log Parser 2.2\logparser.exeSELECT TO_LOCALTIME(TO_TIMESTAMP(ADD(TO_STRING(date, 'yyyy-MM-dd '), TO_STRING(time, 'hh:mm:ss')),'yyyy-MM-dd hh:mm:ss')) AS Time, * FROM 'D:\Temp\u_ex130615.log' to MyMVC_WebLog2 -i:IISW3C -o:SQL-oConnString:Driver={SQL Server};server=local\sqlexpress;database=MyTestDb;Integrated Security=SSPI-createtable:ON
再看这三列:
select Time, date, time from MyMVC_WebLog2
这样处理后,你就可以直接把date, time这二列删除了(你也可以在导出IIS日志时忽略它们,但要明确指出每个字段名)。
迅速启动LogParser:进入命令行模式:输入: LOGPARSER -i:IISW3C file:D:/Log/log_SQL/Slowest10IPInIIS_MySite.sql -o:DataGrid -q:off 其中,Slowest20FilesInIIS_MySite.sql的内容如下:
[ruby] view plaincopyprint?
--rem 运行最慢的20个页面
--Finding the 20 slowest pages in your Web site
Select Top 20
LogRow as [Line Number],
date as [Date],
time as [Time],
c-ip as [Client-IP],
s-ip as [Server IP],
s-port as [Server Port],
cs-method as [ Verb],
cs-uri-stem as [ URI],
sc-bytes as [Bytes sent],
sc-status as [Status],
sc-substatus as [Sub-status],
sc-win32-status as [Win 32 Status],
time-taken as [Time Taken]
From
D:/Log/log_SQL/LogFiles/ex*.log
Order by time-taken desc
执行结果如图:从图中可以看出,访问最慢而且最频繁的页面是/Company/List.aspx, 而且集中在一个IP: 116.7.16.249 ,基本可以肯定主·这是有人恶意爬数据 ,再输入:
LOGPARSER -i:IISW3C file:D:/Log/log_SQL/Slowest10IPInIIS_MySite.sql -o:DataGrid -q:off其中,Slowest10IPInIIS_MySite.sql的内容如下:
[ruby] view plaincopyprint?
--rem 访问量最大的IP的访问明细
Select cs-uri-stem as [URI],count(cs-uri-stem) as VisitCounts,c-ip as [ClientIP]
FROM
D:Log/log_SQL/LogFiles/ex090829.log
group by cs-uri-stem,c-ip
ORDER BY VisitCounts DESC
启动管理工具,禁IP!!!
中甲直播