【问题标题】:Azure worker role trace to development storageAzure 辅助角色跟踪到开发存储
【发布时间】:2015-06-17 23:56:53
【问题描述】:

在写入本地开发存储的 Azure WorkerRole 中获取跟踪日志时遇到很多困难(最终目标是部署后的 Azure 存储)。我已经用谷歌搜索了好几天,并不断找到很多像 http://forums.asp.net/t/2041817.aspx?Azure+Getting+Trace+Data+to+Azure+Storage 这样的例子。不幸的是,尽管该讨论是在 2015 年 3 月才进行的,但它仍然引用了一个显然不受支持的解决方案。代码行

DiagnosticMonitorConfiguration diagnosticConfiguration = DiagnosticMonitor.GetDefaultInitialConfiguration();

使用现在显然已弃用的 DiagnosticMonitor 类。我要么没有在谷歌上搜索正确的东西,要么非常缺乏关于如何以“最新”可支持方式配置跟踪日志的信息。我可以找到大量关于旧的“已弃用”方式的信息。

这是我目前所拥有的。我的工作角色的 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 部分如下所示:

<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 中的服务器资源管理器,将 Azure 节点一直扩展到存储。进入(Development)节点,看到Tables节点下有一个表,里面有我的trace日志,但是里面什么都没有。

很明显,我做错了什么,还没有找到足够清晰的文档,无论是博客还是微软,都可以解释如何让它工作。所以在这里我要问的是什么似乎相对简单。

【问题讨论】:

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


    【解决方案1】:

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

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

    所以,从今天开始,您的选择是:

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

    【讨论】:

    • 嗯,这是一个非常快速但不幸的答案。谢谢您的帮助。我肯定想在发布到 Azure 之前测试所有内容是否在本地正确设置和配置。
    • 我和你在同一条船上,这很糟糕!没有本地测试的能力就像在黑暗中拍摄并希望它能够工作。目前,我们坚持使用 SDK 2.4。
    猜你喜欢
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 2014-11-09
    • 1970-01-01
    相关资源
    最近更新 更多