gpt4 book ai didi

azure - 将 Azure 诊断日志写入 Blob 存储的性能影响

转载 作者:行者123 更新时间:2023-12-02 13:22:00 26 4
gpt4 key购买 nike

我们的 C# Web 应用程序在 Azure 上运行,使用 System.Diagnostics.Trace 编写跟踪语句以进行调试/故障排除。一旦我们为这些日志启用 blob 存储(使用 Azure 门户中的“应用程序日志记录 (blob)”选项),应用程序的响应时间就会大大减慢。如果我关闭此选项,网络应用程序会再次加速(尽管显然我们不再在 blob 存储中获取日志)。

有谁知道这是否符合预期?我们当然会在每个请求上编写大量跟踪语句(每个请求 100 条左右),但我认为这对于 Web 应用程序来说并不罕见。是否有某种方法可以诊断为什么为日志启用 blob 存储会显着减慢这些跟踪语句的执行速度?例如,编写跟踪语句是否与 Blob 存储中更新的日志同步?

最佳答案

我无法找到有关如何实现 Azure Blob 存储日志记录的任何信息。然而,这是我能够推断出的:

我确认禁用 global lock没有效果。因此,性能问题与锁争用没有直接关系。

我还确认,如果我转AutoFlush关闭,没有出现性能问题。

来自进一步交叉引用the source code for the .NET trace API ,我的结论是,当您为日志启用 blob 存储时,它会向您的应用程序注入(inject)某种跟踪监听器(与您在 web.config 中添加监听器的方式相同),并且它会将收到的每个跟踪语句同步写入到blob 存储。

因此,似乎有几种方法可以解决此问题:

  1. 不要打开 AutoFlush,而是定期手动刷新。这将防止同步 blob 写入中断每个日志语句。编写自己的守护程序,定期将本地日志文件复制到 blob 存储或类似的东西
  2. 根本不要使用此 blob 存储功能,而是利用 the tracing functionality in Application Insights

我最终做了#3,因为事实证明,我们已经配置并打开了 Application Insights,我们只是没有意识到它可以处理跟踪日志记录和查询。之后disabling sampling对于跟踪事件,我们现在有一种方法可以轻松地远程查询任何日志语句,并获取符合任何条件的完整跟踪集(关键字匹配、特定请求的所有跟踪、特定时间段内的所有跟踪等)此外,使用 Application Insights 跟踪监听器编写日志语句没有明显的同步开销,因此我们的应用程序中不需要更改任何内容(我们可以继续使用 .NET 跟踪类)。另外,由于 Application Insights 跟踪对于跟踪源非常灵活,因此我们甚至可以根据需要切换到另一个性能更高的日志记录 API(例如 ETW 或 log4net),并且 Application Insights 仍然可以工作。

最终,您应该考虑使用 Application Insights 来存储和查询您的跟踪记录。根据您最初希望将日志存储在 Blob 存储中的原因,它可能会也可能不会满足您的需求,但它对我们有用。

关于azure - 将 Azure 诊断日志写入 Blob 存储的性能影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47147806/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com