Azure云服务:如何记录IIS请求

时间:2014-01-23 11:45:17

标签: asp.net iis azure

我希望看到http请求的内部,因为它们到达IIS中的我的云服务。我已经查看了相当多的信息,但还不太清楚如何启用它。例如,this site提供了一些有用的信息。在那页之后,我所取得的成就是:

  1. 在Visual Studio中连接到我的Cloud Service并更新了日志 目录转移期限为1分钟(我尝试了不同的缓冲区 尺寸,但没有影响)。

    enable iis log transfer


  2. 在Visual Studio中选择云服务并选择查看诊断数据。然后在Windows Azure Log中选择IIS日志 目录:

    choose IIS logs


  3. 此时我收到404错误:

    404 error


  4. 因此,似乎虽然我已经设置了接收日志文件的潜力,但实际上并没有生成它们。如果我可以在不重新部署的情况下完成所有操作,那将是理想的,但我认为我可能需要在web.config中启用某些东西 - 只是不确定是什么。我已经阅读了this answer中提供的链接,但是除了我已经完成的工作之外,我找不到实际需要启用的内容。任何指针都会很棒,很高兴尝试不同的(非IIS)方法,如果这更容易。

    更新

    所以,根据MikeWo和kwill的有用建议,我做了一些进一步的挖掘。首先,我确保正确配置存储帐户。它似乎是,首先是因为这是我用于我的Web应用程序的帐户,其中用户上传的文件正确,其次是因为我使用与IIS相同的过程启用了基础设施日志,并且日志出现了: / p>

    infrastructure logs

    这让我觉得首先没有生成IIS日志。所以,我使用远程桌面连接到服务器。使用IIS管理器,我首先查看了服务器的日志记录:

    iis server logging

    日志文件位置不存在。所以似乎甚至没有创建该文件夹,这里没有记录任何内容。 接下来,我查看了我的网站的日志记录:

    site logging

    在这种情况下,有日志文件,但它们来自一个多月前。最后,我按照 here here 的说明操作,希望能够提高网站的日志记录级别。

    appcmd set config /section:httpLogging /dontLog:False
    appcmd.exe set config "<mysite>" -section:system.webServer/httpLogging /dontLog:"false" /commit:apphost
    appcmd.exe set config "<mysite>" -section:system.webServer/httpLogging /selectiveLogging:"LogAll" /commit:apphost
    

    命令成功但这似乎没有效果,我没有看到我的IIS文件夹中出现了更多日志。

    然后我尝试了:

    appcmd set config /section:httpLogging /dontLog:False /commit:WEBROOT
    

    并收到:

      

    描述:无法读取配置部分'system.webServer / httpLogging',因为它缺少部分声明

    我不太热衷于更改服务器上的配置文件,但如果我得到一些保证我会走正确的道路,我会这么做。此外,我意识到这些变化不会持久,但我只是想知道我是否可以得到任何工作。

    这些是Visual Studio中的诊断设置,它使用与我的应用程序相同的存储帐户,工作正常:

    enter image description here

    很明显,IIS诊断文件正在正确的位置转移到存储:

    enter image description here

    解决方案

    kwill's answer最终让我走上正轨。 IIS文件夹确实存在,但最后一个日志来自一个多月前。我添加了一个虚拟文件,它出现在blob中。我将添加一个单独的问题,说明IIS日志未更新的原因。

2 个答案:

答案 0 :(得分:2)

我要检查的第一件事是您为诊断数据设置的存储帐户的连接字符串。如果看起来正确,我会做的下一件事是使用存储工具查看存储帐户以确保创建WAD-IIS-LogFiles容器。这是Windows Azure诊断(WAD)删除文件的位置。您可以在Visual Studio的服务器资源管理器中使用存储工具,或其他类似免费的Cerebrata Azure Explorer(我在为Cerebrata工作时有偏见,但有许多存储工具可供选择)。

我的猜测是你的“ContainerNotFound”异常,因为它不在存储帐户中。它应该在传输发生时自动创建,因此这使我相信传输不会因为缺少数据或配置错误而发生。

设置中的缓冲区大小就是您希望在各个本地实例上留出多少空间来缓冲稍后传输的数据。您可以为所有诊断配置最大空间。您需要确保此缓冲区具有值,并且与您放入的目录配额的总和相同。在您的示例中,您有三个不同目录的1024,但是目录总数为NONE缓冲区。这个应该是3072你在这里。

正如@kwill在下面的评论中指出的那样,Buffer是保留已传输日志的本地空间,并且值为None是可接受的。此处为那些可能无法阅读评论以查看更正的人添加了编辑。

在转移期间,数据将复制到存储帐户。请注意,如果您的站点看到大量流量并生成大量诊断数据,则一分钟的传输时间非常激进。每分钟传输大量数据会增加计算机上的资源负载,并占用您分配的一些带宽以将数据移动到存储帐户。

此外,您还可以通过服务器资源管理器插件,API或其他工具远程更改诊断程序。执行此操作时,API会将值写入BLOB存储,实例上的WAD代理会轮询该值以查看更改。这不应该要求重新部署,也不应该导致机器的再循环;但是,WAD代理确实需要一点点才能获得变化。您可以使用公开它的工具配置该值较低(VS Explorer不会)。

答案 1 :(得分:2)

迈克的回答非常适合WAD故障排除。但是对于您的具体问题,假设您根据Mike的答案正确配置了存储帐户,您只需要等待一段时间。在IIS释放对文件的锁定之前,WAD不会传输IIS日志,这通常不会发生长达一个小时(直到IIS开始在一小时的顶部使用新的日志文件)。

如果您在诊断存储中获取其他数据(即您看到了Logs或perf计数器数据),那么您就知道存储帐户已正确设置。

路径应为C:\ Resources \ Directory {DeploymentID}。{Rolename} .DiagnosticStore(请参阅here)。如果要将基础结构日志写入存储帐户,则必须具有该文件夹,因为这是诊断配置和缓存文件所在的位置。