网站运维工具使用iis日志分析工具分析iis日志(iis日志的配置) 我们只能通过各种系统日志来分析网站的运行状况,对于部署在IIS上的网站来说,IIS日志提供了最有价值的信息,我们可以通过它来分析

news/2024/5/20 14:16:55/文章来源:https://blog.csdn.net/heimao0307/article/details/79880066

网站运维工具使用iis日志分析工具分析iis日志(iis日志的配置)

我们只能通过各种系统日志来分析网站的运行状况,对于部署在IIS上的网站来说,IIS日志提供了最有价值的信息,我们可以通过它来分析网站的响应情况,来判断网站是否有性能问题,或者存在哪些需要改进的地方

对于一个需要长期维护的网站来说,如何让网站长久稳定运行是件很有意义的事情。有些在开发阶段没有暴露的问题很有可能就在运维阶段出现了,这也是很正常的。还有些时候,我们希望不断地优化网站,让网站更快速的响应用户请求,这些事情都发生在开发之后的运维阶段。

与开发阶段不同的,运维阶段不可能让你去调试程序,发现各类问题,我们只能通过各种系统日志来分析网站的运行状况,对于部署在IIS上的网站来说,IIS日志提供了最有价值的信息,我们可以通过它来分析网站的响应情况,来判断网站是否有性能问题,或者存在哪些需要改进的地方。

IIS日志包含了哪些信息

我前面说到【IIS日志提供了最有价值的信息】,这些信息有哪些呢?看看这个截图吧:


 

 

这里面记录了:
1. 请求发生在什么时刻,
2. 哪个客户端IP访问了服务端IP的哪个端口,
3. 客户端工具是什么类型,什么版本,
4. 请求的URL以及查询字符串参数是什么,
5. 请求的方式是GET还是POST,
6. 请求的处理结果是什么样的:HTTP状态码,以及操作系统底层的状态码,
7. 请求过程中,客户端上传了多少数据,服务端发送了多少数据,
8. 请求总共占用服务器多长时间、等等。

这些信息在分析时有什么用途,我后面再说。先对它有个印象就可以了。

IIS日志的配置

默认情况下,IIS会产生日志文件,不过,还是有些参数值得我们关注。IIS的设置界面如下(本文以 IIS 8 的界面为例)。

在IIS管理器中,选择某个网站,双击【日志】图标,请参考下图:


 

 

此时(主要部分)界面如下:


 

 

在截图中,日志的创建方式是每天产生一个新文件,按日期来生成文件名(这是默认值)。
说明:IIS使用UTC时间,所以我勾选了最下面的复选框,告诉IIS用本地时间来生成文件名。

点击【选择字段】按钮,将出现以下对话框:


 

 

注意:【发送的字段数】和【接收的字节数】默认是没有选择的。建议勾选它们。
至于其它字段,你可以根据需要来决定是否要勾选它们。

如何分析IIS日志

如果你按照我前面介绍的方法设置了IIS日志参数,那么IIS在处理请求后(的一段时间之后),会生成IIS日志。
我们可以在【日志界面】的右边区域【操作】中点击【查看日志文件】快速定位到IIS日志的根目录,然后到目录中寻找相应的日志文件(默认会根据应用程序池序号来区分目录)。

比如:我找到了我需要的日志:

这个文件一大堆密密麻麻的字符,现在我该如何分析它呢?

有个叫 Log Parser 的工具就可以专门解析IIS日志,我们可以用它来查看日志中的信息。
比如我可以运行下面的命令行(说明:为了不影响页面宽度我将命令文本换行了):


复制代码
代码如下:

"C:\Program Files\Log Parser 2.2\LogParser.exe" -i:IISW3C -o:DATAGRID 
"SELECT c-ip,cs-method,s-port,cs-uri-stem,sc-status,sc-win32-status,
sc-bytes,cs-bytes,time-taken FROM u_ex130615.log"



 

现在就可以以表格形式来阅读IIS日志了:



说明:我不推荐用这种方法来分析IIS日志,原因有二点:
1. 慢:当日志文件稍大一点的时候,用它来分析就比较浪费时间了(尤其是需要多次统计时)。
2. 不方便:它支持的查询语法不够丰富,没有像SQL Server针对数据表查询那样全面。

