2014-01-23 35 views
0

我想在http请求内部到达IIS中的云服务时看到它。我已经查看了相当多的信息,但不太清楚如何启用它。例如,this site提供了一些有用的信息。继该页面中,我所实现的是这样的:Azure云服务:如何登录IIS请求

  1. 连接到我的云服务在Visual Studio和更新日志 目录转会期为1分钟(我尝试了不同的缓冲 大小,但都没有效果)。

    enable iis log transfer


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

    choose IIS logs


  3. 在这一点上,我得到一个404错误:

    404 error


所以,看来,虽然我已经成立了e接收日志文件的可能性,它们实际上并未生成。如果我可以在不重新部署的情况下完成这一切,那将是理想的,但我认为我可能需要在web.config中启用某些内容 - 只是不知道该怎么做。我已阅读this answer中提供的链接,但无法找到我实际需要实现的功能,超出了我已完成的功能。任何指针都会很棒,如果更容易尝试一种不同的(非IIS)方法,那么很高兴。

更新

因此,基于从MikeWo和kwill的有用的建议,我做了一些进一步的挖掘。首先,我确保存储帐户配置正确。它似乎是,首先是因为这是我用于我的Web应用程序的用户上传文件正确启动的相同帐户,其次是因为我启用了基础结构日志,使用与IIS相同的过程并且日志启动了:

infrastructure logs

这使我认为IIS日志不是首先生成的。所以,我用远程桌面连接到服务器。使用IIS管理器中,我第一次看到日志服务器:

iis server logging

日志文件的位置不存在。所以看起来这个文件夹还没有被创建,并且在这里没有任何记录。 接下来,我看了看记录为我的网站:

site logging

在这种情况下,有日志文件,但他们从一个多月前。最后,我按照指示herehere希望我能够提高网站的日志记录级别。

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 

并得到:

Description: The configuration section 'system.webServer/httpLogging' cannot be read because it is missing a section declaration

我不是太热衷于去服务器上更改配置文件,但我想,如果我得到了一些安慰,我沿着正确的道路走下去。另外,我意识到这些变化并不会持久,但我只是想看看我能否得到任何工作。

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

enter image description here

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

enter image description here

kwill's answer最终让我走上了正轨。 IIS文件夹确实存在,但最后一个日志来自一个月前。我添加了一个虚拟文件,它出现在blob中。我将添加一个关于为什么IIS日志不被更新的单独问题。

回答

2

Mike的答案对于WAD故障排除非常有用。但是,对于您的特定问题,假设您根据Mike的答案正确配置了存储帐户,则只需稍等一会。 WAD将不会传输IIS日志,直到IIS释放对文件的锁定,通常不会发生长达一个小时(直到IIS开始在一小时内使用新的日志文件)。

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

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

+0

非常感谢,我会锻炼耐心,看到我找到。 – acarlon

+0

我实际上在一夜之间启用了日志记录,没有任何东西出现。根据我的更新,我没有多少运气做了一些更多的分析。 – acarlon

+0

如果部署新的默认WebRole并将目录传输周期设置为1分钟,则会发现C:\ Resources \ .DiagnosticStore文件夹确​​实存在,并且会生成IIS日志并将其传输到存储。如果该文件夹在您的部署中不存在,那么只要打开诊断程序,该文件夹就是由来宾代理程序创建的,就会发生一些非常奇怪的事情。您可以查看C:\ config中的最新XML文件,并确保定义了DiagnosticStore本地存储资源。 – kwill

2

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

我的猜测是,您正在获取“ContainerNotFound”异常,因为它不在存储帐户中。发生转移时应该自动创建,所以这导致我认为转移不会发生,原因可能是缺少数据或配置不正确。

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

正如@kwill在下面的注释中指出的那样,缓冲区是保留为其传输日志的本地指针,值为None是可以接受的。对于那些可能无法通过评论来查看更正的人来添加编辑。

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

此外,您可以通过服务器浏览器插件,API或其他工具远程更改诊断。当您这样做时,API将值写入BLOB存储,实例上的WAD代理将轮询该值以查看更改。这不应该要求重新部署,也不应该导致机器的回收;然而,WAD代理确实需要一点点时间才能找到变更。你可以用暴露它的工具来配置这个值(VS Explorer没有)。

+2

有几点需要澄清。 WAD配额非常混乱,没有很好的记录。目录的缓冲区值只是为记录传输哪些文件而保留的本地空间量。这是您可以在WADDirectoriesTable中看到的数据。此设置与目录配额大小无关,并且通常可能是非常小的值。此外,'none'或0的值本质上意味着“不设置显式配额,只是使用OverallQuotaInMB中剩余的空间”,因此none的值是有效的。 – kwill

+0

感谢您对目录配额的更正和澄清! – MikeWo

+0

感谢您的详细信息,我会做一些尝试,看看我找到了什么。我同意1分钟过于激进,但我只是需要它追踪特定请求,然后我会关闭。 – acarlon