Viewing/Collecting Service Fabric ETW 事件 OnPrem
Viewing/Collecting Service Fabric ETW Events OnPrem
我们正在尝试查看 OnPrem 集群中的服务 ETW 事件。长期计划是安装一个 ElasticSearch 集群来发送事件。这周我没有时间构建它,相反我需要了解为什么我的应用程序会崩溃。
我们已经在其中一台节点服务器上安装了 Microsoft Message Analyzer,我可以连接实时会话以查看 Cluster ETW Events Service Fabric System Provider。
我希望能够查看应用程序 ETW 事件。我已按照此处文章中的说明进行操作:
这篇文章似乎关注 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 我不知道如何附加到应用程序提供程序?我想我会添加一个 "Custom Provider" 但它要求一个 GUID。有办法找到这个Guid吗?我假设我想为我的特定 ServiceFabric 类型的应用程序添加客户提供商:
"TMHP-CacheApp-CacheAPI"
提前致谢,
格雷格
基于.NET EventSource 的Event Provider 的Guid 实际上是基于提供者的名称,它是使用哈希算法生成的。这个博客 post 有一个简短的描述: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 顺便说一句,其他事件提供者可能有其他方式为提供者设置 guid。
然后您可以在 Microsoft Message Analyzer、PerfView 或任何其他用于 ETW 查看的工具中查找该提供程序。
对于 Microsoft 提供的事件提供程序,您有三个 built-in 您应该查看 Service Fabric:
Microsoft-ServiceFabric
- CBD93BC2-71E5-4566-B3A7-595D8EECA6E8
- 这些是 'low-level' Service Fabric 活动
Microsoft-ServiceFabric-Actors
- (https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-actors-diagnostics)
Microsoft-ServiceFabric-Services
- https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-services-diagnostics
我建议您改为使用 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 博客上的说明进行操作。不要忘记 '*'!!!
- 使用如下命令行启动 PerfView:perfview /onlyproviders=*Microsoft-ServiceFabric-Actors
- 您可以使用收集 |收藏 |开始Collection。确保高级选项 |其他提供商字段包含 =*Microsoft-ServiceFabric-Actors
- 当您完成收集后,可以在活动中查看它们
我们正在尝试查看 OnPrem 集群中的服务 ETW 事件。长期计划是安装一个 ElasticSearch 集群来发送事件。这周我没有时间构建它,相反我需要了解为什么我的应用程序会崩溃。
我们已经在其中一台节点服务器上安装了 Microsoft Message Analyzer,我可以连接实时会话以查看 Cluster ETW Events Service Fabric System Provider。
我希望能够查看应用程序 ETW 事件。我已按照此处文章中的说明进行操作:
这篇文章似乎关注 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 我不知道如何附加到应用程序提供程序?我想我会添加一个 "Custom Provider" 但它要求一个 GUID。有办法找到这个Guid吗?我假设我想为我的特定 ServiceFabric 类型的应用程序添加客户提供商:
"TMHP-CacheApp-CacheAPI"
提前致谢, 格雷格
基于.NET EventSource 的Event Provider 的Guid 实际上是基于提供者的名称,它是使用哈希算法生成的。这个博客 post 有一个简短的描述: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 顺便说一句,其他事件提供者可能有其他方式为提供者设置 guid。
然后您可以在 Microsoft Message Analyzer、PerfView 或任何其他用于 ETW 查看的工具中查找该提供程序。
对于 Microsoft 提供的事件提供程序,您有三个 built-in 您应该查看 Service Fabric:
Microsoft-ServiceFabric
-CBD93BC2-71E5-4566-B3A7-595D8EECA6E8
- 这些是 'low-level' Service Fabric 活动Microsoft-ServiceFabric-Actors
- (https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-actors-diagnostics)Microsoft-ServiceFabric-Services
- https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-services-diagnostics
我建议您改为使用 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 博客上的说明进行操作。不要忘记 '*'!!!
- 使用如下命令行启动 PerfView:perfview /onlyproviders=*Microsoft-ServiceFabric-Actors
- 您可以使用收集 |收藏 |开始Collection。确保高级选项 |其他提供商字段包含 =*Microsoft-ServiceFabric-Actors
- 当您完成收集后,可以在活动中查看它们