Azure辅助角色跟踪到开发存储

时间:2015-04-12 17:30:02

标签: c# azure visual-studio-2013 azure-storage azure-worker-roles

我很难将Azure WorkerRole中的跟踪日志写入本地开发存储(最终目标是Azure存储一旦部署)。我已经搜索了好几天,并继续找到很多这样的例子http://forums.asp.net/t/2041817.aspx?Azure+Getting+Trace+Data+to+Azure+Storage。不幸的是,即使该讨论与2015年3月一样,它仍然引用了一种显然不受支持的解决方案。代码行

DiagnosticMonitorConfiguration diagnosticConfiguration = DiagnosticMonitor.GetDefaultInitialConfiguration();

使用显然现已弃用的DiagnosticMonitor类。我要么不是谷歌搜索正确的东西,要么就是如何以“最新”可支持的方式配置跟踪日志的信息令人吃惊。我可以找到关于旧的“弃用”方式的大量信息。

这是我到目前为止所拥有的。我的worker角色的app.config定义了这一部分:

<system.diagnostics>
    <trace>
        <listeners>
            <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=2.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics">
                <filter type="" />
            </add>
        </listeners>
    </trace>
</system.diagnostics>

实际上,这是由创建WorkerRole的模板自动添加的。我没有手动对该部分做任何事情。

ServiceConfiguration.csdef中的WorkerRole部分如下所示:

<WorkerRole name="Processor" vmsize="Small">
    <ConfigurationSettings>
        <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" />
    </ConfigurationSettings>
</WorkerRole>

ServiceConfiguration.Local.cscfg中的相关角色部分如下所示:

<Role name="Processor">
    <Instances count="1" />
        <ConfigurationSettings>
            <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" />
        </ConfigurationSettings>
</Role>

然后我在WorkerRole项目的一个类中有一个Trace语句,如下所示:

Trace.TraceInformation("Handling event");

与云项目中的WorkerRole关联的diagnostics.wadcfgx如下所示:

<?xml version="1.0" encoding="utf-8"?>
<DiagnosticsConfiguration xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
  <PublicConfig xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
    <WadCfg>
      <DiagnosticMonitorConfiguration overallQuotaInMB="4096">
        <DiagnosticInfrastructureLogs scheduledTransferLogLevelFilter="Verbose" />
        <Directories scheduledTransferPeriod="PT1M">
          <IISLogs containerName="wad-iis-logfiles" />
          <FailedRequestLogs containerName="wad-failedrequestlogs" />
        </Directories>
        <PerformanceCounters scheduledTransferPeriod="PT1M">
          <PerformanceCounterConfiguration counterSpecifier="\Memory\Available MBytes" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\Web Service(_Total)\ISAPI Extension Requests/sec" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\Web Service(_Total)\Bytes Total/Sec" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\ASP.NET Applications(__Total__)\Requests/Sec" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\ASP.NET Applications(__Total__)\Errors Total/Sec" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\ASP.NET\Requests Queued" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\ASP.NET\Requests Rejected" sampleRate="PT3M" />
          <PerformanceCounterConfiguration counterSpecifier="\Processor(_Total)\% Processor Time" sampleRate="PT3M" />
        </PerformanceCounters>
        <WindowsEventLog scheduledTransferPeriod="PT1M">
          <DataSource name="Application!*" />
        </WindowsEventLog>
        <CrashDumps dumpType="Full">
          <CrashDumpConfiguration processName="WaAppAgent.exe" />
          <CrashDumpConfiguration processName="WaIISHost.exe" />
          <CrashDumpConfiguration processName="WindowsAzureGuestAgent.exe" />
          <CrashDumpConfiguration processName="WaWorkerHost.exe" />
          <CrashDumpConfiguration processName="DiagnosticsAgent.exe" />
          <CrashDumpConfiguration processName="w3wp.exe" />
        </CrashDumps>
        <Logs scheduledTransferPeriod="PT1M" scheduledTransferLogLevelFilter="Verbose" />
      </DiagnosticMonitorConfiguration>
    </WadCfg>
    <StorageAccount>teststorage</StorageAccount>
  </PublicConfig>
  <PrivateConfig xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
    <StorageAccount name="teststorage" endpoint="https://core.windows.net/" />
  </PrivateConfig>
  <IsEnabled>true</IsEnabled>
</DiagnosticsConfiguration>

在Visual Studio中运行应用程序时,Azure存储和计算模拟器已成功启动。有了这些,我希望在Visual Studio中转到Server Explorer,将Azure节点一直扩展到Storage。转到(开发)节点,看到Tables节点下有一个包含我的跟踪日志的表,但那里什么都没有。

Visual Studio IDE

显然,我做错了什么,还没有找到足够清晰的文档,无论是博客还是微软,都解释了如何使其发挥作用。所以我在这里问的是什么似乎相对简单。

1 个答案:

答案 0 :(得分:0)

您正在使用SDK版本2.5 / 2.5.1,它不支持模拟器中的诊断。请参阅此链接以了解更改:https://msdn.microsoft.com/en-us/library/azure/dn873976.aspx#BKMK_breaking。从这个链接:

  

Azure计算模拟器中未收集诊断日志 - For   针对Azure SDK版本2.5(Azure计算)的项目   模拟器不再支持诊断日志的收集,   包括性能计数器,基础结构日志,IIS日志和   事件日志。此外,日志不再存储在Azure存储中或   开发存储。您可以继续查看应用程序日志   Visual Studio输出窗口或计算模拟器。这只会影响   面向Azure SDK版本2.5的项目;继续的项目   目标Azure SDK 2.4不受影响。

所以,截至今天你的选择是:

  • 将您的项目定位为使用SDK版本2.4。
  • 仅在云中进行测试。
  • 等待下一个SDK版本,希望能解决此问题。