针对高度可扩展的分布式系统的应用/定制性能计数器

时间:2018-05-20 23:17:38

标签: c# azure-service-fabric azure-application-insights etw scalable

我正在构建一个具有高规模要求(每秒大于100万个请求)的系统。我正在使用Azure服务结构集群构建此应用程序。

我已阅读并看过有关ETW记录的视频 - https://blogs.msdn.microsoft.com/vancem/2012/08/13/windows-high-speed-logging-etw-in-c-net-using-system-diagnostics-tracing-eventsource/

http://answers.flyppdevportal.com/MVC/Post/Thread/b0302547-7ffb-4ff2-aef6-6e15ebe695b3?category=azureservicefabric

https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-diagnostics-event-aggregation-wad

我仍然不确定登录系统的长期选择是什么。我有些问题 -

  1. ETW很快,但是它支持所有日志记录功能,即。记录性能计数器,日志级别即。调试,信息,警告,错误等。
  2. 对于我的规模要求(每秒大约100万个请求)应用程序洞察力是否足够好?为什么我应该通过App洞察使用ETW记录?
  3. 从ETW日志记录中可以获得的应用程序见解无法获得什么?
  4. 就应用程序线程/流程的开销而言,ETW明显优于应用程序洞察或它们是否相似?

1 个答案:

答案 0 :(得分:2)

我认为你试图将苹果与橙子进行比较,让我解释原因。

<强> AI

Application Insights(AI)是一个接收器,这意味着您使用SDK记录某些内容并将其发送给AI。 AI将缓冲已写入的事件,并使用http调用每次发送一次(我相信默认值为30秒)。

AI绝不会用于大规模的高规模日志记录。如果您看一下定价,您会发现当大量数据进入时它将花费您的成本。

<强> ETW

ETW并不是真正的下沉。您可以将任何内容记录到事件源,但只要没有附加侦听器,您的事件就无处可去。侦听器确定事件的记录位置。

对于大规模指标日志记录,团队已扩展EventSource并支持EventCounters(请参阅this doc

关于ETW的好处是你可以在同一个进程中附加一个监听器,也可以写入EventSource,或者你可以在一个单独的进程中(在同一台机器上)创建一个监听器,然后你可以配置你的日志应该去哪里至。这可能是一个稍后进行分析或处理的ETL文件,也可以转到大型数据提取端点,如Azure EventHub,然后从那里到数据湖或blob存储区进行进一步分析。

问题

  

ETW很快,但是它支持所有日志记录功能,即。记录性能计数器,日志级别即。调试,信息,警告,错误等。

是的。您可以按严重性级别和/或关键字启用日志记录。

  

对于我的规模要求(每秒大约100万个请求)应用程序洞察力是否足够好?为什么我应该通过App洞察使用ETW记录?

正如所解释的那样,我认为AI在性能和价格方面并不适用于这种规模。虽然数据是在一个单独的线程中收集/缓冲的,但它并不是为处理这种负载而设计的。它限制为每秒32K事件(source

  

我从ETW日志记录中获得的应用程序见解无法获得什么?

记录事件结束的性能和灵活性。

  

就应用程序线程/进程的开销而言,ETW明显优于应用程序洞察或它们是否类似?

不,它们不相似,ETW的开销要低得多。它的支持在操作系统中得到了解决,它的速度非常快。

您可以按照评论中的建议使用EventFlow,它确实支持进程和进程外的EventSource侦听器。

如果您最终使用其他日志记录框架,请选择支持structured logging的日志框架作为ETW。

最后的想法

我认为您首先应该考虑要记录的内容以及您想要使用它做什么。将异常和一些指标记录到AI可能是完全可以接受的,这样您就可以对应用程序进行实时监控,并将其他指标或使用详细信息记录到另一个商店,如azure表,以进行非实时分析。不要把所有的钱都放在一个水槽上,而是先确定一个日志策略。

AI的力量是丰富的可视化,但这需要付出代价。 Azure Data Lake分析不支持开箱即用的可视化,但在PB级别的日志数据上使用u-s对其他场景非常有用。我希望你能看到我在哪里。