DiagnosticSource-DiagnosticListener-仅适用于框架?

时间:2018-08-08 14:21:48

标签: .net-core instrumentation

.NET Core中有一些用于跟踪和分布式跟踪的新类。在此处查看降价文档:

https://github.com/dotnet/corefx/tree/master/src/System.Diagnostics.DiagnosticSource/src

作为应用程序开发人员,我们应该使用DiagnosticListener实例在代码中检测事件,例如销售或库存消耗等,然后将消息订阅并路由到某些度量标准存储,或者允许诸如Application Insights之类的工具来自动订阅并将这些事件推送到AI云?

OR

我们是否应该创建自己的收集抽象的指标并“按常规”将其注入/向下流进栈,并假装我从未见过DiagnosticListener

我也有类似的需要将“健康事件”发布到Service Fabric,我还可以使用散布在周围的DiagnosticListener实例来解决(抽象)。

1 个答案:

答案 0 :(得分:0)

DiagnosticListener旨在使库/应用程序与跟踪系统脱钩:即,任何库都可以使用DiagnosticSource`来通知任何消费者有关有趣的操作。

跟踪系统可以动态订阅此类事件并获取有关该操作的大量信息。

如果您开发应用程序并使用支持DiagnostiListener的跟踪系统,例如在ApplicationInsights中,您可以使用DiagnosticListener来使代码与跟踪系统脱钩,也可以直接使用其API。后者效率更高,因为没有额外的适配器可以将您的DS事件转换为AppInsights /其他跟踪系统事件。您还可以更轻松地微调这些事件。

如果您实际上想要此抽象层,则前者更好。 您可以将AI配置为使用任何DiagnosticListener(通过指定includedDiagnosticSourceActivities)。

如果您编写一个库并希望依赖平台上的可用内容,以便任何应用程序都可以使用它而不会带来新的额外依赖关系,那么DiagnosticListener是您的最佳选择。

还要考虑跟踪和度量标准收集是不同的,所以跟踪要重得多,并且不进行任何汇总。如果您只需要自定义指标/事件而没有进/出过程相关性,则建议直接使用跟踪系统API。