IIS日志默认就躺在服务器上,路径一般是 C:\inetpub\logs\LogFiles\W3SVC1,其中W3SVC1对应第一个站点,多个站点会往后排W3SVC2、W3SVC3。文件按天生成,名字像 u_ex240615.log,里面的时间是UTC,看的时候记得加8小时换成北京时间。打开IIS管理器,点站点,右侧“日志”里能看到目录和字段设置,别急着改,先按默认字段看明白再说。
日志本身是W3C扩展格式,纯文本,字段用空格隔开,开头几行以#开头的是注释,会告诉你这一批日志启用了哪些字段。常见字段有 date、time、s-ip、cs-method、cs-uri-stem、cs-uri-query、s-port、cs-username、c-ip、cs(User-Agent)、cs(Referer)、sc-status、sc-substatus、sc-win32-status、time-taken。c-ip是访问者IP,cs-uri-stem是请求路径,sc-status是状态码,time-taken是服务器处理耗时,单位毫秒。这几个字段够应付大部分日常排查。
查看日志别直接双击大文件,几万行记事本会卡。小文件用Notepad++打开就行,大文件我一般用Log Parser 2.2,微软自家工具,查起来快。比如想看访问量前十的IP,可以在命令行跑:LogParser "SELECT TOP 10 c-ip, COUNT(*) FROM C:\inetpub\logs\LogFiles\W3SVC1\*.log GROUP BY c-ip ORDER BY COUNT(*) DESC" -i:W3C -o:table。想导进Excel,就把日志当空格分隔的文本导入,跳过#开头的行,然后用透视表按状态码、URL、IP做统计。PowerShell也能干:Import-Csv -Path .\u_ex240615.log -Delimiter '' '',不过要先把注释行过滤掉。
分析先从状态码入手。404多,先看是不是死链,如果集中在小路劲,比如 /wp-login.php、/.env、/admin.php,基本是扫描器在碰运气。403多,可能是目录权限或防盗链设置。500最需要盯,结合sc-substatus和sc-win32-status看,能定位到是程序异常还是权限问题。200不代表没问题,得看time-taken,几百毫秒正常,连续出现几千毫秒的请求,就要查对应URL是不是慢查询或大文件下载。
再看IP和URL。某个c-ip在几分钟内请求几百次,UA还空着或者写着python-requests,大概率是爬虫或攻击。cs-uri-query里出现 union select、../、%27 这类东西,别犹豫,去看WAF和代码。Referer异常多,可能是盗链或垃圾流量。分析时先限定时间范围,比如只看某天下午两点到四点,别一上来就全量跑,不然结果没法看。

日志会越积越多,默认按天切分,磁盘小的话在IIS日志设置里限制文件大小或保留天数。日志里可能带查询参数,涉及手机号、token的,导出分析时记得脱敏。定期翻翻日志,比出事后再找强得多。