推荐的IIS日志分析方法

虽然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=localhost\sqlexpress;database=MyTestDb;Integrated Security=SSPI" 
-createtable:ON



导入完成后,我们就可以用熟悉的SQLSERVER来做各种查询和统计分析了,例如下面的查询:

 

 

复制代码
代码如下:

SELECT cip,csmethod,sport,csuristem,scstatus,scwin32status,scbytes,csbytes,timetaken 
FROM 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 RequestTime datetime
go
update MyMVC_WebLog set RequestTime=dateadd(hh,8,convert(varchar(10),date,120) 
+ ' ' + convert(varchar(13),time,114))



2. 直接在导出IIS日志时,把时间转换过来,此时要修改命令:

 

 

复制代码
代码如下:

"C:\Program Files\Log Parser 2.2\logparser.exe" 
"SELECT TO_LOCALTIME(TO_TIMESTAMP(ADD(TO_STRING(date, 'yyyy-MM-dd '), TO_STRING(time, 'hh:mm:ss')), 
'yyyy-MM-dd hh:mm:ss')) AS RequestTime, * FROM 'D:\Temp\u_ex130615.log' to MyMVC_WebLog2" 
-i:IISW3C -o:SQL 
-oConnString:"Driver={SQL Server};server=localhost\sqlexpress;database=MyTestDb;Integrated Security=SSPI"
-createtable:ON

 

再看这三列:

 

复制代码
代码如下:

select RequestTime, date, time from MyMVC_WebLog2



 

这样处理后,你就可以直接把date, time这二列删除了(你也可以在导出IIS日志时忽略它们,但要明确指出每个字段名)。

IIS日志中的UTC时间问题就说到这里,但愿每个人都懂了~~~~~~~~~~~

IIS日志中的异常记录

IIS日志中记录了每个请求的信息,包括正常的响应请求和有异常的请求。

这里所说的【异常】与 .net framework 中的异常没有关系。
对于一个ASP.NET程序来说,如果抛出一个未捕获异常,会记录到IIS日志中(500),但我所说的异常不仅限于此。

本文所说的异常可分为四个部分:
1. (ASP.NET)程序抛出的未捕获异常,导致服务器产生500的响应输出。
2. 404之类的请求资源不存在错误。
3. 大于500的服务器错误,例如:502,503
4. 系统错误或网络传输错误。

前三类异常可以用下面的查询获得:


复制代码
代码如下:

select scStatus, count(*) AS count, sum(timetaken * 1.0) /1000.0 AS sum_timetaken_second
from MyMVC_WebLog with(nolock)
group by scStatus
order by 3 desc



 


IIS日志中有一列:sc-win32-status ,它记录了在处理请求过程中,发生的系统级别错误,例如网络传输错误。
正常情况下,0 表示正常,出现非零值意味着出现了错误。我们可以这样统计这类错误


复制代码
代码如下:

declare @recCount bigint;
select @recCount = count(*) from MyMVC_WebLog with(nolock)
select scWin32Status, count(*) AS count, (count(*) * 100.0 / @recCount) AS [percent] 
from MyMVC_WebLog with(nolock)
where scWin32Status > 0
group by scWin32Status
order by 2 desc



 


下表列出了比较常见的与网络相关的错误及解释:

scWin32Status含义
64客户端连接已关闭(或者断开)
121传输超时
1236本地网络中断

 


所有状态码都可以通过下面的命令来获取对应的解释:

D:\Temp>net helpmsg 64指定的网络名不再可用。


关于scwin32status与scStatus,我还想补充说明一下:它们没有关联。
比如请求这个地址:http://www.abc.com/test.aspx
有可能scStatus=200,但scwin32status=64,此时表示ASP.NET已成功处理请求,但是IIS在发送响应结果时,客户端的连接断开了。
另一种情况是:scStatus=500,但scwin32status=0,此时表示,在处理请求过程中发生了未捕获异常,但异常结果成功发送给客户端。

再谈 scwin32status=64

记得以前看到 scStatus=200,scwin32status=64 这种情况时很不理解,于是搜索了互联网,各种答案都有,有的甚至说与网络爬虫有关。为了验证各种答案,我做了一个试验。我写一个ashx文件,用它来模拟长时间的网络传输,代码如下:


复制代码
代码如下:

