查看/收集Service Fabric ETW事件OnPrem

时间:2017-01-25 17:21:43

标签: azure-service-fabric etw

我们正在尝试在OnPrem群集中查看服务ETW事件。长期计划是安装ElasticSearch集群以发送事件。我没有时间在本周构建它,而是我需要理解为什么我的应用程序正在爆炸。

我们已在其中一个节点服务器上安装了Microsoft Message Analyzer,我可以通过实时会话连接以查看群集ETW事件服务结构系统提供程序。

我希望能够查看应用程序ETW事件。我按照文章中的说明进行了操作:

https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-diagnostic-collect-logs-without-an-agent

本文似乎关注3个文件,eventFlowConfig.json,Program.cs和ServiceEventSource.cs。

EventFlowConfig.Json有:

    "inputs": [
    {
      "type": "EventSource",
      "sources": [
        { "providerName": "Microsoft-ServiceFabric-Services" },
        { "providerName": "Microsoft-ServiceFabric-Actors" },
        { "providerName": "TMHP-CacheApp-CacheAPI"  }
      ]
    }
  ],
  "filters": [
    {
      "type": "drop",
      "include": "Level == Verbose"
    }
   ],
   "outputs": [
    {
      "type": "StdOutput"
    }

在program.cs中,我有:

  using (var diagnosticsPipeline = ServiceFabricDiagnosticPipelineFactory.CreatePipeline("CacheApp-CacheAPI-DiagnosticsPipeline"))
                {

                    ServiceRuntime.RegisterServiceAsync("EndpointType",
                    context => new Endpoint(context)).GetAwaiter().GetResult();

                    ServiceEventSource.Current.ServiceTypeRegistered(Process.GetCurrentProcess().Id, typeof(Endpoint).Name);
                    // Prevents this host process from terminating so services keeps running. 
                    Thread.Sleep(Timeout.Infinite);
                }

ServiceEventSource.cs具有:

 [EventSource(Name = "TMHP-CacheApp-CacheAPI")]

我打包并部署正常,但使用MSMA我不知道如何附加到应用程序提供程序?我想我会添加一个“自定义提供程序”,但它要求GUID。有没有找到这个Guid?我假设我想为我的特定ServiceFabric应用程序添加客户提供程序:

“TMHP-CacheApp-CacheAPI”

提前致谢, 格雷格

2 个答案:

答案 0 :(得分:4)

我建议您使用PerFView,Vance有一篇文章介绍如何在PerfView中查看基于EventSource的事件https://blogs.msdn.microsoft.com/vancem/2012/07/09/introduction-tutorial-logging-etw-events-in-c-system-diagnostics-tracing-eventsource/' *'在EventSource名称前面很重要。

以下是有关如何查看actor事件的一些说明,您的自定义EventSource应该是相同的模式。

Actor和ReliableServices是基于EventSource的,因此要在PerfView中查看它们,您必须按照Vance博客上的说明进行操作。别忘了' *' !!!

  1. 使用如下命令行启动PerfView:perfview / onlyproviders = * Microsoft-ServiceFabric-Actors
  2. 您可以使用Collect |进行收集收集|开始收藏。确保高级选项|其他提供程序字段包含= * Microsoft-ServiceFabric-Actors
  3. 完成收集后,可在“活动”
  4. 下查看

    enter image description here

答案 1 :(得分:1)

基于.NET EventSource的事件提供程序的Guid实际上是基于提供程序的名称,它是使用哈希算法生成的。这篇博客文章简要介绍了它:https://blogs.msdn.microsoft.com/dcook/2015/09/08/etw-provider-names-and-guids/。您可以使用提供的ETWGuid.exe为您的提供程序生成Guid:

C:\code> .\EtwGuid.exe TMHP-CacheApp-CacheAPI

TRACELOGGING_DEFINE_PROVIDER(
    g_hMyProvider,
    "TMHP-CacheApp-CacheAPI",
    // {9deef099-8d1a-568a-1618-08ffbb7146b3}
    (0x9deef099,0x8d1a,0x568a,0x16,0x18,0x08,0xff,0xbb,0x71,0x46,0xb3));

因此TMHP-CacheApp-CacheAPI的Guid将是9deef099-8d1a-568a-1618-08ffbb7146b3。这仅适用于.NET EventSources btw,其他事件提供商可能有其他方式为提供商设置guid。

然后,您可以在Microsoft Message Analyzer,PerfView或任何其他ETW查看工具中查找该提供程序。

对于Microsoft提供的事件提供程序,您有三个内置的应该查看Service Fabric: