Azure SDK 2.6 中缺少 ETW EventSource 表

Posted

技术标签:

【中文标题】Azure SDK 2.6 中缺少 ETW EventSource 表【英文标题】:Missing ETW EventSource table in Azure SDK 2.6 【发布时间】:2015-07-24 03:06:04 【问题描述】:

我正在尝试使用 ETW 通过 Azure SDK 2.6 中的多个自定义 EventSource 类进行日志记录。

当使用计算/存储模拟器进行本地测试时,我的三个自定义 WADMyEventXYZ 表会显示出来;但是,最终的预期表“WADMyDataSets”似乎从未被创建。我应该如何确定是什么导致了这个问题?当附加调试器并单步执行调试器中的代码时,我从计算模拟器中看不到任何错误,这表明肯定调用了 EventSource 上的 WriteEntry。其他表显示在开发者存储帐户的 SchemasTable 中,但没有 WADMyDataSets 条目。

我将 WADDiagnosticInfrastrureLogsTable 导出为 CSV 并在 Excel 中检查它,并看到以下引用“MyDataSets”的消息:

验证表 MyDataSets;磁盘MB:451; RequiredQuota:451 RetentionSeconds:7776000 Pri:2 MinQuotaMB:0 RunningTotal:3757

表不存在

表 C:\Users\Caleb\AppData\Local\dftmp\Resources\b316f531-f673-4db3-ac1c-e4649e289871\WAD0104\Tables\MyDataSets 不存在,CreationDisposition = 4

表 MyDataSets 不存在,将创建一个新的

延迟表 MyDataSets 的创建,直到模式已知

稍后:

将 EventSource 提供程序名称“MyDataSets”转换为 74a2b9c9-0bd8-547f-6cad-453da47055be

将查询 id 为 MyDataSetsQuery 和正则表达式 ^MyDataSets$ 的任务与源表 MyDataSets 匹配

注册查询 MyDataSetsQuery_MyDataSets_XTableWadAccount:

将标准 PkRk (MA) 字段添加到“MyDataSetsQuery_MyDataSets”

成功编译查询“MyDataSetsQuery_MyDataSets”

从 MyDataSets 添加任务 MyDataSetsQuery_MyDataSets_WADMyDataSets_PT1M_XTableWadAccount - Partitions:-1 Pri:normal TSPolicy:start StoreType:Central Repeat:2147483647 Timeout:3600s Deadline:300s DelayRange:0.00

稍后:

在 2015-05-13T00:44:21.000Z 之后没有找到任务 MyDataSetsQuery_MyDataSets_WADMyDataSets_PT1M_XTableWadAccount 的检查点;重试超时为 3600 秒

MyDataSetsQuery_MyDataSets_WADMyDataSets_PT1M_XTableWadAccount 的第一个计划任务是在 2015-05-13T01:44:00.000Z(加上 20 秒的延迟)

稍后:

将任务 MyDataSetsQuery_MyDataSets_WADMyDataSets_PT1M_XTableWadAccount 的查询延迟从 20 秒增加到 40 秒,以便为上传计划引入随机性

稍后:

从 2015-05-13T01:43:00.000Z 到 2015-05-13T01:44:00.000Z 开始计划任务 MyDataSetsQuery_MyDataSets_WADMyDataSets_PT1M_XTableWadAccount;查询延迟 40 秒

表 C:\Users\Caleb\AppData\Local\dftmp\Resources\b316f531-f673-4db3-ac1c-e4649e289871\WAD0104\Tables\MyDataSets 不存在

在 1 毫秒内结束计划任务 MyDataSetsQuery_MyDataSets_WADMyDataSets_PT1M_XTableWadAccount 从 2015-05-13T01:43:00.000Z 到 2015-05-13T01:44:00.000Z

更新

有问题的 EventSource 上有一个事件:

[Event(1)]
public void DataSetLoaded(string traceActivityId, string userId, string reportCode, long timeToLoadMs)

删除第四个参数“timeToLoadMs”会导致 WAD 事件表按预期显示。我尝试将最后一个参数更改为字符串,但它未能再次出现。事件方法的参数数量是否有记录限制?我很确定我见过有四个参数的样本。

【问题讨论】:

【参考方案1】:

我将我的 Web 项目升级到 .NET 4.5.1,现在 WAD 表按预期显示(在此之前我只在 .NET 4.5 上运行)。

在使用 .NET 4.5.0 时,在 EventSource 事件上具有 4 个参数似乎可能存在错误。

附带说明一下,在 4.5.1 中,我现在有了 System.Diagnostics.Tracing.EventSource.SetCurrentThreadActivityId 方法,它可以让我摆脱在事件输出中手动包含 CorrelationManager.ActivityId 的麻烦。

【讨论】:

我收到了一个日志Delaying the creation of table ExceptionTable until the first event directed to that table is received。我如何检查为什么它没有收到任何消息【参考方案2】:

https://channel9.msdn.com/Series/ConnectOn-Demand/240 今天发布的视频说完全支持 ETW 事件源的 Azure 表日志记录。

【讨论】:

以上是关于Azure SDK 2.6 中缺少 ETW EventSource 表的主要内容,如果未能解决你的问题,请参考以下文章

Azure Fluent API 创建 SQL Server 时出错 - 缺少 x-ms-request-id 标头

在 Azure 中收集 Service Fabric 群集日志

Azure 门户中缺少活动订阅

节点 azure blobService.generateSharedAccessSignature() 返回不正确的令牌

Azure 应用服务中缺少“容器设置”部分

ETW 提供者的频道名称