Azure ServiceFabric示例未记录到ETW日志

9
我正在运行ServiceFabric的第一个示例(预览版本1.4.87):https://azure.microsoft.com/zh-cn/documentation/articles/service-fabric-create-your-first-application-in-visual-studio/,以创建一个有状态服务。虽然示例程序运行正确,但在诊断窗口中看不到ETW输出日志信息。调用log是通过ServiceEventSource.Current.ServiceMessage(...)来实现的,但当执行该方法(在ServiceEventSource.cs中实现)时,调用this.IsEnabled()返回false,因此没有写入诊断信息。如果在调试中绕过IsEnabled()调用,则仍然没有将任何内容写入诊断窗口,只包含应用程序的启动消息。在诊断中配置的提供者是默认的。
Microsoft-ServiceFabric-Actors
Microsoft-ServiceFabric-Services
cbd93bc2-71e5-4566-b3a7-595d8eeca6e8:5:0x4000000000000000

我已经将 Microsoft-ServiceFabric 添加到此列表中,但这只会让我获得更多的日志记录,而不是我的输出消息。
我还运行了 PerfView,并查看可用的提供程序,上面的前两个并不存在:Microsoft-ServiceFabric-Actors 和 Microsoft-ServiceFabric-Services。
有什么想法吗?这似乎是一个纯 ETW 问题,或者是某种 ServiceFabric 安装错误,在诊断窗口中可能具有不正确的提供程序规范。
我正在运行 Win10、VS2015 Enterprise x64。
[编辑] 在 Program.cs 中调用 ServiceEventSource.Current.ServiceTypeRegistered(Process.GetCurrentProcess().Id, typeof(MyStatefulService).Name) 也没有写出任何东西。我唯一拥有的消息是:
Service Created: Service fabric:/MyApplication/MyStatefulService partition 9505f2b3-dee5-4ea7-96b7-c861407b5283 of ServiceType MyStatefulServiceType created in Application fabric:/MyApplication ApplicationType MyApplicationType.

RunAsync has been invoked for a stateful service replica.  Application Type Name: MyApplicationType, Application Name: fabric:/MyApplication, Service Type Name: MyStatefulServiceType, Service Name: fabric:/MyApplication/MyStatefulService, Partition Id: 9505f2b3-dee5-4ea7-96b7-c861407b5283, Replica Id: 130996049833056865",

The Resource Balancer completed the Creation phase and consequently issued the action -- Add on Service -- fabric:/MyApplication/MyStatefulService Partition -- 9505f2b3-dee5-4ea7-96b7-c861407b5283 with (if relevant) SourceNode -- N/A and TargetNode -- Node.2.
< p > < em > (对于其他节点,重复上述步骤)


2
你是否解决了在PerfView中如何使它们可见的问题?我也在该应用程序中遇到了这个问题。 - g.t.w.d
2个回答

15
要查看来自您的EventSource的事件,您需要将其名称添加到Diagnostics窗口中提供程序列表中。查看ServiceEventSource定义,它将具有一个[EventSource(Name =“xxx”)]属性。这是您需要在提供程序列表上的名称('xxx')。
通常情况下,当启动诊断窗口时,Visual Studio会自动检测解决方案中的EventSources; 不确定为什么对您不起作用,但手动添加应该可以解决问题。

谢谢,就是这样了。我怀疑这是与2.8.2 SDK相关的一些错误。我已经在另一台安装了2.8.1的PC上尝试过,并且提供程序已经在Visual Studio中被正确添加了。 - João Pedro 'jota' Martins
在从Azure托管的服务织应用程序侦听ETW事件时,请确保将事件源名称列在提供程序列表中,如此处所建议--使用Visual Studio侦听Azure Service Fabric ETW事件 - JG in SD
2
除了手动添加我们自己的 ETW 提供程序之外,我们还需要关闭调试器打开的“诊断事件”选项卡,然后从 Windows 菜单中打开一个新选项卡,然后输入 ETW 提供程序。 - Toby Artisan

0

在重新组织我的解决方案后,我遇到了这个问题。我将我的服务项目移动到一个解决方案文件夹中。这时,诊断事件查看器停止从我的服务中接收消息。

将项目移回解决方案的根级别后,Visual Studio会自动将事件源名称添加到ETW提供程序列表中。

现在,使用VS 2017和/或Azure Service Fabric SDK 2.5.216.0似乎已经修复了这个错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接