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

2024-01-10

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

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


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

我确认禁用全局锁 https://msdn.microsoft.com/en-us/library/system.diagnostics.trace.usegloballock(v=vs.110).aspx没有效果。因此,性能问题与锁争用没有直接关系。

我也确认如果我转身自动冲洗 https://msdn.microsoft.com/en-us/library/system.diagnostics.trace.autoflush(v=vs.110).aspx关闭后,没有出现性能问题。

从进一步的交叉引用.NET 跟踪 API 的源代码 http://www.dotnetframework.org/default.aspx/4@0/4@0/untmp/DEVDIV_TFS/Dev10/Releases/RTMRel/ndp/fx/src/CompMod/System/Diagnostics/TraceInternal@cs/1305376/TraceInternal@cs,我的结论是,当您为日志启用 blob 存储时,它会向您的应用程序注入某种跟踪侦听器(与您在 web.config 中添加侦听器的方式相同),并且它会将收到的每个跟踪语句同步写入到斑点存储。

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

  1. 不要打开自动冲洗,而是定期手动冲洗。这将防止同步 blob 写入中断每个日志语句。
  2. 编写您自己的守护程序,定期将本地日志文件复制到 blob 存储或类似的东西
  3. 根本不要使用此 blob 存储功能,而是利用Application Insights 中的跟踪功能 https://learn.microsoft.com/en-us/azure/application-insights/app-insights-asp-net-trace-logs.

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Azure 诊断日志写入 Blob 存储的性能影响 的相关文章

随机推荐

  • 如何使用 REST 控制台对 http API 调用进行逆向工程

    我正在尝试使用 chrome 使用相同的 http POST 参数复制我在网站 即 Zoominfo com 上发出的请求休息控制台 https chrome google com webstore detail rest console
  • swift4:此客户端应用程序未批准回调 URL

    我正在使用 swift4 我想使用 twitter 登录应用程序 但是当我按下 使用 twitter 登录 按钮时 出现此错误 回调 URL 未批准用于此客户端应用程序 可以在您的应用程序设置中调整批准的回调 URL UserInfo NS
  • 使用Python获取DNS解析时间和响应时间

    PycURL 或任何其他 python 包是否提供以下信息 lookup 连接时间 我想获得与此 cURL 命令相同的信息 不使用子进程调用该命令 Command curl s w nLookup time t time namelooku
  • 我正在计算观看次数,但这会导致错误

    错误名称 page hits 用takes context True修饰 因此它必须有第一个参数 context 我制作了视图计数器 该函数必须处理人员对站点的输入并将其输出到模板 请提供现成的修复代码已经阅读了很多https docs d
  • 拒绝安装“模块”作为其自身的依赖项

    最近 我在玩 gulp 教程时遇到了这个错误 Refusing to install gulp as a dependency of itself 执行时 npm install save dev gulp 可能是什么问题 问题出在我自己的
  • Ruby:如何将变量设置为 0,或者如果已设置,则增加 1

    我知道 运算符 但认为它不会对我有帮助 尝试创建一个数组来计算对象数组中 类型 的数量 array each do c newarray c type newarray c type newarray c type 1 0 end 有没有更
  • 如何修复错误:命令“x86_64-linux-gnu-gcc”失败,退出状态为 1

    我正在尝试在 VirtualBox 机器上全新安装的 Linux 上安装 odoo 我已按原样输入此处找到的命令 Odoo 开发阅读文档 http odoo development readthedocs org en latest ins
  • 使用 jquery 窗口大小动态调整元素大小

    我已经查看了有关此主题的许多问题 但似乎无法找出我的代码有什么问题 任何帮助将不胜感激 window resize function var newwidth window innerWidth var newheight window i
  • 如何让 PHP 5.3.8 读取 .user.ini 文件?

    我有一台运行 Apache 2 2 21 和 PHP 5 3 8 的 Mac OS X 服务器 我想在每个目录的基础上设置一些 php ini 样式指令 根据PHP手册页 http www php net manual en configu
  • 如何在 Groovy 中在特定日期和时间创建新日期

    我想知道是否还有其他方法如何创建新的Date在特定日期和时间的 Groovy 中 而不是从中解析它String with Date parse方法 我可以得到完整的清单吗Date在 Groovy 中创作 您可以使用现有的 Java 方法来创
  • gstreamer playbin - 在 Windows 上设置 uri

    我正在尝试使用此站点上的 CLI 示例播放一些音频文件 http pygstdocs berlios de pygst tutorial playbin html http pygstdocs berlios de pygst tutori
  • C代码中的QA C警告消息[重复]

    这个问题在这里已经有答案了 我编写了以下一段代码并通过 QA C 进行了分析 但它显示了警告 x 具有外部链接 并且正在定义而没有任何先前的声明 请帮助我理解这一点 Code include
  • 使用 cURL 命令时出现 URL 问题

    我在使用curl 来使用网络服务时遇到了问题 如果我们使用 Postman 消费 有一个 URL 可以正常工作 但如果通过 cURL 消费 则失败 Postman 中的 URL 工作正常 https localhost WebService
  • R 将矩阵的行乘以向量的行的最快方法

    我想将矩阵的行乘以向量的每一行 元素 而不是整个向量 正如已经发布的另一个问题所讨论的那样 例如 我想使用这两个矩阵 或者 oo 是一个向量 因为它是一列 oo matrix 1 3 3 1 oop matrix 1 9 3 3 byrow
  • 如何检查滚动条是否可见?

    是否可以检查overflow auto一个 div 的 例如 HTML div style width 100px height 100px class my class content div JQUERY my class live h
  • bash 使用正则表达式查找不区分大小写

    我需要查找以三个小写字母开头的文件 但由于某种原因 我遇到了不希望的不区分大小写的行为 我将 find 与 regex 选项一起使用 但它甚至找到以大写字母开头的文件 find regextype posix egrep regex a z
  • JSON 与 XML 的性能注意事项

    我正在使用一个 Web 服务 它提供 XML 或 JSON 格式的大型结果集 哪种格式会更快或更好 基于性能 另外我应该使用哪种语言来解析 XML JSON 我应该使用 PHP 还是 JavaScript PHP 或 JavaScript
  • Android - Facebook 共享内容被覆盖

    这是我在 Facebook 上分享高分的代码 ShareLinkContent content new ShareLinkContent Builder setImageUrl Uri parse http www example com
  • 获取 Today-Extension 内通知中心的宽度

    我目前正在尝试将 CollectionView 放入 Today 扩展中 但有件事让我烦恼 我希望实现每个单元格都适合我的集合视图的一行 因此 根据项目数计算单元格宽度 在 iPhone 上一切正常 但在 iPad 上却看起来不太正常 单元
  • 将 Azure 诊断日志写入 Blob 存储的性能影响

    我们在 Azure 上运行的 C Web 应用程序使用 System Diagnostics Trace 编写跟踪语句以进行调试 故障排除 一旦我们为这些日志启用 blob 存储 使用 Azure 门户中的 应用程序日志记录 blob 选项