public class Test_IIS_time_taken : IHttpHandler {

public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";</p>< p> System.Threading.Thread.Sleep(1000 * 2);

context.Response.Write(string.Format("{0}, {1}\r\n", "Start", DateTime.Now));
context.Response.Flush();

System.Threading.Thread.Sleep(1000 * 2);</p>< p> for( int i = 0; i < 20; i++ ) {
context.Response.Write(string.Format("{0}, {1}\r\n", i, DateTime.Now));
context.Response.Flush();
System.Threading.Thread.Sleep(1000 * 1);
}</p>< p> context.Response.Write("End");
}



段代码很简单,我不想做过多的解释,只想说一句:我用Thread.Sleep与Response.Flush这二个方法来模拟一个长时间的持续发送过程。

 

我们可以在浏览器中看到这样的输出(显示还没有完全结束时我截图了)

我把这个测试做了8次,只有2次是全部显示完成了,其余6次我提前关闭了浏览器窗口。
然后,我们再来看IIS日志的内容:

根据IIS日志并结合我自己的操作可以发现:
1. 当我提前关闭浏览器窗口时,就会看到scStatus=200,scwin32status=64
2. 如果请求内容全部显示完成,我就会看到scStatus=200,scwin32status=0
从这个试验我们还可以发现:timeTaken 包含了网络传输时间。


根据这个试验的结果,你是否想过一个问题:
如果你的网站的IIS日志中出现了大量的scStatus=200,scwin32status=64,而且请求是由用户的浏览器发起的。
这是什么原因造成的呢?
我的【猜想】是:用户在访问这个网站时已经不愿意再等待了,他们把浏览器窗口关掉了。
换句话说:可以从scwin32status=64的统计结果看出网站的响应速度是否能让用户满意。

寻找性能问题

IIS日志中有一列叫:timeTaken,在IIS的界面中显示了它的含义:所有时间。
这个所用时间的定义是:从服务端收到请求的第一个字节开始起,直到把所有响应内容发送出去为止的时间。
微软的网站有对这个字段做过说明:http://support.microsoft.com/kb/944884

知道了timeTaken的定义后,我们就可以利用它来分析一些请求的处理时间,即性能分析。

例如,我想查看最慢的20个页面的加载情况,可以这样查询:

select top 20 csuristem,scstatus,scwin32status,scbytes,csbytes,timetakenfrom dbo.MyMVC_WebLog with(nolock)where csUriStem like '/Pages/%'order by timeTaken desc

再或者我想再看看最慢的20个AJAX情况的响应情况,可以这样查询:


复制代码
代码如下:

select top 20 csuristem,scstatus,scwin32status,scbytes,csbytes,timetaken
from dbo.MyMVC_WebLog with(nolock)
where csUriStem like '/Pages/%'
order by timeTaken desc

 

再或者我想再看看最慢的20个AJAX情况的响应情况,可以这样查询:

 

复制代码
代码如下:

select top 20 csuristem,scstatus,scwin32status,scbytes,csbytes,timetaken
from dbo.MyMVC_WebLog with(nolock)
where csUriStem like '/ajax/%'
order by timeTaken desc



 

总之,寻找性能问题的方法就是:在查询选择timeTaken字段,并且用它做降序排序。

注意:scbytes,csbytes 这二个字段也是值得我们关注的:
1. csbytes如果过大,我们就要分析一下到底是不是因为表单包含了过多的无用数据,可否将表单拆分。
   csbytes变大还有一种可能:Cookie太大,但它会表现为很多请求的csbytes都偏大,因此容易区分。
2. scbytes如果过大,我们就要检查页面是否没有分页,或者可以考虑用按需加载的方式来实现。
典型的情况是:当大量使用ViewState时,这二个值都会变大。因此我们能通过IIS日志发现ViewState的滥用问题。
还有一种特殊情况是:上传下载文件也会导致这二个数值变大,原因我就不解释了。

scbytes,csbytes,不管是哪个数值很大,都会占用网络传输时间,对于用户来说,就需要更长的等待时间。

一下子说了三个字段,在寻找性能问题时,到底该参考哪个呢?
我认为:应该优先关注timeTaken,因为它的数值直接反映了用户的等待时间(不包括前端渲染时间)。
如果timeTaken过大时,有必要检查scbytes,csbytes是否也过大,
如果后二者也过大,那么优化的方向就是减少数据传输量,否则表示是程序处理占用了大量的时间,应该考虑优化程序代码。

