Azure SDK 2.6 中缺少 ETW EventSource table

Missing ETW EventSource table in Azure SDK 2.6

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

在使用 compute/storage 模拟器进行本地测试时,我的三个自定义 WADMyEventXYZ table 出现了;但是,最终预期的 table“WADMyDataSets”似乎从未创建过。我应该如何确定导致此问题的原因?当附加调试器时,我在计算模拟器中没有看到任何错误,并且单步执行调试器中的代码显示 EventSource 上的 WriteEntry 确实被调用了。其他 table 显示在开发人员存储帐户的 SchemasTable 中,但那里没有 WADMyDataSets 的条目。

我将 WADDiagnosticInfrastrureLogsTable 导出到 CSV 中并在 Excel 中对其进行了检查,并看到以下引用“MyDataSets”的消息:

Validating table MyDataSets; DiskMB:451; RequiredQuota:451 RetentionSeconds:7776000 Pri:2 MinQuotaMB:0 RunningTotal:3757

Table does not exist

table C:\Users\Caleb\AppData\Local\dftmp\Resources\b316f531-f673-4db3-ac1c-e4649e289871\WAD0104\Tables\MyDataSets does not exist, CreationDisposition = 4

Table MyDataSets does not exist, will create a new one

Delaying the creation of table MyDataSets until the schema is known

稍后:

Converted EventSource provider name "MyDataSets" to {74a2b9c9-0bd8-547f-6cad-453da47055be}

Matched task with query id MyDataSetsQuery and regex ^MyDataSets$ to source table MyDataSets

Registering query MyDataSetsQuery_MyDataSets_XTableWadAccount:

Adding standard PkRk (MA) fields to 'MyDataSetsQuery_MyDataSets'

Successfully compiled the query 'MyDataSetsQuery_MyDataSets'

Added task MyDataSetsQuery_MyDataSets_WADMyDataSets_PT1M_XTableWadAccount from MyDataSets - Partitions:-1 Pri:normal TSPolicy:start StoreType:Central Repeat:2147483647 Timeout:3600s Deadline:300s DelayRange:0.00

稍后:

No checkpoint found for task MyDataSetsQuery_MyDataSets_WADMyDataSets_PT1M_XTableWadAccount after time 2015-05-13T00:44:21.000Z; retry time out is 3600 seconds

First scheduled task for MyDataSetsQuery_MyDataSets_WADMyDataSets_PT1M_XTableWadAccount is at 2015-05-13T01:44:00.000Z (plus a delay of 20s)

稍后:

Increasing query delay of task MyDataSetsQuery_MyDataSets_WADMyDataSets_PT1M_XTableWadAccount from 20 to 40 seconds to introduce randomness to the upload schedule

稍后:

Starting scheduled task MyDataSetsQuery_MyDataSets_WADMyDataSets_PT1M_XTableWadAccount from 2015-05-13T01:43:00.000Z to 2015-05-13T01:44:00.000Z; query delay 40 seconds

Table C:\Users\Caleb\AppData\Local\dftmp\Resources\b316f531-f673-4db3-ac1c-e4649e289871\WAD0104\Tables\MyDataSets does not exist

Ending scheduled task MyDataSetsQuery_MyDataSets_WADMyDataSets_PT1M_XTableWadAccount from 2015-05-13T01:43:00.000Z to 2015-05-13T01:44:00.000Z in 1ms

更新

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

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

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

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

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

附带说明一下,在 4.5.1 中,我现在有了 System.Diagnostics.Tracing.EventSource.SetCurrentThreadActivityId 方法,它可以让我在事件输出中手动删除 CorrelationManager.ActivityId。

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