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 blobService.generateSharedAccessSignature() 返回不正确的令牌