寻找可改进的目标

除了可以从IIS日志中发现性能问题,还可以用它来寻找可改进的目标。
例如:
1. 有没有404错误?
2. 是否存在大量的304请求?
3. 是否存在大量重复请求?


当发现有404响应时,我们应该分析产生404的原因:
1. 是用户输入错误的URL地址吗?
2. 还是开发人员引用不存在的资源文件?
如果是后者,就应该尽快移除无效的引用,因为404响应也是一个页面响应,而且它们也会占用网络传输时间,尤其是这类请求不能缓存,它会一直出现,浪费网络资源。

 

http://www.jb51.net/os/windows/Win2003/126035.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_843153.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python爬取百度学术文献搜索引擎_通用爬虫探索(一):适用一般网站的爬虫

这是笔者参加今年的泰迪杯C题的论文简化版。虽然最后只评上了一个安慰奖&#xff0c;但个人感觉里边有些思路对爬虫工作还是有些参加价值的。所以还是放出来供大家参考一下。简介#一个爬虫可以分为两个步骤&#xff1a;1.把网页下载下来&#xff1b;2.从网页中把所需要的信息抽…

解决Community Server中网站域名被去掉了www的问题

这几天把Community Server发布到网站上&#xff0c;但是奇怪的是每次一访问&#xff0c;网站地址就从输入www.mySite.com/cs变成了mySite.com/cs&#xff0c;导致访问不能访问。经过了3天屡战屡败、屡败屡战之后&#xff0c;终于从国外的一个论坛上找到了答案。 原来是需要配置…

市场调研琐事一堆?这几个好用设计网站快收藏起来用

市场营销工作的内容主要是通过对市场调研&#xff0c;分析消费者需求&#xff0c;根据需求来制定市场运营的策略&#xff0c;以及抓好各项策略的落实&#xff0c;进而实现对市场进行全周期的。在各项具体琐碎工作中&#xff0c;学会运用以下4个神仙网站&#xff0c;能够让工作效…

推荐学习产品经理入门知识的5个网站

在万众创业的时代&#xff0c;有很多公司在创建从0到1的产品&#xff0c;对产品经理的需求日益增加&#xff0c;对于想要转型做产品经理的人来说&#xff0c;在学习入门知识的同时&#xff0c;也要去了解产品经理工作常用工具&#xff0c;这里推荐5个常用网站。 亿图图示&…

网站上传服务器浏览器打不开,网站发布或自己上传程序后,网站打不开的原因有哪些?...

网站发布或自己上传程序后&#xff0c;网站打不开的原因有哪些&#xff1f;网站打不开原因大体有这几种&#xff1a;服务器问题&#xff0c;域名绑定问题&#xff0c;服务器没有绑定上域名&#xff0c;国内主机未备案问题&#xff0c;空间默认首页问题、程序不支持、数据库问题…

(运维日志)同一服务器架设多个域名网站

部署环境说明:window server 2008 IIS 7.0 Step One 多个域名解析到服务器ip上 Step Two 创建网站,设置网站绑定 操作过程: 选择网站--->点击右键,选择网站绑定--->点击网站绑定的编辑按钮&#xff0c;弹出编辑界面 --->设置端口为80 &#xff0c;并输入域名&#…

网站集群架构搭建

不懂网站搭建Q我 3008557816

服务器搭建网站完整教程(宝塔面板+WORDPRESS)

服务器最大的用途&#xff0c;就是可以搭建网站&#xff0c;许多人都认为搭建网站是一件很难的事情&#xff0c;因为包含许多的比较专业东西&#xff0c;比如服务器、编程之类的&#xff0c;确实&#xff0c;在几年前是这样的&#xff0c;普通人想要自己做一个网站太难了 但是…

各大电子商务网站的站内搜索比较,因为要做站内搜索,所以前去观摩下

参考的网站有&#xff1a;京东商城&#xff0c;亚马逊&#xff0c;苏宁易购&#xff0c;易迅网&#xff0c;凡客诚品&#xff0c;1号店&#xff0c;新蛋中国&#xff0c;库巴&#xff0c;好孩子&#xff0c;QQ商城&#xff0c;当当网&#xff0c;麦包包等网站&#xff0c;另外淘…

