ETW 目前是否可以从 Service Fabric 群集诊断扩展流式传输到事件中心?

Is ETW streaming from Service Fabric cluster Diagnostic extension to Event Hubs currently possible?

我们目前正在努力将诊断流下沉到事件中心:

我已经使用 ARM 模板将诊断扩展添加到服务结构集群,目前正在输出到 Azure 存储,我现在需要的是设置到事件中心的接收器。

我遵循了这个 post ,它描述了如何将 SinksConfig 节点添加到 diagnostics.wadcfgx 文件:

然而,这似乎只对 Azure 云服务项目有效?在云服务项目中,通过转到角色的属性并单击启用诊断来创建文件,添加配置文件看起来很容易:

然而,对于 Service Fabric 项目,无法执行此操作,因为没有 Web 角色的概念,而且在 SF 项目的属性中似乎没有任何地方可以诊断 enabled/wadcfgx 文件已添加。

我已将诊断扩展添加到规模集中的 VM,方法是将以下内容添加到 ARM 模板:

我可以在此处看到存储帐户(ETW 当前流式传输到的位置)的定义位置,但找不到有关如何指定事件中心的指导?

我确实想知道这是否只是因为它没有在任何地方记录,或者因为 Service Fabric 还不可能。此 article 日期为 7 月,声明如下:

这似乎表明该功能目前可能对 Service Fabric 可用,也可能不可用。

总结

接下来主要有2个问题:

  1. 目前是否可以设置从 Service Fabric 群集(启用诊断扩展)到事件中心的 ETW 流?如果不是,距离有多远?
  2. 如果可以,应该怎么设置?如果要像上面定义的那样在ARM模板中定义,它的语法是什么?

查看 this 示例。 Vaclav 为各种类型的商店创建了事件监听器。确保在 ServiceEventSource 类 中包含 Nuget 包“Microsoft.Diagnostics.Tracing.EventSource”并将“System.Diagnostics.Tracing”替换为“Microsoft.Diagnostics.Tracing”。 在您的 ARM 模板中注册事件提供程序,如 here.

所示

经过反复试验,似乎有两种方法可以做到这一点。

来自Visual Studio的步骤:

  1. 在 Cloud Explorer 中找到您的规模集

  2. 选择更新诊断

  3. 记录当前正在使用的存储帐户
  4. 编辑事件中心接收器和存储帐户的 Public 和私有配置文件
  5. 更新诊断并选择根据新的配置文件进行更新

public 配置是(为简洁起见仅显示 SinksConfig 节点)

{
 "WadCfg": {
     "DiagnosticMonitorConfiguration": {

     *** config for performance counters and ETW ***

       "SinksConfig": {
            "Sink": [
             {
               "name": "eventhub",
               "EventHub": {
               "Url": "https://myhub.servicebus.windows.net/mycompanyapplication",
               "SharedAccessKeyName": "RootManageSharedAccessKey"
             }
           }
         ]
       }
     },
    "StorageAccount": "<storageaccount>"
}  

和私有配置:

{
   "storageAccountName": "<storageaccountname>",
   "storageAccountKey": "<storageaccountkey>",
   "storageAccountEndPoint": "https://core.windows.net",
   "EventHub": {
         "Url": "https://myhub.servicebus.windows.net/mycompanyapplication",
         "SharedAccessKeyName": "RootManageSharedAccessKey",
         "SharedAccessKey": "<sharedaccesskey>"
   }
}

或者此配置可以成为您的 ARM 模板的一部分,将 public 配置中的 json 复制到 VMDiagnosticsSettings 资源的 "settings" 节点(示例资源定义 here),并将私有配置复制到 "protectedsettings" 节点。