我正在构建一个具有高规模要求(每秒大于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/
我仍然不确定登录系统的长期选择是什么。我有些问题 -
答案 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对其他场景非常有用。我希望你能看到我在哪里。