(转自startos门户网站)ubuntu局域网共享

buntu 12.04安装和设置Samba实现网上邻居共享 Samba 是一款功能强大的共享工具&#xff0c;可以实现与windows的共享&#xff0c;就是我们经常在windows计算机之间使用的网上邻居功能&#xff0c;可以共享文件和打印机等。今天要介绍的是在 ubuntu 12.04 中安装和设置&#xff…

LAMP网站的CACHE机制概要

感觉这个让整个思路更清晰&#xff0c; 优化的细节更具体和有可行性。 并且可以根据不同的方案进行剪裁 ~~~~ http://xlinblog.sinaapp.com/?p2085 网站缓存主要分为五部分 服务器缓存&#xff1a;主要是基于web反向代理的静态服务器nginx和squid&#xff0c;还有apache2的mod…

如何对SharePoint网站进行预热(warmup)以提高响应速度

问题描述 SharePoint Server是一个易于使用的协作平台&#xff0c;目前在越来越多的企业中被应用开来。SharePoint Server是通过网站的形式向最终用户提供服务的&#xff0c;而这个网站是基于ASP.NET 的技术实现的。由于ASP.NET技术的特点&#xff0c;网站启动之后&#xff0c;…

在SharePoint Server 2010中更改“我的网站”

在安装SharePoint Server 2010的时候&#xff0c;创建的第一个站点是一个“NetBIOS名称”的网站&#xff0c;而这个时候&#xff0c;“我的网站”&#xff08;或称“个人网站”&#xff09;&#xff0c;也是基于此NetBIOS名称的&#xff0c;例如&#xff0c;如果你的计算机名称…

常用技术社区和网站总结

大多数的程序员都有自己经常上的一些技术网站&#xff0c;不管是学习还是咨询问题。我经常上的一些网站主要有以下几个&#xff0c;现在总结出来跟大家分享一下&#xff0c;也在这里作为记录。 中文社区 名称Logo链接描述博客园http://www.cnblogs.com/这是我上的最多的技术网站…

Nginx简单实现网站的负载均衡

在大型网站搭建时&#xff0c;都会考虑如果用户量每日不断增加&#xff0c;大量的并发访问&#xff0c;会不会给网站、数据库带来崩盘的灾难。今天我们就讨论一下&#xff0c;现实中如何解决这些问题的一套最为容易实现的方案。 控制并发&#xff0c;大家都会首先考虑的就是分布…

SpringBoot开发一个简单的网站

project&#xff1a;springboot-02&#xff01;&#xff01;&#xff01; 一、模拟一个数据库 pojo.Department Data AllArgsConstructor NoArgsConstructor public class Department {private Integer id;private String departmentName;} pojo.Employee Data NoArgsConst…

新闻网站项目静态页面--登录页

外联css login.css&#xff1a; body{background-image:url(../images/login/backgroundimg.png);background-size: cover;background-repeat: no-repeat; } .ui.basic.segment.container.content{width: 425px;margin-left: 50%;margin-top: 389px; } .ui.header{color:red;fo…

BugKu-----程序员本地网站

title: BugKu---------备份是个好习惯 date: 2021-06-23 18:48:44 description: 前言:零度安全搭建博客后的第N篇文章 top: categories: BugKu刷题 tags: 网络安全BugKu BugKu-----程序员本地网站 题目 解题思路 ​ 从本地两个字可以才想到可能是修改X-Forword-for的信息 解…

网站、文件目录权限设置

PageAdmin目录需如下权限administrators --->完全控制权限system --->完全控制权限service --->读取、写入、运行、修改、列出文件夹权限everyone或users&#xff08;如单独分配用户的&#xff0c;如虚拟主机的用户&#xff0c;给相应用户的权限&#xff09;--->用…

推荐几个好玩又有难度的编程网站

(转载)推荐几个好玩又有难度的编程网站 2008-10-28 20:38:59   来自: Jason Bourne (成都)推荐几个好玩又有难度的编程网站   作者&#xff1a;赖勇浩&#xff08;http://blog.csdn.net/lanphaday&#xff09;      在社区混久了&#xff0c;总看到许多新朋友问“我…